Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/drm2/drm_sysctl.c
Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | int drm_sysctl_init(struct drm_device *dev) | ||||
struct sysctl_oid *top, *drioid; | struct sysctl_oid *top, *drioid; | ||||
int i; | int i; | ||||
info = malloc(sizeof *info, DRM_MEM_DRIVER, M_WAITOK | M_ZERO); | info = malloc(sizeof *info, DRM_MEM_DRIVER, M_WAITOK | M_ZERO); | ||||
dev->sysctl = info; | dev->sysctl = info; | ||||
/* Add the sysctl node for DRI if it doesn't already exist */ | /* Add the sysctl node for DRI if it doesn't already exist */ | ||||
drioid = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(&sysctl___hw), OID_AUTO, | drioid = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(&sysctl___hw), OID_AUTO, | ||||
"dri", CTLFLAG_RW, NULL, "DRI Graphics"); | "dri", CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, "DRI Graphics"); | ||||
if (!drioid) { | if (!drioid) { | ||||
free(dev->sysctl, DRM_MEM_DRIVER); | free(dev->sysctl, DRM_MEM_DRIVER); | ||||
dev->sysctl = NULL; | dev->sysctl = NULL; | ||||
return (-ENOMEM); | return (-ENOMEM); | ||||
} | } | ||||
/* Find the next free slot under hw.dri */ | /* Find the next free slot under hw.dri */ | ||||
i = 0; | i = 0; | ||||
SLIST_FOREACH(oid, SYSCTL_CHILDREN(drioid), oid_link) { | SLIST_FOREACH(oid, SYSCTL_CHILDREN(drioid), oid_link) { | ||||
if (i <= oid->oid_arg2) | if (i <= oid->oid_arg2) | ||||
i = oid->oid_arg2 + 1; | i = oid->oid_arg2 + 1; | ||||
} | } | ||||
if (i > 9) { | if (i > 9) { | ||||
drm_sysctl_cleanup(dev); | drm_sysctl_cleanup(dev); | ||||
return (-ENOSPC); | return (-ENOSPC); | ||||
} | } | ||||
dev->sysctl_node_idx = i; | dev->sysctl_node_idx = i; | ||||
/* Add the hw.dri.x for our device */ | /* Add the hw.dri.x for our device */ | ||||
info->name[0] = '0' + i; | info->name[0] = '0' + i; | ||||
info->name[1] = 0; | info->name[1] = 0; | ||||
top = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(drioid), | top = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(drioid), | ||||
OID_AUTO, info->name, CTLFLAG_RW, NULL, NULL); | OID_AUTO, info->name, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, NULL); | ||||
if (!top) { | if (!top) { | ||||
drm_sysctl_cleanup(dev); | drm_sysctl_cleanup(dev); | ||||
return (-ENOMEM); | return (-ENOMEM); | ||||
} | } | ||||
for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) { | for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) { | ||||
oid = SYSCTL_ADD_OID(&info->ctx, | oid = SYSCTL_ADD_OID(&info->ctx, SYSCTL_CHILDREN(top), | ||||
SYSCTL_CHILDREN(top), | OID_AUTO, drm_sysctl_list[i].name, | ||||
OID_AUTO, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
drm_sysctl_list[i].name, | dev, 0, drm_sysctl_list[i].f, "A", NULL); | ||||
kaktus: MPSAFE | |||||
CTLTYPE_STRING | CTLFLAG_RD, | |||||
dev, | |||||
0, | |||||
drm_sysctl_list[i].f, | |||||
"A", | |||||
NULL); | |||||
if (!oid) { | if (!oid) { | ||||
drm_sysctl_cleanup(dev); | drm_sysctl_cleanup(dev); | ||||
return (-ENOMEM); | return (-ENOMEM); | ||||
} | } | ||||
} | } | ||||
SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO, "debug", | SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO, "debug", | ||||
CTLFLAG_RW, &drm_debug, sizeof(drm_debug), | CTLFLAG_RW, &drm_debug, sizeof(drm_debug), | ||||
"Enable debugging output"); | "Enable debugging output"); | ||||
▲ Show 20 Lines • Show All 284 Lines • Show Last 20 Lines |
MPSAFE