[Intel-xe] [PATCH v2 04/10] drm/xe: Remove vma arg from xe_pte_encode()
Matt Roper
matthew.d.roper at intel.com
Wed Jul 26 17:30:46 UTC 2023
On Wed, Jul 26, 2023 at 09:07:02AM -0700, Lucas De Marchi wrote:
> All the callers pass a NULL vma, so the buffer is always the BO. Remove
> the argument and the side effects of dealing with it.
You're right that it's only ever called with a NULL vma, but the vma
parameter was added for userptr support (null bo, vma only) in
commit b01fd49ada0fa88c88aaa86529461c2feae09eed
Author: Matthew Brost <matthew.brost at intel.com>
AuthorDate: Mon Apr 4 11:18:22 2022 -0700
Commit: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
CommitDate: Thu Oct 20 14:21:59 2022 +0200
drm/xe: Update VM PTE write code to accept a VMA argument
This will help to implement userptr within the VMA.
Signed-off-by: Matthew Brost <matthew.brost at intel.com>
Did something change with how userptr is handled somewhere along the
line? Is userptr working today?
Matt
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
> drivers/gpu/drm/xe/tests/xe_migrate.c | 2 +-
> drivers/gpu/drm/xe/xe_migrate.c | 8 ++---
> drivers/gpu/drm/xe/xe_pt.c | 47 ++++-----------------------
> drivers/gpu/drm/xe/xe_pt.h | 4 +--
> 4 files changed, 13 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
> index c332dc54cb70..9e9b228fe315 100644
> --- a/drivers/gpu/drm/xe/tests/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
> @@ -301,7 +301,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
> /* First part of the test, are we updating our pagetable bo with a new entry? */
> xe_map_wr(xe, &bo->vmap, XE_PAGE_SIZE * (NUM_KERNEL_PDE - 1), u64,
> 0xdeaddeadbeefbeef);
> - expected = xe_pte_encode(NULL, pt, 0, XE_CACHE_WB, 0);
> + expected = xe_pte_encode(pt, 0, XE_CACHE_WB, 0);
> if (m->eng->vm->flags & XE_VM_FLAG_64K)
> expected |= XE_PTE_PS64;
> if (xe_bo_is_vram(pt))
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index bc7dac4e2086..3c7d5cfd30bc 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -196,8 +196,7 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
>
> /* Map the entire BO in our level 0 pt */
> for (i = 0, level = 0; i < num_entries; level++) {
> - entry = xe_pte_encode(NULL, bo, i * XE_PAGE_SIZE,
> - XE_CACHE_WB, 0);
> + entry = xe_pte_encode(bo, i * XE_PAGE_SIZE, XE_CACHE_WB, 0);
>
> xe_map_wr(xe, &bo->vmap, map_ofs + level * 8, u64, entry);
>
> @@ -215,8 +214,7 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
> for (i = 0; i < batch->size;
> i += vm->flags & XE_VM_FLAG_64K ? XE_64K_PAGE_SIZE :
> XE_PAGE_SIZE) {
> - entry = xe_pte_encode(NULL, batch, i,
> - XE_CACHE_WB, 0);
> + entry = xe_pte_encode(batch, i, XE_CACHE_WB, 0);
>
> xe_map_wr(xe, &bo->vmap, map_ofs + level * 8, u64,
> entry);
> @@ -1235,7 +1233,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
>
> BUG_ON(pt_bo->size != SZ_4K);
>
> - addr = xe_pte_encode(NULL, pt_bo, 0, XE_CACHE_WB, 0);
> + addr = xe_pte_encode(pt_bo, 0, XE_CACHE_WB, 0);
> bb->cs[bb->len++] = lower_32_bits(addr);
> bb->cs[bb->len++] = upper_32_bits(addr);
> }
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index d5a237b7c883..ac01bc42e54f 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -78,30 +78,6 @@ u64 xe_pde_encode(struct xe_bo *bo, u64 bo_offset,
> return pde;
> }
>
> -static dma_addr_t vma_addr(struct xe_vma *vma, u64 offset,
> - size_t page_size, bool *is_vram)
> -{
> - if (xe_vma_is_null(vma)) {
> - *is_vram = 0;
> - return 0;
> - }
> -
> - if (xe_vma_is_userptr(vma)) {
> - struct xe_res_cursor cur;
> - u64 page;
> -
> - *is_vram = false;
> - page = offset >> PAGE_SHIFT;
> - offset &= (PAGE_SIZE - 1);
> -
> - xe_res_first_sg(vma->userptr.sg, page << PAGE_SHIFT, page_size,
> - &cur);
> - return xe_res_dma(&cur) + offset;
> - } else {
> - return xe_bo_addr(xe_vma_bo(vma), offset, page_size, is_vram);
> - }
> -}
> -
> static u64 __pte_encode(u64 pte, enum xe_cache_level cache,
> struct xe_vma *vma, u32 pt_level)
> {
> @@ -140,34 +116,25 @@ static u64 __pte_encode(u64 pte, enum xe_cache_level cache,
>
> /**
> * xe_pte_encode() - Encode a page-table entry pointing to memory.
> - * @vma: The vma representing the memory to point to.
> - * @bo: If @vma is NULL, representing the memory to point to.
> - * @offset: The offset into @vma or @bo.
> + * @bo: The BO representing the memory to point to.
> + * @offset: The offset into @bo.
> * @cache: The cache level indicating
> * @pt_level: The page-table level of the page-table into which the entry
> * is to be inserted.
> *
> * Return: An encoded page-table entry. No errors.
> */
> -u64 xe_pte_encode(struct xe_vma *vma, struct xe_bo *bo,
> - u64 offset, enum xe_cache_level cache,
> +u64 xe_pte_encode(struct xe_bo *bo, u64 offset, enum xe_cache_level cache,
> u32 pt_level)
> {
> u64 pte;
> bool is_vram;
>
> - if (vma)
> - pte = vma_addr(vma, offset, XE_PAGE_SIZE, &is_vram);
> - else
> - pte = xe_bo_addr(bo, offset, XE_PAGE_SIZE, &is_vram);
> -
> - if (is_vram) {
> + pte = xe_bo_addr(bo, offset, XE_PAGE_SIZE, &is_vram);
> + if (is_vram)
> pte |= XE_PPGTT_PTE_LM;
> - if (vma && vma->gpuva.flags & XE_VMA_ATOMIC_PTE_BIT)
> - pte |= XE_USM_PPGTT_PTE_AE;
> - }
>
> - return __pte_encode(pte, cache, vma, pt_level);
> + return __pte_encode(pte, cache, NULL, pt_level);
> }
>
> static u64 __xe_pt_empty_pte(struct xe_tile *tile, struct xe_vm *vm,
> @@ -179,7 +146,7 @@ static u64 __xe_pt_empty_pte(struct xe_tile *tile, struct xe_vm *vm,
> return 0;
>
> if (level == 0) {
> - u64 empty = xe_pte_encode(NULL, vm->scratch_bo[id], 0,
> + u64 empty = xe_pte_encode(vm->scratch_bo[id], 0,
> XE_CACHE_WB, 0);
>
> return empty;
> diff --git a/drivers/gpu/drm/xe/xe_pt.h b/drivers/gpu/drm/xe/xe_pt.h
> index aaf4b7b851e2..bbb00d6461ff 100644
> --- a/drivers/gpu/drm/xe/xe_pt.h
> +++ b/drivers/gpu/drm/xe/xe_pt.h
> @@ -48,7 +48,7 @@ bool xe_pt_zap_ptes(struct xe_tile *tile, struct xe_vma *vma);
> u64 xe_pde_encode(struct xe_bo *bo, u64 bo_offset,
> const enum xe_cache_level level);
>
> -u64 xe_pte_encode(struct xe_vma *vma, struct xe_bo *bo,
> - u64 offset, enum xe_cache_level cache,
> +u64 xe_pte_encode(struct xe_bo *bo, u64 offset, enum xe_cache_level cache,
> u32 pt_level);
> +
> #endif
> --
> 2.40.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list