[Intel-gfx] [PATCH 06/11] drm/i915/gtt: Convert vm->scratch into an array
Mika Kuoppala
mika.kuoppala at linux.intel.com
Wed Jul 10 14:53:10 UTC 2019
Chris Wilson <chris at chris-wilson.co.uk> writes:
> Quoting Mika Kuoppala (2019-07-10 15:18:32)
>> Chris Wilson <chris at chris-wilson.co.uk> writes:
>> > - if (i915_vm_is_4lvl(vm)) {
>> > - if (unlikely(setup_page_dma(vm, &vm->scratch_pdp))) {
>> > - ret = -ENOMEM;
>> > - goto free_pd;
>> > - }
>> > - fill_page_dma(&vm->scratch_pdp,
>> > - gen8_pde_encode(vm->scratch_pdp.daddr,
>> > - I915_CACHE_LLC));
>> > + fill_px(&vm->scratch[i], vm->scratch[i - 1].encode);
>> > + vm->scratch[i].encode =
>> > + gen8_pde_encode(px_dma(&vm->scratch[i]),
>> > + I915_CACHE_LLC);
>>
>> Ok. The new code makes perfect sense here.
>>
>> And with it confusion arises: how did we manage
>> to get the old code work with pdp encoding pointing to itself?
>
> What the.... You're right. That must have caused some funky GPU hangs if
> people tried to access something far outside of their set.
>
> Hmm, you know that's exactly what live_contexts/vm_isolation tries. Well
> it tries to write into random invalid addresses and see if the writes
> affect scratch of another context. Did I choose randomly carefully
> enough? Hmm. offset &= -sizeof(u32); Is there a danger there that's only
> u32 and not u64. Maybe. But otherwise it looks like it should be picking
> a prng over the whole vm->total and so should be tripping over the
> recursion :|
Worth investigation surely.
But this patch looks good and makes it sane,
Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
More information about the Intel-gfx
mailing list