[Intel-xe] [PATCH] drm/xe: don't skip rebinds if there's a NULL binding involved
Matthew Brost
matthew.brost at intel.com
Sat Jul 29 04:13:28 UTC 2023
On Fri, Jul 28, 2023 at 08:30:59PM -0700, Paulo Zanoni wrote:
> Commit a042bb4ca894 ("drm/xe: Avoid doing rebinds") causes
> regressions in numerous Vulkan dEQP sparse-related tests. The errors
> happen in tests that:
>
> - check residencyNonResidentStrict=true behavior (use NULL bindings
> and check that they read/write zero)
> - and use buffers bigger than 2MB
> - and write through sparse buffers using compute shaders with ssbos
>
> So for example, the test:
> - dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.buffer_size_2_24
>
> fails only if residencyNonResidentStrict is true, otherwise it passes
> (becasue otherwise it doesn't check the values of the ranges that were
> supposed to be bound through NULL bindings).
>
> But the test:
> - dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.buffer_size_2_20
>
Thanks for finding this.
> always passes because it uses a smaller buffer, despite doing
> everything else equally. By maninpulating the sizes of the buffers we
> can see that 2MB is the range where the test starts failing.
>
> On the other hand, some other 2_24 tests were passing, despite having
> 4MB buffers and checking the contents of NULL binding buffers.
>
> I can't claim I have a deep understanding of the code invovled here,
The problem is if you go from NULL to non-NULL or vice versa so I
believe this fix isn't quite right. Let me try to respin.
Matt
> but this patch seems to be the minimal 'revert' that fixes the issue
> and should be a good point to start the conversation on the mailing
> list.
>
> Cc: Matthew Brost <matthew.brost at intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Testcase: dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.buffer_size_2_24
> Fixes: a042bb4ca894 ("drm/xe: Avoid doing rebinds")
> Reference: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23045
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
> drivers/gpu/drm/xe/xe_vm.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 6429d6e5113d..955f664ff1f1 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -2512,7 +2512,8 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_engine *e,
> * Userptr creates a new SG mapping so
> * we must also rebind.
> */
> - op->remap.skip_prev = !xe_vma_is_userptr(old) &&
> + op->remap.skip_prev = !is_null &&
> + !xe_vma_is_userptr(old) &&
> IS_ALIGNED(xe_vma_end(vma),
> xe_vma_max_pte_size(old));
> if (op->remap.skip_prev) {
> @@ -2547,7 +2548,8 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_engine *e,
> * Userptr creates a new SG mapping so
> * we must also rebind.
> */
> - op->remap.skip_next = !xe_vma_is_userptr(old) &&
> + op->remap.skip_next = !is_null &&
> + !xe_vma_is_userptr(old) &&
> IS_ALIGNED(xe_vma_start(vma),
> xe_vma_max_pte_size(old));
> if (op->remap.skip_next)
> --
> 2.39.2
>
More information about the Intel-xe
mailing list