mirror of
https://github.com/torvalds/linux.git
synced 2026-05-04 22:43:04 -04:00
drm/i915: Move context management under GEM
Keep track of the GEM contexts underneath i915->gem.contexts and assign them their own lock for the purposes of list management. v2: Focus on lock tracking; ctx->vm is protected by ctx->mutex v3: Correct split with removal of logical HW ID Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-15-chris@chris-wilson.co.uk
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <linux/prime_numbers.h>
|
||||
|
||||
#include "gem/i915_gem_context.h"
|
||||
#include "gem/selftests/mock_context.h"
|
||||
|
||||
#include "i915_scatterlist.h"
|
||||
@@ -38,7 +39,7 @@ static bool assert_vma(struct i915_vma *vma,
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
if (vma->vm != ctx->vm) {
|
||||
if (vma->vm != rcu_access_pointer(ctx->vm)) {
|
||||
pr_err("VMA created with wrong VM\n");
|
||||
ok = false;
|
||||
}
|
||||
@@ -113,11 +114,13 @@ static int create_vmas(struct drm_i915_private *i915,
|
||||
list_for_each_entry(obj, objects, st_link) {
|
||||
for (pinned = 0; pinned <= 1; pinned++) {
|
||||
list_for_each_entry(ctx, contexts, link) {
|
||||
struct i915_address_space *vm = ctx->vm;
|
||||
struct i915_address_space *vm;
|
||||
struct i915_vma *vma;
|
||||
int err;
|
||||
|
||||
vm = i915_gem_context_get_vm_rcu(ctx);
|
||||
vma = checked_vma_instance(obj, vm, NULL);
|
||||
i915_vm_put(vm);
|
||||
if (IS_ERR(vma))
|
||||
return PTR_ERR(vma);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user