1. 28 Oct, 2017 37 commits
  2. 25 Oct, 2017 3 commits
    • Keith Packard's avatar
      drm: Add four ioctls for managing drm mode object leases [v7] · 62884cd3
      Keith Packard authored
      drm_mode_create_lease
      
      	Creates a lease for a list of drm mode objects, returning an
      	fd for the new drm_master and a 64-bit identifier for the lessee
      
      drm_mode_list_lesees
      
      	List the identifiers of the lessees for a master file
      
      drm_mode_get_lease
      
      	List the leased objects for a master file
      
      drm_mode_revoke_lease
      
      	Erase the set of objects managed by a lease.
      
      This should suffice to at least create and query leases.
      
      Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
      
       * query ioctls only query the master associated with
         the provided file.
      
       * 'mask_lease' value has been removed
      
       * change ioctl has been removed.
      
      Changes for v3 suggested in part by Dave Airlie <airlied@gmail.com>
      
       * Add revoke ioctl.
      
      Changes for v4 suggested by Dave Airlie <airlied@gmail.com>
      
       * Expand on the comment about the magic use of &drm_lease_idr_object
       * Pad lease ioctl structures to align on 64-bit boundaries
      
      Changes for v5 suggested by Dave Airlie <airlied@gmail.com>
      
       * Check for non-negative object_id in create_lease to avoid debug
         output from the kernel.
      
      Changes for v6 provided by Dave Airlie <airlied@gmail.com>
      
       * For non-universal planes add primary/cursor planes to lease
      
         If we aren't exposing universal planes to this userspace client,
         and it requests a lease on a crtc, we should implicitly export the
         primary and cursor planes for the crtc.
      
         If the lessee doesn't request universal planes, it will just see
         the crtc, but if it does request them it will then see the plane
         objects as well.
      
         This also moves the object look ups earlier as a side effect, so
         we'd exit the ioctl quicker for non-existant objects.
      
       * Restrict leases to crtc/connector/planes.
      
         This only allows leasing for objects we wish to allow.
      
      Changes for v7 provided by Dave Airlie <airlied@gmail.com>
      
       * Check pad args are 0
       * Check create flags and object count are valid.
       * Check return from fd allocation
       * Refactor lease idr setup and add some simple validation
       * Use idr_mutex uniformly (Keith)
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      62884cd3
    • Keith Packard's avatar
      drm: Check mode object lease status in all master ioctl paths [v4] · 7de440db
      Keith Packard authored
      Attempts to modify un-leased objects are rejected with an error.
      Information returned about unleased objects is modified to make them
      appear unusable and/or disconnected.
      
      Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
      
       * With the change in the __drm_mode_object_find API to pass the
         file_priv along, we can now centralize most of the lease-based
         access checks in that function.
      
       * A few places skip that API and require in-line checks.
      
      Changes for v3 provided by Dave Airlie <airlied@redhat.com>
      
       * remove support for leasing encoders.
       * add support for leasing planes.
      
      Changes for v4
      
       * Only call drm_lease_held if DRIVER_MODESET.
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      7de440db
    • 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