Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/drm2/drm_fops.c
Show First 20 Lines • Show All 151 Lines • ▼ Show 20 Lines | if (need_setup) { | ||||
retcode = drm_setup(dev); | retcode = drm_setup(dev); | ||||
if (retcode) | if (retcode) | ||||
goto err_undo; | goto err_undo; | ||||
} | } | ||||
sx_xunlock(&drm_global_mutex); | sx_xunlock(&drm_global_mutex); | ||||
return 0; | return 0; | ||||
err_undo: | err_undo: | ||||
mtx_lock(&Giant); /* FIXME: Giant required? */ | |||||
device_unbusy(dev->dev); | device_unbusy(dev->dev); | ||||
mtx_unlock(&Giant); | |||||
dev->open_count--; | dev->open_count--; | ||||
sx_xunlock(&drm_global_mutex); | sx_xunlock(&drm_global_mutex); | ||||
return -retcode; | return -retcode; | ||||
} | } | ||||
EXPORT_SYMBOL(drm_open); | EXPORT_SYMBOL(drm_open); | ||||
/** | /** | ||||
* Called whenever a process opens /dev/drm. | * Called whenever a process opens /dev/drm. | ||||
▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | if (!priv->minor->master) { | ||||
priv->master = drm_master_get(priv->minor->master); | priv->master = drm_master_get(priv->minor->master); | ||||
DRM_UNLOCK(dev); | DRM_UNLOCK(dev); | ||||
} | } | ||||
DRM_LOCK(dev); | DRM_LOCK(dev); | ||||
list_add(&priv->lhead, &dev->filelist); | list_add(&priv->lhead, &dev->filelist); | ||||
DRM_UNLOCK(dev); | DRM_UNLOCK(dev); | ||||
mtx_lock(&Giant); /* FIXME: Giant required? */ | |||||
device_busy(dev->dev); | device_busy(dev->dev); | ||||
mtx_unlock(&Giant); | |||||
ret = devfs_set_cdevpriv(priv, drm_release); | ret = devfs_set_cdevpriv(priv, drm_release); | ||||
if (ret != 0) | if (ret != 0) | ||||
drm_release(priv); | drm_release(priv); | ||||
return ret; | return ret; | ||||
out_free: | out_free: | ||||
free(priv, DRM_MEM_FILES); | free(priv, DRM_MEM_FILES); | ||||
▲ Show 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | #endif /* FREEBSD_NOTYET */ | ||||
free(file_priv, DRM_MEM_FILES); | free(file_priv, DRM_MEM_FILES); | ||||
/* ======================================================== | /* ======================================================== | ||||
* End inline drm_release | * End inline drm_release | ||||
*/ | */ | ||||
atomic_inc(&dev->counts[_DRM_STAT_CLOSES]); | atomic_inc(&dev->counts[_DRM_STAT_CLOSES]); | ||||
mtx_lock(&Giant); | |||||
device_unbusy(dev->dev); | device_unbusy(dev->dev); | ||||
mtx_unlock(&Giant); | |||||
if (!--dev->open_count) { | if (!--dev->open_count) { | ||||
if (atomic_read(&dev->ioctl_count)) { | if (atomic_read(&dev->ioctl_count)) { | ||||
DRM_ERROR("Device busy: %d\n", | DRM_ERROR("Device busy: %d\n", | ||||
atomic_read(&dev->ioctl_count)); | atomic_read(&dev->ioctl_count)); | ||||
} else | } else | ||||
drm_lastclose(dev); | drm_lastclose(dev); | ||||
} | } | ||||
sx_xunlock(&drm_global_mutex); | sx_xunlock(&drm_global_mutex); | ||||
▲ Show 20 Lines • Show All 137 Lines • Show Last 20 Lines |