Lines Matching full:master
30 * @master: drm_master somewhere within tree of lessees and lessors
36 struct drm_master *drm_lease_owner(struct drm_master *master) in drm_lease_owner() argument
38 while (master->lessor != NULL) in drm_lease_owner()
39 master = master->lessor; in drm_lease_owner()
40 return master; in drm_lease_owner()
46 * @master: drm_master of lessor
55 _drm_find_lessee(struct drm_master *master, int lessee_id) in _drm_find_lessee() argument
57 lockdep_assert_held(&master->dev->mode_config.idr_mutex); in _drm_find_lessee()
58 return idr_find(&drm_lease_owner(master)->lessee_idr, lessee_id); in _drm_find_lessee()
62 …* _drm_lease_held_master - check to see if an object is leased (or owned) by master (idr_mutex hel…
63 * @master: the master to check the lease status of
66 * Checks if the specified master holds a lease on the object. Return
69 * true 'master' holds a lease on (or owns) the object
70 * false 'master' does not hold a lease.
72 static int _drm_lease_held_master(struct drm_master *master, int id) in _drm_lease_held_master() argument
74 lockdep_assert_held(&master->dev->mode_config.idr_mutex); in _drm_lease_held_master()
75 if (master->lessor) in _drm_lease_held_master()
76 return idr_find(&master->leases, id) != NULL; in _drm_lease_held_master()
82 * @master: the master to check the lease status of
85 * Checks if any lessee of 'master' holds a lease on 'id'. Return
91 static bool _drm_has_leased(struct drm_master *master, int id) in _drm_has_leased() argument
95 lockdep_assert_held(&master->dev->mode_config.idr_mutex); in _drm_has_leased()
96 drm_for_each_lessee(lessee, master) in _drm_has_leased()
104 * @file_priv: the master drm_file
107 * Checks if the specified master holds a lease on the object. Return
110 * true 'master' holds a lease on (or owns) the object
111 * false 'master' does not hold a lease.
115 if (file_priv == NULL || file_priv->master == NULL) in _drm_lease_held()
118 return _drm_lease_held_master(file_priv->master, id); in _drm_lease_held()
124 * @file_priv: the master drm_file
127 * Checks if the specified master holds a lease on the object. Return
130 * true 'master' holds a lease on (or owns) the object
131 * false 'master' does not hold a lease.
135 struct drm_master *master; in drm_lease_held() local
138 if (file_priv == NULL || file_priv->master == NULL) in drm_lease_held()
141 master = file_priv->master; in drm_lease_held()
142 mutex_lock(&master->dev->mode_config.idr_mutex); in drm_lease_held()
143 ret = _drm_lease_held_master(master, id); in drm_lease_held()
144 mutex_unlock(&master->dev->mode_config.idr_mutex); in drm_lease_held()
159 struct drm_master *master; in drm_lease_filter_crtcs() local
165 if (file_priv == NULL || file_priv->master == NULL) in drm_lease_filter_crtcs()
168 master = file_priv->master; in drm_lease_filter_crtcs()
169 dev = master->dev; in drm_lease_filter_crtcs()
172 mutex_lock(&master->dev->mode_config.idr_mutex); in drm_lease_filter_crtcs()
174 if (_drm_lease_held_master(master, crtc->base.id)) { in drm_lease_filter_crtcs()
184 mutex_unlock(&master->dev->mode_config.idr_mutex); in drm_lease_filter_crtcs()
198 * ERR_PTR(-EACCESS) some other master holds the title to any object
265 * drm_lease_destroy - a master is going away (idr_mutex not held)
266 * @master: the drm_master being destroyed
270 * lessor for this master so that it can check
273 void drm_lease_destroy(struct drm_master *master) in drm_lease_destroy() argument
275 struct drm_device *dev = master->dev; in drm_lease_destroy()
279 DRM_DEBUG_LEASE("drm_lease_destroy %d\n", master->lessee_id); in drm_lease_destroy()
281 /* This master is referenced by all lessees, hence it cannot be destroyed in drm_lease_destroy()
284 WARN_ON(!list_empty(&master->lessees)); in drm_lease_destroy()
286 /* Remove this master from the lessee idr in the owner */ in drm_lease_destroy()
287 if (master->lessee_id != 0) { in drm_lease_destroy()
288 DRM_DEBUG_LEASE("remove master %d from device list of lessees\n", master->lessee_id); in drm_lease_destroy()
289 idr_remove(&(drm_lease_owner(master)->lessee_idr), master->lessee_id); in drm_lease_destroy()
292 /* Remove this master from any lessee list it may be on */ in drm_lease_destroy()
293 list_del(&master->lessee_list); in drm_lease_destroy()
297 if (master->lessor) { in drm_lease_destroy()
298 /* Tell the master to check the lessee list */ in drm_lease_destroy()
300 drm_master_put(&master->lessor); in drm_lease_destroy()
303 DRM_DEBUG_LEASE("drm_lease_destroy done %d\n", master->lessee_id); in drm_lease_destroy()
308 * @top: the master losing its lease
314 struct drm_master *master = top; in _drm_lease_revoke() local
323 DRM_DEBUG_LEASE("revoke leases for %p %d\n", master, master->lessee_id); in _drm_lease_revoke()
326 idr_for_each_entry(&master->leases, entry, object) in _drm_lease_revoke()
327 idr_remove(&master->leases, object); in _drm_lease_revoke()
332 if (!list_empty(&master->lessees)) { in _drm_lease_revoke()
333 master = list_first_entry(&master->lessees, struct drm_master, lessee_list); in _drm_lease_revoke()
336 …while (master != top && master == list_last_entry(&master->lessor->lessees, struct drm_master, les… in _drm_lease_revoke()
337 master = master->lessor; in _drm_lease_revoke()
339 if (master == top) in _drm_lease_revoke()
343 master = list_next_entry(master, lessee_list); in _drm_lease_revoke()
350 * @top: the master losing its lease
487 * The master associated with the specified file will have a lease
499 struct drm_master *lessor = lessor_priv->master; in drm_mode_create_lease_ioctl()
566 /* Change the file to a master one */ in drm_mode_create_lease_ioctl()
567 drm_master_put(&lessee_priv->master); in drm_mode_create_lease_ioctl()
568 lessee_priv->master = lessee; in drm_mode_create_lease_ioctl()
599 * Starting from the master associated with the specified file,
600 * the master with the provided lessee_id is found, and then
601 * an array of lessee ids associated with leases from that master
611 struct drm_master *lessor = lessor_priv->master, *lessee; in drm_mode_list_lessees_ioctl()
664 struct drm_master *lessee = lessee_priv->master; in drm_mode_get_lease_ioctl()
723 struct drm_master *lessor = lessor_priv->master; in drm_mode_revoke_lease_ioctl()