From: Nirmoy Das <nirmoy.das@intel.com>
To: "Zeng, Oak" <oak.zeng@intel.com>,
"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Cc: "Mrozek, Michal" <michal.mrozek@intel.com>
Subject: Re: [PATCH v6 5/5] drm/xe: Refactor default device atomic settings
Date: Fri, 3 May 2024 18:00:53 +0200 [thread overview]
Message-ID: <fb91cdda-f59e-4aa8-a9d4-bee6d8f30154@intel.com> (raw)
In-Reply-To: <SA1PR11MB6991BF7C2848F2FEE0D0F0CE921F2@SA1PR11MB6991.namprd11.prod.outlook.com>
Hi Oak,
On 5/3/2024 5:39 PM, Zeng, Oak wrote:
> Hi, Nirmoy,
>
>> -----Original Message-----
>> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of
>> Nirmoy Das
>> Sent: Tuesday, April 30, 2024 12:25 PM
>> To: intel-xe@lists.freedesktop.org
>> Cc: Das, Nirmoy <nirmoy.das@intel.com>; Mrozek, Michal
>> <michal.mrozek@intel.com>
>> Subject: [PATCH v6 5/5] drm/xe: Refactor default device atomic settings
>>
>> The default behavior of device atomics depends on the
>> VM type and buffer allocation types. Device atomics are
>> expected to function with all types of allocations for
>> traditional applications/APIs. Additionally, in compute/SVM
>> API scenarios with fault mode or LR mode VMs, device atomics
>> must work with single-region allocations. In all other cases
>> device atomics should be disabled by default also on platforms
>> where we know device atomics doesn't on work on particular
>> allocations types.
>>
>> v3: fault mode requires LR mode so only check for LR mode
>> to determine compute API(Jose).
>> Handle SMEM+LMEM BO's migration to LMEM where device
>> atomics is expected to work. (Brian).
>> v2: Fix platform checks to correct atomics behaviour on PVC.
>>
>> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
>> Acked-by: Michal Mrozek <michal.mrozek@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_pt.c | 37
>> ++++++++++++++++++++++++++++++++++---
>> drivers/gpu/drm/xe/xe_vm.c | 2 +-
>> 2 files changed, 35 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
>> index 8d3765d3351e..87975e45622a 100644
>> --- a/drivers/gpu/drm/xe/xe_pt.c
>> +++ b/drivers/gpu/drm/xe/xe_pt.c
>> @@ -619,9 +619,40 @@ xe_pt_stage_bind(struct xe_tile *tile, struct xe_vma
>> *vma,
>> struct xe_pt *pt = xe_vma_vm(vma)->pt_root[tile->id];
>> int ret;
>>
>> - if ((vma->gpuva.flags & XE_VMA_ATOMIC_PTE_BIT) &&
>> - (is_devmem || !IS_DGFX(xe)))
>> - xe_walk.default_pte |= XE_USM_PPGTT_PTE_AE;
> I think below logic can be moved to a separate function? I am also good if you leave it as below. But I think a separate function is better
I was thinking about but I think we should do that, once it gets more
complicated with madvise-like options.
>
>
>> + /**
>> + * Default atomic expectations for different allocation scenarios are
>> as follows:
>> + *
>> + * 1. Traditional API: When the VM is not in LR mode:
>> + * - Device atomics are expected to function with all allocations.
>> + *
>> + * 2. Compute/SVM API: When the VM is in LR mode:
>> + * - Device atomics are the default behavior when the bo is placed
>> in a single region.
>> + * - In all other cases device atomics will be disabled with AE=0 until
>> an application
>> + * request differently using a ioctl like madvise.
>> + */
>> + if (vma->gpuva.flags & XE_VMA_ATOMIC_PTE_BIT) {
>> + if (xe_vm_in_lr_mode(xe_vma_vm(vma))) {
>> + if (bo && xe_bo_has_single_placement(bo))
>> + xe_walk.default_pte |=
>> XE_USM_PPGTT_PTE_AE;
>> + /**
>> + * If a SMEM+LMEM allocation is backed by SMEM, a
>> device
>> + * atomics will cause a gpu page fault and which then
>> + * gets migrated to LMEM, bind such allocations with
>> + * device atomics enabled.
>> + */
>> + else if (is_devmem
>> && !xe_bo_has_single_placement(bo))
>
> Note bo could be NULL here...
is_devmem checks bo that so I left it out.
>
> So userptr and system allocator don't have a bo
>
> Userptr can't run into this case because userptr can't be is_devmem
>
> System allocator allocated memory can have devmem backing store... so seems the logic can be:
>
> (Is_devmem && ((bo && !single_placement) || !bo)
>
> But we don't have system allocator for now, so your logic should work for the current code.
Yes, default for userptr is AE=0 hence I left it so and planning to
change that when we have madvise-like ioctl.
> If you write as above, then it is future proofed. I am okay with your current writing also - I just need to change it a little when system allocator come into picture....
>
> I do feel the logic here is getting complicated, hard for understanding and maintenance. Let's follow up the other email thread to see whether we can simply default all allocation to be NO_ATOMIC, and depends on compiler and UMD to set atomics up.
I will keep track of that.
>
> As of now, Patch is:
>
> Reviewed-by: Oak Zeng <oak.zeng@intel.com>
Thanks a lot.
Nirmoy
>
>> + xe_walk.default_pte |=
>> XE_USM_PPGTT_PTE_AE;
>> + } else {
>> + xe_walk.default_pte |= XE_USM_PPGTT_PTE_AE;
>> + }
>> +
>> + /**
>> + * Unset AE if the platform(PVC) doesn't support it on an
>> + * allocation
>> + */
>> + if (!xe->info.has_device_atomics_on_smem && !is_devmem)
>> + xe_walk.default_pte &= ~XE_USM_PPGTT_PTE_AE;
>> + }
>>
>> if (is_devmem) {
>> xe_walk.default_pte |= XE_PPGTT_PTE_DM;
>> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
>> index f1357e2a3b10..d17192c8b7de 100644
>> --- a/drivers/gpu/drm/xe/xe_vm.c
>> +++ b/drivers/gpu/drm/xe/xe_vm.c
>> @@ -888,7 +888,7 @@ static struct xe_vma *xe_vma_create(struct xe_vm
>> *vm,
>> for_each_tile(tile, vm->xe, id)
>> vma->tile_mask |= 0x1 << id;
>>
>> - if (GRAPHICS_VER(vm->xe) >= 20 || vm->xe->info.platform ==
>> XE_PVC)
>> + if (vm->xe->info.has_atomic_enable_pte_bit)
>> vma->gpuva.flags |= XE_VMA_ATOMIC_PTE_BIT;
>>
>> vma->pat_index = pat_index;
>> --
>> 2.42.0
next prev parent reply other threads:[~2024-05-03 16:01 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-30 16:25 [PATCH v6 0/5] Refactor default device atomic settings Nirmoy Das
2024-04-30 16:25 ` [PATCH v6 1/5] drm/xe: Introduce has_atomic_enable_pte_bit device info Nirmoy Das
2024-04-30 16:25 ` [PATCH v6 2/5] drm/xe: Move vm bind bo validation to a helper function Nirmoy Das
2024-04-30 16:25 ` [PATCH v6 3/5] drm/xe: Introduce has_device_atomics_on_smem device info Nirmoy Das
2024-04-30 16:25 ` [PATCH v6 4/5] drm/xe: Add function to check if BO has single placement Nirmoy Das
2024-04-30 16:25 ` [PATCH v6 5/5] drm/xe: Refactor default device atomic settings Nirmoy Das
2024-05-03 15:39 ` Zeng, Oak
2024-05-03 16:00 ` Nirmoy Das [this message]
2024-05-03 16:11 ` Zeng, Oak
2024-05-03 16:30 ` Nirmoy Das
2024-04-30 18:47 ` ✓ CI.Patch_applied: success for Refactor default device atomic settings (rev6) Patchwork
2024-04-30 18:48 ` ✓ CI.checkpatch: " Patchwork
2024-04-30 18:49 ` ✓ CI.KUnit: " Patchwork
2024-04-30 19:00 ` ✓ CI.Build: " Patchwork
2024-04-30 19:03 ` ✓ CI.Hooks: " Patchwork
2024-04-30 19:04 ` ✓ CI.checksparse: " Patchwork
2024-04-30 19:28 ` ✓ CI.BAT: " Patchwork
2024-04-30 22:20 ` ✓ CI.FULL: " Patchwork
2024-05-03 9:47 ` [PATCH v6 0/5] Refactor default device atomic settings Lionel Landwerlin
2024-05-03 9:54 ` Nirmoy Das
2024-05-06 7:13 ` Lionel Landwerlin
2024-05-06 9:25 ` Lionel Landwerlin
2024-05-06 16:21 ` Nirmoy Das
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fb91cdda-f59e-4aa8-a9d4-bee6d8f30154@intel.com \
--to=nirmoy.das@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=michal.mrozek@intel.com \
--cc=oak.zeng@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox