Lines Matching refs:master

21  * DRM leases provide information about whether a DRM master may control a DRM
25 * The original DRM master of a device 'owns' the available drm resources. It
27 * to the new DRM master. This gives the new DRM master control over the
28 * leased resources until the owner revokes the lease, or the new DRM master
62 * through the SETMASTER or DROPMASTER IOCTL, so &drm_device.master points to
74 struct drm_master *drm_lease_owner(struct drm_master *master)
76 while (master->lessor != NULL)
77 master = master->lessor;
78 return master;
82 _drm_find_lessee(struct drm_master *master, int lessee_id)
84 lockdep_assert_held(&master->dev->mode_config.idr_mutex);
85 return idr_find(&drm_lease_owner(master)->lessee_idr, lessee_id);
88 static int _drm_lease_held_master(struct drm_master *master, int id)
90 lockdep_assert_held(&master->dev->mode_config.idr_mutex);
91 if (master->lessor)
92 return idr_find(&master->leases, id) != NULL;
97 static bool _drm_has_leased(struct drm_master *master, int id)
101 lockdep_assert_held(&master->dev->mode_config.idr_mutex);
102 drm_for_each_lessee(lessee, master)
112 struct drm_master *master;
117 master = drm_file_get_master(file_priv);
118 if (!master)
120 ret = _drm_lease_held_master(master, id);
121 drm_master_put(&master);
128 struct drm_master *master;
134 master = drm_file_get_master(file_priv);
135 if (!master)
137 if (!master->lessor) {
141 mutex_lock(&master->dev->mode_config.idr_mutex);
142 ret = _drm_lease_held_master(master, id);
143 mutex_unlock(&master->dev->mode_config.idr_mutex);
146 drm_master_put(&master);
156 struct drm_master *master;
165 master = drm_file_get_master(file_priv);
166 if (!master)
168 if (!master->lessor) {
172 dev = master->dev;
175 mutex_lock(&master->dev->mode_config.idr_mutex);
177 if (_drm_lease_held_master(master, crtc->base.id)) {
189 mutex_unlock(&master->dev->mode_config.idr_mutex);
192 drm_master_put(&master);
201 * ERR_PTR(-EACCES) some other master holds the title to any object
266 void drm_lease_destroy(struct drm_master *master)
268 struct drm_device *dev = master->dev;
272 drm_dbg_lease(dev, "drm_lease_destroy %d\n", master->lessee_id);
274 /* This master is referenced by all lessees, hence it cannot be destroyed
277 WARN_ON(!list_empty(&master->lessees));
279 /* Remove this master from the lessee idr in the owner */
280 if (master->lessee_id != 0) {
281 drm_dbg_lease(dev, "remove master %d from device list of lessees\n",
282 master->lessee_id);
283 idr_remove(&(drm_lease_owner(master)->lessee_idr), master->lessee_id);
286 /* Remove this master from any lessee list it may be on */
287 list_del(&master->lessee_list);
291 if (master->lessor) {
292 /* Tell the master to check the lessee list */
294 drm_master_put(&master->lessor);
297 drm_dbg_lease(dev, "drm_lease_destroy done %d\n", master->lessee_id);
304 struct drm_master *master = top;
313 drm_dbg_lease(master->dev, "revoke leases for %p %d\n",
314 master, master->lessee_id);
317 idr_for_each_entry(&master->leases, entry, object)
318 idr_remove(&master->leases, object);
323 if (!list_empty(&master->lessees)) {
324 master = list_first_entry(&master->lessees, struct drm_master, lessee_list);
327 while (master != top && master == list_last_entry(&master->lessor->lessees, struct drm_master, lessee_list))
328 master = master->lessor;
330 if (master == top)
334 master = list_next_entry(master, lessee_list);
471 * The master associated with the specified file will have a lease
559 /* Change the file to a master one */
560 drm_master_put(&lessee_priv->master);
561 lessee_priv->master = lessee;