• Chris Wilson's avatar
    drm/i915: Allow userspace to clone contexts on creation · b81dde71
    Chris Wilson authored
    A usecase arose out of handling context recovery in mesa, whereby they
    wish to recreate a context with fresh logical state but preserving all
    other details of the original. Currently, they create a new context and
    iterate over which bits they want to copy across, but it would much more
    convenient if they were able to just pass in a target context to clone
    during creation. This essentially extends the setparam during creation
    to pull the details from a target context instead of the user supplied
    parameters.
    
    The ideal here is that we don't expose control over anything more than
    can be obtained via CONTEXT_PARAM. That is userspace retains explicit
    control over all features, and this api is just convenience.
    
    For example, you could replace
    
    	struct context_param p = { .param = CONTEXT_PARAM_VM };
    
    	param.ctx_id = old_id;
    	gem_context_get_param(&p.param);
    
    	new_id = gem_context_create();
    
    	param.ctx_id = new_id;
    	gem_context_set_param(&p.param);
    
    	gem_vm_destroy(param.value); /* drop the ref to VM_ID handle */
    
    with
    
    	struct create_ext_param p = {
    	  { .name = CONTEXT_CREATE_CLONE },
    	  .clone_id = old_id,
    	  .flags = CLONE_FLAGS_VM
    	}
    	new_id = gem_context_create_ext(&p);
    
    and not have to worry about stray namespace pollution etc.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190521211134.16117-5-chris@chris-wilson.co.uk
    b81dde71
i915_gem_context.c 54.7 KB