Skip to content
  • Keith Packard's avatar
    drm: Add drm_object lease infrastructure [v5] · 2ed077e4
    Keith Packard authored
    
    
    This provides new data structures to hold "lease" information about
    drm mode setting objects, and provides for creating new drm_masters
    which have access to a subset of the available drm resources.
    
    An 'owner' is a drm_master which is not leasing the objects from
    another drm_master, and hence 'owns' them.
    
    A 'lessee' is a drm_master which is leasing objects from some other
    drm_master. Each lessee holds the set of objects which it is leasing
    from the lessor.
    
    A 'lessor' is a drm_master which is leasing objects to another
    drm_master. This is the same as the owner in the current code.
    
    The set of objects any drm_master 'controls' is limited to the set of
    objects it leases (for lessees) or all objects (for owners).
    
    Objects not controlled by a drm_master cannot be modified through the
    various state manipulating ioctls, and any state reported back to user
    space will be edited to make them appear idle and/or unusable. For
    instance, connectors always report 'disconnected', while encoders
    report no possible crtcs or clones.
    
    The full list of lessees leasing objects from an owner (either
    directly, or indirectly through another lessee), can be searched from
    an idr in the drm_master of the owner.
    
    Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
    
    * Sub-leasing has been disabled.
    
    * BUG_ON for lock checking replaced with lockdep_assert_held
    
    * 'change' ioctl has been removed.
    
    * Leased objects can always be controlled by the lessor; the
      'mask_lease' flag has been removed
    
    * Checking for leased status has been simplified, replacing
      the drm_lease_check function with drm_lease_held.
    
    Changes in v3, some suggested by Dave Airlie <airlied@gmail.com>
    
    * Add revocation. This allows leases to be effectively revoked by
      removing all of the objects they have access to. The lease itself
      hangs around as it's hanging off a file.
    
    * Free the leases IDR when the master is destroyed
    
    * _drm_lease_held should look at lessees, not lessor
    
    * Allow non-master files to check for lease status
    
    Changes in v4, suggested by Dave Airlie <airlied@gmail.com>
    
    * Formatting and whitespace changes
    
    Changes in v5 (airlied)
    
    * check DRIVER_MODESET before lease destroy call
    * check DRIVER_MODESET for lease revoke (Chris)
    * Use idr_mutex uniformly for all lease elements of struct drm_master. (Keith)
    
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    2ed077e4