Message ID | 20200130092239.1743672-1-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm/i915/gt: Skip global serialisation of clear_range for bxt vtd | expand |
Chris Wilson <chris@chris-wilson.co.uk> writes: > VT'd on Broxton and on Braswell require serialisation of GGTT updates. > However, it seems to only be required for insertion, so drop the > complication and heavyweight stop_machine() for clears. The range will > be serialised again before use. This makes much sense. > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> > --- > drivers/gpu/drm/i915/gt/intel_ggtt.c | 27 --------------------------- > 1 file changed, 27 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c > index 79096722ce16..81a63f7bc6c4 100644 > --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c > +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c > @@ -350,31 +350,6 @@ static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm, > stop_machine(bxt_vtd_ggtt_insert_entries__cb, &arg, NULL); > } > > -struct clear_range { > - struct i915_address_space *vm; > - u64 start; > - u64 length; > -}; > - > -static int bxt_vtd_ggtt_clear_range__cb(void *_arg) > -{ > - struct clear_range *arg = _arg; > - > - gen8_ggtt_clear_range(arg->vm, arg->start, arg->length); > - bxt_vtd_ggtt_wa(arg->vm); > - > - return 0; > -} > - > -static void bxt_vtd_ggtt_clear_range__BKL(struct i915_address_space *vm, > - u64 start, > - u64 length) > -{ > - struct clear_range arg = { vm, start, length }; > - > - stop_machine(bxt_vtd_ggtt_clear_range__cb, &arg, NULL); > -} > - > static void gen6_ggtt_clear_range(struct i915_address_space *vm, > u64 start, u64 length) > { > @@ -879,8 +854,6 @@ static int gen8_gmch_probe(struct i915_ggtt *ggtt) > IS_CHERRYVIEW(i915) /* fails with concurrent use/update */) { > ggtt->vm.insert_entries = bxt_vtd_ggtt_insert_entries__BKL; > ggtt->vm.insert_page = bxt_vtd_ggtt_insert_page__BKL; > - if (ggtt->vm.clear_range != nop_clear_range) > - ggtt->vm.clear_range = bxt_vtd_ggtt_clear_range__BKL; > } > > ggtt->invalidate = gen8_ggtt_invalidate; > -- > 2.25.0
diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c index 79096722ce16..81a63f7bc6c4 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c @@ -350,31 +350,6 @@ static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm, stop_machine(bxt_vtd_ggtt_insert_entries__cb, &arg, NULL); } -struct clear_range { - struct i915_address_space *vm; - u64 start; - u64 length; -}; - -static int bxt_vtd_ggtt_clear_range__cb(void *_arg) -{ - struct clear_range *arg = _arg; - - gen8_ggtt_clear_range(arg->vm, arg->start, arg->length); - bxt_vtd_ggtt_wa(arg->vm); - - return 0; -} - -static void bxt_vtd_ggtt_clear_range__BKL(struct i915_address_space *vm, - u64 start, - u64 length) -{ - struct clear_range arg = { vm, start, length }; - - stop_machine(bxt_vtd_ggtt_clear_range__cb, &arg, NULL); -} - static void gen6_ggtt_clear_range(struct i915_address_space *vm, u64 start, u64 length) { @@ -879,8 +854,6 @@ static int gen8_gmch_probe(struct i915_ggtt *ggtt) IS_CHERRYVIEW(i915) /* fails with concurrent use/update */) { ggtt->vm.insert_entries = bxt_vtd_ggtt_insert_entries__BKL; ggtt->vm.insert_page = bxt_vtd_ggtt_insert_page__BKL; - if (ggtt->vm.clear_range != nop_clear_range) - ggtt->vm.clear_range = bxt_vtd_ggtt_clear_range__BKL; } ggtt->invalidate = gen8_ggtt_invalidate;
VT'd on Broxton and on Braswell require serialisation of GGTT updates. However, it seems to only be required for insertion, so drop the complication and heavyweight stop_machine() for clears. The range will be serialised again before use. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/gt/intel_ggtt.c | 27 --------------------------- 1 file changed, 27 deletions(-)