From: Alex Deucher <alexander.deucher@amd.com>
To: <amd-gfx@lists.freedesktop.org>
Cc: "Mukul Joshi" <mukul.joshi@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"Alex Deucher" <alexander.deucher@amd.com>
Subject: [PATCH 26/95] drm/amdgpu: Rework VMID reservation logic
Date: Fri, 21 Aug 2026 15:33:49 -0400 [thread overview]
Message-ID: <20260821193458.808626-27-alexander.deucher@amd.com> (raw)
In-Reply-To: <20260821193458.808626-1-alexander.deucher@amd.com>
From: Mukul Joshi <mukul.joshi@amd.com>
Rework the VMID reservation logic by passing in the mask
of VMIDs (for both GFXHUB and MMHUB) available for it to
use. The VMID masks for both GFXHUB and MMHUB are initialized
in the respective ASIC specific files.
This also helps in reserving per-ASIC VMIDs. This is in
preparation for reserving a VMID for NPA added in the next
patch.
Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 33 ++++++++++++++-----------
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h | 27 +++++++++++++++++++-
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 4 +++
drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 5 ++++
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 14 +++++++----
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 6 +++++
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 6 +++++
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +++++
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 6 +++++
17 files changed, 95 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
index 8a2d64f0ebc3f..8c32c69437645 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
@@ -625,12 +625,27 @@ void amdgpu_vmid_reset_all(struct amdgpu_device *adev)
for (i = 0; i < AMDGPU_MAX_VMHUBS; ++i) {
struct amdgpu_vmid_mgr *id_mgr =
&adev->vm_manager.id_mgr[i];
-
- for (j = 1; j < id_mgr->num_ids; ++j)
+ for_each_set_bit(j, id_mgr->vmid_mask, AMDGPU_NUM_VMID)
amdgpu_vmid_reset(adev, i, j);
}
}
+void amdgpu_vmid_mgr_set_vmid_mask(struct amdgpu_device *adev,
+ unsigned long vmid_mask, bool for_mmhub)
+{
+ unsigned int i;
+
+ BUILD_BUG_ON(AMDGPU_NUM_VMID > BITS_PER_LONG);
+
+ for (i = 0; i < AMDGPU_MAX_VMHUBS; i++) {
+ bool is_mmhub = AMDGPU_IS_MMHUB0(i) || AMDGPU_IS_MMHUB1(i);
+
+ if (is_mmhub == for_mmhub)
+ bitmap_copy(adev->vm_manager.id_mgr[i].vmid_mask,
+ &vmid_mask, AMDGPU_NUM_VMID);
+ }
+}
+
/**
* amdgpu_vmid_mgr_init - init the VMID manager
*
@@ -649,19 +664,8 @@ void amdgpu_vmid_mgr_init(struct amdgpu_device *adev)
mutex_init(&id_mgr->lock);
INIT_LIST_HEAD(&id_mgr->ids_lru);
- /* for GC <10, SDMA uses MMHUB so use first_kfd_vmid for both GC and MM */
- if (amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(10, 0, 0))
- /* manage only VMIDs not used by KFD */
- id_mgr->num_ids = adev->vm_manager.first_kfd_vmid;
- else if (AMDGPU_IS_MMHUB0(i) ||
- AMDGPU_IS_MMHUB1(i))
- id_mgr->num_ids = 16;
- else
- /* manage only VMIDs not used by KFD */
- id_mgr->num_ids = adev->vm_manager.first_kfd_vmid;
-
/* skip over VMID 0, since it is the system VM */
- for (j = 1; j < id_mgr->num_ids; ++j) {
+ for_each_set_bit(j, id_mgr->vmid_mask, AMDGPU_NUM_VMID) {
amdgpu_vmid_reset(adev, i, j);
amdgpu_sync_create(&id_mgr->ids[j].active);
list_add_tail(&id_mgr->ids[j].list, &id_mgr->ids_lru);
@@ -685,6 +689,7 @@ void amdgpu_vmid_mgr_fini(struct amdgpu_device *adev)
&adev->vm_manager.id_mgr[i];
mutex_destroy(&id_mgr->lock);
+
for (j = 0; j < AMDGPU_NUM_VMID; ++j) {
struct amdgpu_vmid *id = &id_mgr->ids[j];
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
index 4b55d0d9703a3..46b2c21601263 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
@@ -26,6 +26,8 @@
#include <linux/types.h>
#include <linux/mutex.h>
#include <linux/list.h>
+#include <linux/bitops.h>
+#include <linux/find.h>
#include <linux/dma-fence.h>
#include "amdgpu_sync.h"
@@ -33,6 +35,27 @@
/* maximum number of VMIDs */
#define AMDGPU_NUM_VMID 16
+/**
+ * for_each_vmid_and_zero - iterate over VMID 0 plus every VMID set in a hub's
+ * vmid_mask
+ * @vmid: loop cursor (int / unsigned int)
+ * @adev: struct amdgpu_device *
+ * @hub: vmhub index into adev->vm_manager.id_mgr[]
+ *
+ * Equivalent to OR-ing BIT(0) into id_mgr[hub].vmid_mask and walking the
+ * result with for_each_set_bit(). Used by the gfx_v*_constants_init() paths
+ * which must always touch VMID 0 (system) in addition to the regular VMIDs
+ * owned by the hub.
+ *
+ * Relies on AMDGPU_NUM_VMID (16) fitting in a single unsigned long, i.e.
+ * vmid_mask[] being a 1-element bitmap.
+ */
+#define for_each_vmid_and_zero(vmid, adev, hub) \
+ for (unsigned long __vmid_mask = \
+ (adev)->vm_manager.id_mgr[(hub)].vmid_mask[0] | BIT(0); \
+ __vmid_mask; __vmid_mask = 0) \
+ for_each_set_bit((vmid), &__vmid_mask, AMDGPU_NUM_VMID)
+
struct amdgpu_device;
struct amdgpu_fpriv;
struct amdgpu_vm;
@@ -65,10 +88,10 @@ struct amdgpu_vmid {
struct amdgpu_vmid_mgr {
struct mutex lock;
- unsigned num_ids;
struct list_head ids_lru;
struct amdgpu_vmid ids[AMDGPU_NUM_VMID];
bool reserved_vmid;
+ DECLARE_BITMAP(vmid_mask, AMDGPU_NUM_VMID);
};
int amdgpu_pasid_alloc(unsigned int bits, struct amdgpu_fpriv *fpriv);
@@ -95,5 +118,7 @@ void amdgpu_vmid_reset_all(struct amdgpu_device *adev);
void amdgpu_vmid_mgr_init(struct amdgpu_device *adev);
void amdgpu_vmid_mgr_fini(struct amdgpu_device *adev);
+void amdgpu_vmid_mgr_set_vmid_mask(struct amdgpu_device *adev,
+ unsigned long vmid_mask, bool for_mmhub);
#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
index f9154421c2d5f..f91e693de60a6 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
@@ -5364,7 +5364,7 @@ static void gfx_v10_0_constants_init(struct amdgpu_device *adev)
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
nv_grbm_select(adev, 0, 0, 0, i);
/* CP and shaders */
WREG32_SOC15(GC, 0, mmSH_MEM_CONFIG, DEFAULT_SH_MEM_CONFIG);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
index a447562977abe..743fe1bd39e86 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -2213,7 +2213,7 @@ static void gfx_v11_0_constants_init(struct amdgpu_device *adev)
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
soc21_grbm_select(adev, 0, 0, 0, i);
/* CP and shaders */
WREG32_SOC15(GC, 0, regSH_MEM_CONFIG, DEFAULT_SH_MEM_CONFIG);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
index fdfee88e41e33..d65ff3e551189 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
@@ -1852,7 +1852,7 @@ static void gfx_v12_0_constants_init(struct amdgpu_device *adev)
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
soc24_grbm_select(adev, 0, 0, 0, i);
/* CP and shaders */
WREG32_SOC15(GC, 0, regSH_MEM_CONFIG, DEFAULT_SH_MEM_CONFIG);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c
index cc4e939cb3f37..aae5ab9c338c1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c
@@ -1725,7 +1725,7 @@ static void gfx_v12_1_xcc_constants_init(struct amdgpu_device *adev,
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
soc_v1_0_grbm_select(adev, 0, 0, 0, i, GET_INST(GC, xcc_id));
/* CP and shaders */
WREG32_SOC15(GC, GET_INST(GC, xcc_id),
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index a1e00be54005d..fa209fd6d4ac9 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -1938,7 +1938,7 @@ static void gfx_v7_0_constants_init(struct amdgpu_device *adev)
WREG32(mmSH_STATIC_MEM_CONFIG, sh_static_mem_cfg);
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[0].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, 0) {
if (i == 0)
sh_mem_base = 0;
else
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index f7c2b149acd0a..4c79e594cf8be 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -3758,7 +3758,7 @@ static void gfx_v8_0_constants_init(struct amdgpu_device *adev)
WREG32(mmSH_STATIC_MEM_CONFIG, sh_static_mem_cfg);
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[0].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, 0) {
vi_srbm_select(adev, 0, 0, 0, i);
/* CP and shaders */
if (i == 0) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index a4365e26120a5..c220a1cea7d73 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -2682,7 +2682,7 @@ static void gfx_v9_0_constants_init(struct amdgpu_device *adev)
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
soc15_grbm_select(adev, 0, 0, 0, i, 0);
/* CP and shaders */
if (i == 0) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
index 99732056c58f6..4a7e7e1500300 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
@@ -1237,7 +1237,7 @@ static void gfx_v9_4_3_xcc_constants_init(struct amdgpu_device *adev,
/* XXX SH_MEM regs */
/* where to put LDS, scratch, GPUVM in FSA64 space */
mutex_lock(&adev->srbm_mutex);
- for (i = 0; i < adev->vm_manager.id_mgr[AMDGPU_GFXHUB(0)].num_ids; i++) {
+ for_each_vmid_and_zero(i, adev, AMDGPU_GFXHUB(0)) {
soc15_grbm_select(adev, 0, 0, 0, i, GET_INST(GC, xcc_id));
/* CP and shaders */
if (i == 0) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
index 75a552782c979..9a8a7921ce982 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
@@ -869,6 +869,10 @@ static int gmc_v10_0_sw_init(struct amdgpu_ip_block *ip_block)
* amdkfd will use VMIDs 8-15
*/
adev->vm_manager.first_kfd_vmid = 8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev, GENMASK(AMDGPU_NUM_VMID - 1, 1), true);
amdgpu_vm_manager_init(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
index f454aff831b03..ed75da48ce963 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
@@ -852,6 +852,11 @@ static int gmc_v11_0_sw_init(struct amdgpu_ip_block *ip_block)
*/
adev->vm_manager.first_kfd_vmid = adev->gfx.disable_kq ? 1 : 8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev, GENMASK(AMDGPU_NUM_VMID - 1, 1), true);
+
amdgpu_vm_manager_init(adev);
r = amdgpu_gmc_ras_sw_init(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
index 3add79c474f3b..cc4eb05215ea1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
@@ -952,13 +952,17 @@ static int gmc_v12_0_sw_init(struct amdgpu_ip_block *ip_block)
* number of VMs
* VMID 0 is reserved for System
* amdgpu graphics/compute will use VMIDs 1-7
- * amdkfd will use VMIDs 8-15
+ * amdkfd will use VMIDs 8-15.
+ * On GFX 12.1, amdkfd will use VMIDs 3-15.
*/
adev->vm_manager.first_kfd_vmid =
- amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(12, 1, 0) ?
- 3 : 8;
- adev->vm_manager.first_kfd_vmid =
- adev->gfx.disable_kq ? 1 : (adev->vm_manager.first_kfd_vmid);
+ adev->gfx.disable_kq ? 1 :
+ (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(12, 1, 0) ?
+ 3 : 8);
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev, GENMASK(AMDGPU_NUM_VMID - 1, 1), true);
amdgpu_vm_manager_init(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index ca7afb9b7d0ae..cdd11587b12ae 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -864,6 +864,12 @@ static int gmc_v6_0_sw_init(struct amdgpu_ip_block *ip_block)
* amdkfd will use VMIDs 8-15
*/
adev->vm_manager.first_kfd_vmid = 8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ true);
amdgpu_vm_manager_init(adev);
/* base offset of vram pages */
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 1c1eccfe383fd..c9cc55e18893b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -1045,6 +1045,12 @@ static int gmc_v7_0_sw_init(struct amdgpu_ip_block *ip_block)
* amdkfd will use VMIDs 8-15
*/
adev->vm_manager.first_kfd_vmid = 8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ true);
amdgpu_vm_manager_init(adev);
/* base offset of vram pages */
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index bf089595e5dac..8d8a0775878ff 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1122,6 +1122,12 @@ static int gmc_v8_0_sw_init(struct amdgpu_ip_block *ip_block)
* amdkfd will use VMIDs 8-15
*/
adev->vm_manager.first_kfd_vmid = 8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ true);
amdgpu_vm_manager_init(adev);
/* base offset of vram pages */
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index b46b87291c512..633772fa71fda 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -2038,6 +2038,12 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
3 :
8;
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ false);
+ amdgpu_vmid_mgr_set_vmid_mask(adev,
+ GENMASK(adev->vm_manager.first_kfd_vmid - 1, 1),
+ true);
amdgpu_vm_manager_init(adev);
gmc_v9_0_save_registers(adev);
--
2.55.0
next prev parent reply other threads:[~2026-08-21 19:51 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 19:33 [PATCH 00/95] Add UALink instrastructure series 1 Alex Deucher
2026-08-21 19:33 ` [PATCH 01/95] drm/amdgpu: Add psp ualink command interfaces Alex Deucher
2026-08-21 19:33 ` [PATCH 02/95] drm/amdgpu: Fetch asp ualink interface version Alex Deucher
2026-08-21 19:33 ` [PATCH 03/95] drm/amdgpu: Add sysfs API for UALink information Alex Deucher
2026-08-21 19:33 ` [PATCH 04/95] drm/amdgpu: Add sysfs API for UALink physical pod setup Alex Deucher
2026-08-21 19:33 ` [PATCH 05/95] drm/amdgpu: Add sysfs API for UALink virtual pod config Alex Deucher
2026-08-21 19:33 ` [PATCH 06/95] drm/amdgpu: Add sysfs API for UALink station configuration Alex Deucher
2026-08-21 19:33 ` [PATCH 07/95] drm/amdgpu: Add UALink manager core infrastructure Alex Deucher
2026-08-21 19:33 ` [PATCH 08/95] drm/amdgpu: Implement PSP cmd UAL_GET_CONFIG Alex Deucher
2026-08-21 19:33 ` [PATCH 09/95] drm/amdgpu: Query initial UALink config from PSP Alex Deucher
2026-08-21 19:33 ` [PATCH 10/95] drm/amdgpu: Implement PSP cmd UAL_SET_PPOD_CONFIG Alex Deucher
2026-08-21 19:33 ` [PATCH 11/95] drm/amdgpu: Set physical pod configuration to PSP Alex Deucher
2026-08-21 19:33 ` [PATCH 12/95] drm/amdgpu: Implement PSP cmd UAL_SET_VPOD_CONFIG Alex Deucher
2026-08-21 19:33 ` [PATCH 13/95] drm/amdgpu: Set virtual pod configuration to PSP Alex Deucher
2026-08-21 19:33 ` [PATCH 14/95] drm/amdgpu: Implement PSP cmd UAL_SET_STATION_CONFIG Alex Deucher
2026-08-21 19:33 ` [PATCH 15/95] drm/amdgpu: Set UALink station config to PSP Alex Deucher
2026-08-21 19:33 ` [PATCH 16/95] drm/amdgpu: Implement PSP cmd UAL_SET_NPA_CONFIG Alex Deucher
2026-08-21 19:33 ` [PATCH 17/95] drm/amdgpu: Enable/disable NPA address translation using PSP Alex Deucher
2026-08-21 19:33 ` [PATCH 18/95] drm/amdgpu: Add helper function to check psp xgmi ta Alex Deucher
2026-08-21 19:33 ` [PATCH 19/95] drm/amdgpu: add handler for nHT error Alex Deucher
2026-08-21 19:33 ` [PATCH 20/95] drm/amdgpu: Add ual_config_state to ual_get_config Alex Deucher
2026-08-21 19:33 ` [PATCH 21/95] drm/amdgpu: extend PSP command polling sleep range Alex Deucher
2026-08-21 19:33 ` [PATCH 22/95] drm/amdgpu: Fix NULL pointer issue during ualink init Alex Deucher
2026-08-21 19:33 ` [PATCH 23/95] drm/amdgpu: Add a new NPA Address space Alex Deucher
2026-08-21 19:33 ` [PATCH 24/95] drm/amdgpu: Add address allocator for NPA addresses Alex Deucher
2026-08-21 19:33 ` [PATCH 25/95] drm/amdgpu: Initialize VM for NPA addr management Alex Deucher
2026-08-21 19:33 ` Alex Deucher [this message]
2026-08-21 19:33 ` [PATCH 27/95] drm/amdgpu: Reserve VMID for NPA VM Alex Deucher
2026-08-21 19:33 ` [PATCH 28/95] drm/amdgpu: Use reserved " Alex Deucher
2026-08-21 19:33 ` [PATCH 29/95] drm/amdgpu: Enable UALink Manager when pod becomes active Alex Deucher
2026-08-21 19:33 ` [PATCH 30/95] drm/amdgpu: Fix UALink vPod double-activation Alex Deucher
2026-08-21 19:33 ` [PATCH 31/95] drm/amdgpu: Add UALink remote state structures and API declarations Alex Deucher
2026-08-21 19:33 ` [PATCH 32/95] drm/amdgpu: Add UALink NPA address layout helpers Alex Deucher
2026-08-21 19:33 ` [PATCH 33/95] drm/amdgpu: Add UALink NPA address computation for ring buffers Alex Deucher
2026-08-21 19:33 ` [PATCH 34/95] drm/amdgpu: Add UALink NPA VM mapping " Alex Deucher
2026-08-21 19:33 ` [PATCH 35/95] drm/amdgpu: Add UALink SDMA scheduler entities Alex Deucher
2026-08-21 19:33 ` [PATCH 36/95] drm/amdgpu: Add UALink GART helpers for NPA address access Alex Deucher
2026-08-21 19:34 ` [PATCH 37/95] drm/amdgpu: Add UALink ring buffer allocation and firmware init Alex Deucher
2026-08-21 19:34 ` [PATCH 38/95] drm/amdgpu: Add UALink remote command packets and SDMA dispatch Alex Deucher
2026-08-21 19:34 ` [PATCH 39/95] drm/amdgpu: Add UALink firmware writeback address configuration Alex Deucher
2026-08-21 19:34 ` [PATCH 40/95] drm/amdgpu: Add UALink cross-GPU TLB shootdown and remote interrupt Alex Deucher
2026-08-21 19:34 ` [PATCH 41/95] drm/amdgpu: Add UALink software init, teardown, and reset Alex Deucher
2026-08-21 19:34 ` [PATCH 42/95] drm/amdgpu: Add UALink IH ring and enable interrupt Alex Deucher
2026-08-21 19:34 ` [PATCH 43/95] drm/amdgpu: UALink use LSDMA to send remote interrupt command Alex Deucher
2026-08-21 19:34 ` [PATCH 44/95] drm/amdgpu: Create a drm client for UALink NPA BOs Alex Deucher
2026-08-21 19:34 ` [PATCH 45/95] drm/amdgpu: Control NPA DMA-buf importing Alex Deucher
2026-08-21 19:34 ` [PATCH 46/95] drm/amdgpu: Add ualink handle to BOs Alex Deucher
2026-08-21 19:34 ` [PATCH 47/95] drm/amdgpu: Implement UALink handle export Alex Deucher
2026-08-21 19:34 ` [PATCH 48/95] drm/amdgpu: Add connection state management Alex Deucher
2026-08-21 19:34 ` [PATCH 49/95] drm/amdgpu: Implement UALink handle import ioctl Alex Deucher
2026-08-21 19:34 ` [PATCH 50/95] drm/amdgpu: Implement mechanism to revoke exported memory Alex Deucher
2026-08-21 19:34 ` [PATCH 51/95] drm/amdgpu: lock UALink import invalidation via drm_exec Alex Deucher
2026-08-21 19:34 ` [PATCH 52/95] drm/amdgpu: Cleanup exported UALink handles Alex Deucher
2026-08-21 19:34 ` [PATCH 53/95] drm/amdgpu: Cleanup imported " Alex Deucher
2026-08-21 19:34 ` [PATCH 54/95] drm/amdgpu: Handle connection reset Alex Deucher
2026-08-21 19:34 ` [PATCH 55/95] drm/amdgpu: Setup PTE mappings for NPA addresses Alex Deucher
2026-08-21 19:34 ` [PATCH 56/95] drm/amdgpu: Add handling for remote interrupts Alex Deucher
2026-08-21 19:34 ` [PATCH 57/95] drm/amdgpu: Send TLB shootdown on exported memory unmap Alex Deucher
2026-08-21 19:34 ` [PATCH 58/95] drm/amdgpu: Handle local GPUs in UALink import Alex Deucher
2026-08-21 19:34 ` [PATCH 59/95] drm/amdgpu: Add debugfs to drop UALink protocol messages Alex Deucher
2026-08-21 19:34 ` [PATCH 60/95] drm/amdgpu: Temporarily disable sending remote TLB shootdowns Alex Deucher
2026-08-21 19:34 ` [PATCH 61/95] drm/amdgpu: Temporarily Flush TLB on NPA mapping always Alex Deucher
2026-08-21 19:34 ` [PATCH 62/95] drm/amdgpu: log remote memory MTYPE for GC 12.1.0 Alex Deucher
2026-08-21 19:34 ` [PATCH 63/95] drm/amdgpu: Prevent double-free of drm_exec Alex Deucher
2026-08-21 19:34 ` [PATCH 64/95] drm/amdgpu: fix NPA-RELEASE race in UALink exporter cleanup Alex Deucher
2026-08-21 19:34 ` [PATCH 65/95] drm/amdgpu: initialize UALink importer node list head Alex Deucher
2026-08-21 19:34 ` [PATCH 66/95] drm/amdgpu: Fix initialization flags for UALink XAs Alex Deucher
2026-08-21 19:34 ` [PATCH 67/95] drm/amdgpu: fix dma_buf leak in UALink exporter cleanup Alex Deucher
2026-08-21 19:34 ` [PATCH 68/95] drm/amdgpu: Increase UALink soft ring size Alex Deucher
2026-08-21 19:34 ` [PATCH 69/95] drm/amdgpu: Fix uninitialized fence in UALink NPA unmap Alex Deucher
2026-08-21 19:34 ` [PATCH 70/95] drm/amdgpu: Use vm->last_update fence in UALink NPA unmap paths Alex Deucher
2026-08-21 19:34 ` [PATCH 71/95] drm/amdgpu: Pin page tables in NPA VMs Alex Deucher
2026-08-21 19:34 ` [PATCH 72/95] drm/amdgpu: Initialize NPA PT/PDs to noretry Alex Deucher
2026-08-21 19:34 ` [PATCH 73/95] drm/amdgpu: always use MTYPE_UC for remote memory on GFX 12.1 Alex Deucher
2026-08-21 19:34 ` [PATCH 74/95] drm/amdkfd: program compute MQD coherent_aql_mtype " Alex Deucher
2026-08-21 19:34 ` [PATCH 75/95] drm/amdgpu: Separate out ualink init sequences Alex Deucher
2026-08-21 19:34 ` [PATCH 76/95] drm/amdgpu: Add ualink as separate ip block Alex Deucher
2026-08-21 19:34 ` [PATCH 77/95] drm/admgpu: Seggregate ualink nht messaging Alex Deucher
2026-08-21 19:34 ` [PATCH 78/95] drm/amdgpu: Assign accel state based on ASP config Alex Deucher
2026-08-21 19:34 ` [PATCH 79/95] drm/amdgpu: Drop duplicate vpod check functions Alex Deucher
2026-08-21 19:34 ` [PATCH 80/95] drm/amdgpu: Add support to send ASP completion Alex Deucher
2026-08-21 19:34 ` [PATCH 81/95] drm/amdgpu: Add handlers for ualink notifications Alex Deucher
2026-08-21 19:34 ` [PATCH 82/95] drm/amdgpu: Improve ualink state transitions Alex Deucher
2026-08-21 19:34 ` [PATCH 83/95] drm/amdgpu: Use uniform logic for inband/sideband Alex Deucher
2026-08-21 19:34 ` [PATCH 84/95] drm/amdgpu: Fix GART and SDMA entity leak on vPod reconfiguration Alex Deucher
2026-08-21 19:34 ` [PATCH 85/95] drm/amdgpu: Add UALink diagnostic logging for vpod commit/activation Alex Deucher
2026-08-21 19:34 ` [PATCH 86/95] drm/amdgpu: Handle UALink vPod reconfiguration while ACTIVE Alex Deucher
2026-08-21 19:34 ` [PATCH 87/95] drm/amdgpu: Add name for ualink ip block Alex Deucher
2026-08-21 19:34 ` [PATCH 88/95] drm/amdgpu: Cleanup UALink XA entries on manager stop Alex Deucher
2026-08-21 19:34 ` [PATCH 89/95] drm/amdgpu: Move ualink ip version related changes Alex Deucher
2026-08-21 19:34 ` [PATCH 90/95] drm/amdgpu: Add hw_fini for ualink Alex Deucher
2026-08-21 19:34 ` [PATCH 91/95] drm/amdgpu: Expose ualink info under each xcp Alex Deucher
2026-08-21 19:34 ` [PATCH 92/95] drm/amdgpu: Handle concurrent UALINK handle import race Alex Deucher
2026-08-21 19:34 ` [PATCH 93/95] drm/amdgpu: create UALink NPA import BO directly in the NPA domain Alex Deucher
2026-08-21 19:34 ` [PATCH 94/95] drm/amdgpu: add mtype_remote module parameter Alex Deucher
2026-08-21 19:34 ` [PATCH 95/95] drm/amdgpu: Honor mtype overrides for NPA remote memory Alex Deucher
2026-08-25 14:45 ` [PATCH 00/95] Add UALink instrastructure series 1 Philip Yang
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=20260821193458.808626-27-alexander.deucher@amd.com \
--to=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=mukul.joshi@amd.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.