From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: intel-xe@lists.freedesktop.org
Cc: Matthew Auld <matthew.auld@intel.com>
Subject: [Intel-xe] [PATCH v2 4/4] drm/xe/vm: Fix ASID XA usage
Date: Thu, 23 Nov 2023 16:31:58 +0100 [thread overview]
Message-ID: <20231123153158.12779-5-thomas.hellstrom@linux.intel.com> (raw)
In-Reply-To: <20231123153158.12779-1-thomas.hellstrom@linux.intel.com>
xa_alloc_cyclic() returns 1 on successful allocation, if wrapping occurs,
but the code incorrectly treats that as an error. Fix that.
Also, xa_alloc_cyclic() requires xa_init_flags(..., XA_FLAGS_ALLOC), so
fix that, and assuming we don't want a zero ASID, instead of using
XA_FLAGS_ALLOC1, adjust the xa limits at alloc_cyclic time.
v2:
- On CONFIG_DRM_XE_DEBUG, Initialize the cyclic ASID allocation in such a
way that the next allocated ASID will be the maximum one, and the one
following will cause an ASID wrap, (all to have CI test high ASIDs
and ASID wraps).
Suggested-by: Ohad Sharabi <osharabi@habana.ai>
Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/946
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 15 ++++++++++++++-
drivers/gpu/drm/xe/xe_vm.c | 5 +++--
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 8be765adf702..9e5260422f6d 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -230,7 +230,20 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
init_waitqueue_head(&xe->ufence_wq);
drmm_mutex_init(&xe->drm, &xe->usm.lock);
- xa_init_flags(&xe->usm.asid_to_vm, XA_FLAGS_ALLOC1);
+ xa_init_flags(&xe->usm.asid_to_vm, XA_FLAGS_ALLOC);
+
+ if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
+ /* Trigger a large asid and an early asid wrap. */
+ u32 asid;
+
+ BUILD_BUG_ON(XE_MAX_ASID < 2);
+ err = xa_alloc_cyclic(&xe->usm.asid_to_vm, &asid, NULL,
+ XA_LIMIT(XE_MAX_ASID - 2, XE_MAX_ASID - 1),
+ &xe->usm.next_asid, GFP_KERNEL);
+ drm_WARN_ON(&xe->drm, err < 0);
+ if (err >= 0)
+ xa_erase(&xe->usm.asid_to_vm, asid);
+ }
drmm_mutex_init(&xe->drm, &xe->persistent_engines.lock);
INIT_LIST_HEAD(&xe->persistent_engines.list);
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index b39c6f43f01f..85b9d6f864ec 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1994,13 +1994,14 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
if (xe->info.has_asid) {
mutex_lock(&xe->usm.lock);
err = xa_alloc_cyclic(&xe->usm.asid_to_vm, &asid, vm,
- XA_LIMIT(0, XE_MAX_ASID - 1),
+ XA_LIMIT(1, XE_MAX_ASID - 1),
&xe->usm.next_asid, GFP_KERNEL);
mutex_unlock(&xe->usm.lock);
- if (err) {
+ if (err < 0) {
xe_vm_close_and_put(vm);
return err;
}
+ err = 0;
vm->usm.asid = asid;
}
--
2.41.0
next prev parent reply other threads:[~2023-11-23 15:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-23 15:31 [Intel-xe] [PATCH v2 0/4] drm/xe: Assorted memory-management fixes Thomas Hellström
2023-11-23 15:31 ` [Intel-xe] [PATCH v2 1/4] drm/xe: Ensure that we don't access the placements array out-of-bounds Thomas Hellström
2023-11-23 15:34 ` Matthew Auld
2023-11-23 15:31 ` [Intel-xe] [PATCH v2 2/4] drm/xe/bo: Rename xe_bo_get_sg() to xe_bo_sg() Thomas Hellström
2023-11-23 15:31 ` [Intel-xe] [PATCH v2 3/4] drm/xe/bo: Remove leftover trace_printk() Thomas Hellström
2023-11-23 15:31 ` Thomas Hellström [this message]
2023-11-23 16:01 ` [Intel-xe] [PATCH v2 4/4] drm/xe/vm: Fix ASID XA usage Matthew Auld
2023-11-24 9:04 ` [Intel-xe] ✓ CI.Patch_applied: success for drm/xe: Assorted memory-management fixes (rev2) Patchwork
2023-11-24 9:04 ` [Intel-xe] ✓ CI.checkpatch: " Patchwork
2023-11-24 9:06 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-11-24 9:13 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-11-24 9:13 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
2023-11-24 9:14 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
2023-11-24 9:48 ` [Intel-xe] ✓ CI.BAT: " Patchwork
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=20231123153158.12779-5-thomas.hellstrom@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.auld@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.