• Chris Wilson's avatar
    drm/i915: Introduce the i915_user_extension_method · 9d1305ef
    Chris Wilson authored
    An idea for extending uABI inspired by Vulkan's extension chains.
    Instead of expanding the data struct for each ioctl every time we need
    to add a new feature, define an extension chain instead. As we add
    optional interfaces to control the ioctl, we define a new extension
    struct that can be linked into the ioctl data only when required by the
    user. The key advantage being able to ignore large control structs for
    optional interfaces/extensions, while being able to process them in a
    consistent manner.
    
    In comparison to other extensible ioctls, the key difference is the
    use of a linked chain of extension structs vs an array of tagged
    pointers. For example,
    
    struct drm_amdgpu_cs_chunk {
            __u32           chunk_id;
            __u32           length_dw;
            __u64           chunk_data;
    };
    
    struct drm_amdgpu_cs_in {
            __u32           ctx_id;
            __u32           bo_list_handle;
            __u32           num_chunks;
            __u32           _pad;
            __u64           chunks;
    };
    
    allows userspace to pass in array of pointers to extension structs, but
    must therefore keep constructing that array along side the command stream.
    In dynamic situations like that, a linked list is preferred and does not
    similar from extra cache line misses as the extension structs themselves
    must still be loaded separate to the chunks array.
    
    v2: Apply the tail call optimisation directly to nip the worry of stack
    overflow in the bud.
    v3: Defend against recursion.
    v4: Fixup local types to match new uabi
    
    Opens:
    - do we include the result as an out-field in each chain?
    struct i915_user_extension {
    	__u64 next_extension;
    	__u64 name;
    	__s32 result;
    	__u32 mbz; /* reserved for future use */
    };
    * Undecided, so provision some room for future expansion.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190322092325.5883-1-chris@chris-wilson.co.uk
    9d1305ef
i915_user_extensions.c 1.09 KB