Chris Wilson b81dde7194 drm/i915: Allow userspace to clone contexts on creation
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: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190521211134.16117-5-chris@chris-wilson.co.uk
2019-05-22 08:40:37 +01:00
..
2019-03-06 09:41:12 -08:00
2019-03-16 13:05:32 -07:00
2019-02-11 09:05:58 +01:00
2019-03-29 03:04:47 +01:00
2019-03-06 14:18:59 -08:00
2019-03-15 14:37:46 -07:00
2019-03-08 10:02:58 -08:00
2019-04-24 10:12:50 +10:00
2019-03-16 13:05:32 -07:00
2019-03-10 10:17:23 -07:00
2019-01-25 16:40:40 +01:00
2019-03-14 09:00:06 -07:00
2019-04-24 10:30:45 +10:00
2019-03-29 14:58:49 -07:00
2019-04-13 16:23:16 -07:00
2019-03-09 14:57:08 -08:00
2019-04-15 15:51:49 +10:00
2019-03-16 12:51:50 -07:00
2019-03-06 09:41:12 -08:00
2019-04-24 10:30:45 +10:00
2019-03-10 12:47:57 -07:00
2019-03-15 14:22:59 -07:00
2019-03-11 11:22:15 -07:00
2019-04-07 06:12:10 -10:00
2019-03-10 12:29:52 -07:00