[PATCH] tests/amdgpu: find PCI bus, device and function and use it
vitaly.prosyak at amd.com
vitaly.prosyak at amd.com
Thu Jan 23 01:25:25 UTC 2025
From: Vitaly Prosyak <vitaly.prosyak at amd.com>
Use the PCI domain, bus, device, and function ID to determine the
required path from the file descriptor. This is utilized to check
whether the GPU reset mask is enabled for GFX, compute, or SDMA rings.
Cc: Christian Koenig <christian.koenig at amd.com>
Cc: Alexander Deucher <alexander.deucher at amd.com>
Cc: Jesse Zhang <jesse.zhang at amd.com>
v2: Suggested to add igt_info log about ring enablement (Jesse)
Signed-off-by: Vitaly Prosyak <vitaly.prosyak at amd.com>
Reviewed-by: Jesse Zhang <jesse.zhang at amd.com>
---
lib/amdgpu/amd_deadlock_helpers.c | 2 ++
lib/amdgpu/amd_dispatch.c | 29 ++++++++++------
lib/amdgpu/amd_dispatch.h | 5 +--
lib/amdgpu/amd_ip_blocks.c | 9 +++--
lib/amdgpu/amd_ip_blocks.h | 2 +-
tests/amdgpu/amd_deadlock.c | 18 +++++-----
tests/amdgpu/amd_dispatch.c | 58 ++++++++++++++++++-------------
tests/amdgpu/amd_pci_unplug.c | 1 -
tests/amdgpu/amd_queue_reset.c | 6 +++-
9 files changed, 79 insertions(+), 51 deletions(-)
diff --git a/lib/amdgpu/amd_deadlock_helpers.c b/lib/amdgpu/amd_deadlock_helpers.c
index f274a6365..d7bf0e111 100644
--- a/lib/amdgpu/amd_deadlock_helpers.c
+++ b/lib/amdgpu/amd_deadlock_helpers.c
@@ -241,6 +241,7 @@ void amdgpu_wait_memory_helper(amdgpu_device_handle device_handle, unsigned int
if (sched_mask > 1) {
snprintf(cmd, sizeof(cmd) - 1, "sudo echo 0x%x > %s",
0x1 << ring_id, sysfs);
+ igt_info("Disable other rings, keep only ring: %d enabled, cmd: %s\n", ring_id, cmd);
r = system(cmd);
igt_assert_eq(r, 0);
}
@@ -472,6 +473,7 @@ void bad_access_ring_helper(amdgpu_device_handle device_handle, unsigned int cmd
if (sched_mask > 1) {
snprintf(cmd, sizeof(cmd) - 1, "sudo echo 0x%x > %s",
0x1 << ring_id, sysfs);
+ igt_info("Disable other rings, keep only ring: %d enabled, cmd: %s\n", ring_id, cmd);
r = system(cmd);
igt_assert_eq(r, 0);
}
diff --git a/lib/amdgpu/amd_dispatch.c b/lib/amdgpu/amd_dispatch.c
index 75fc326da..3153d88a0 100644
--- a/lib/amdgpu/amd_dispatch.c
+++ b/lib/amdgpu/amd_dispatch.c
@@ -549,7 +549,7 @@ amdgpu_memcpy_dispatch_hang_slow_test(amdgpu_device_handle device_handle,
void
amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle,
- uint32_t ip_type)
+ uint32_t ip_type, const struct pci_addr *pci)
{
int r;
FILE *fp;
@@ -572,11 +572,14 @@ amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle,
}
if (ip_type == AMD_IP_GFX)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_gfx_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_gfx_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
else if (ip_type == AMD_IP_COMPUTE)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_compute_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_compute_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
else if (ip_type == AMD_IP_DMA)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_sdma_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_sdma_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
snprintf(cmd, sizeof(cmd) - 1, "sudo cat %s", sysfs);
r = access(sysfs, R_OK);
@@ -618,12 +621,14 @@ amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle,
if (sched_mask > 1) {
snprintf(cmd, sizeof(cmd) - 1, "sudo echo 0x%x > %s",
0x1 << ring_id, sysfs);
+ igt_info("Disable other rings, keep only ring: %d enabled, cmd: %s\n", ring_id, cmd);
r = system(cmd);
igt_assert_eq(r, 0);
}
amdgpu_memcpy_dispatch_test(device_handle, NULL, ip_type,
- ring_id, prio, version, BACKEND_SE_GC_SHADER_EXEC_SUCCESS, NULL);
+ ring_id, prio, version,
+ BACKEND_SE_GC_SHADER_EXEC_SUCCESS, NULL);
amdgpu_memcpy_dispatch_hang_slow_test(device_handle, ip_type,
prio, version, AMDGPU_CTX_UNKNOWN_RESET);
@@ -639,7 +644,8 @@ amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle,
}
}
-void amdgpu_gfx_dispatch_test(amdgpu_device_handle device_handle, uint32_t ip_type, enum cmd_error_type hang)
+void amdgpu_gfx_dispatch_test(amdgpu_device_handle device_handle, uint32_t ip_type,
+ enum cmd_error_type hang, const struct pci_addr *pci)
{
int r;
FILE *fp;
@@ -664,11 +670,14 @@ void amdgpu_gfx_dispatch_test(amdgpu_device_handle device_handle, uint32_t ip_ty
version = 9;
if (ip_type == AMD_IP_GFX)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_gfx_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_gfx_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
else if (ip_type == AMD_IP_COMPUTE)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_compute_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_compute_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
else if (ip_type == AMD_IP_DMA)
- snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/0/amdgpu_sdma_sched_mask");
+ snprintf(sysfs, sizeof(sysfs) - 1, "/sys/kernel/debug/dri/%04x:%02x:%02x.%01x/amdgpu_sdma_sched_mask",
+ pci->domain, pci->bus, pci->device, pci->function);
snprintf(cmd, sizeof(cmd) - 1, "sudo cat %s", sysfs);
r = access(sysfs, R_OK);
@@ -710,7 +719,7 @@ void amdgpu_gfx_dispatch_test(amdgpu_device_handle device_handle, uint32_t ip_ty
if (sched_mask > 1) {
snprintf(cmd, sizeof(cmd) - 1, "sudo echo 0x%x > %s",
0x1 << ring_id, sysfs);
- igt_info("cmd: %s\n", cmd);
+ igt_info("Disable other rings, keep only ring: %d enabled, cmd: %s\n", ring_id, cmd);
r = system(cmd);
igt_assert_eq(r, 0);
}
diff --git a/lib/amdgpu/amd_dispatch.h b/lib/amdgpu/amd_dispatch.h
index 8dbc4595b..166c6d7a8 100644
--- a/lib/amdgpu/amd_dispatch.h
+++ b/lib/amdgpu/amd_dispatch.h
@@ -28,7 +28,8 @@
#include "amd_dispatch_helpers.h"
void amdgpu_gfx_dispatch_test(amdgpu_device_handle device_handle,
- uint32_t ip_type, enum cmd_error_type hang);
+ uint32_t ip_type, enum cmd_error_type hang,
+ const struct pci_addr *pci);
int amdgpu_memcpy_dispatch_test(amdgpu_device_handle device_handle,
amdgpu_context_handle context_handle,
@@ -40,7 +41,7 @@ int amdgpu_memcpy_dispatch_test(amdgpu_device_handle device_handle,
struct amdgpu_cs_err_codes *err_codes);
void amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle,
- uint32_t ip_type);
+ uint32_t ip_type, const struct pci_addr *pci);
#endif
diff --git a/lib/amdgpu/amd_ip_blocks.c b/lib/amdgpu/amd_ip_blocks.c
index 9749e2072..2b1b84414 100644
--- a/lib/amdgpu/amd_ip_blocks.c
+++ b/lib/amdgpu/amd_ip_blocks.c
@@ -1004,7 +1004,7 @@ asic_rings_readness(amdgpu_device_handle device_handle, uint32_t mask,
*/
bool
-is_reset_enable(enum amd_ip_block_type ip_type, uint32_t reset_type)
+is_reset_enable(enum amd_ip_block_type ip_type, uint32_t reset_type, const struct pci_addr *pci)
{
char cmd[256];
FILE *fp, *fp2;
@@ -1019,7 +1019,12 @@ is_reset_enable(enum amd_ip_block_type ip_type, uint32_t reset_type)
else
snprintf(reset_mask, sizeof(reset_mask) - 1, "sdma_reset_mask");
- snprintf(cmd, sizeof(cmd) - 1, "sudo cat /sys/kernel/debug/dri/0/name |grep -oP '(?<=dev=)[0-9:.]+'");
+ if( pci)
+ snprintf(cmd, sizeof(cmd) - 1, "sudo cat /sys/kernel/debug/dri/%04x:%02x:%02x.%01x/name |grep -oP '(?<=dev=)[0-9:.]+'",
+ pci->domain, pci->bus, pci->device, pci->function);
+ else
+ snprintf(cmd, sizeof(cmd) - 1, "sudo cat /sys/kernel/debug/dri/0/name |grep -oP '(?<=dev=)[0-9:.]+'");
+
fp = popen(cmd, "r");
if (fp == NULL)
return false;
diff --git a/lib/amdgpu/amd_ip_blocks.h b/lib/amdgpu/amd_ip_blocks.h
index dc4d87151..595b2b16b 100644
--- a/lib/amdgpu/amd_ip_blocks.h
+++ b/lib/amdgpu/amd_ip_blocks.h
@@ -233,7 +233,7 @@ void
asic_rings_readness(amdgpu_device_handle device_handle, uint32_t mask, bool arr[AMD_IP_MAX]);
bool
-is_reset_enable(enum amd_ip_block_type ip_type, uint32_t reset_type);
+is_reset_enable(enum amd_ip_block_type ip_type, uint32_t reset_type, const struct pci_addr *pci);
int
get_pci_addr_from_fd(int fd, struct pci_addr *pci);
diff --git a/tests/amdgpu/amd_deadlock.c b/tests/amdgpu/amd_deadlock.c
index 29b7ae509..472f28e68 100644
--- a/tests/amdgpu/amd_deadlock.c
+++ b/tests/amdgpu/amd_deadlock.c
@@ -76,7 +76,7 @@ igt_main
igt_describe("Test-GPU-reset-by-access-gfx-illegal-reg");
igt_subtest_with_dynamic("amdgpu-gfx-illegal-reg-access") {
if (arr_cap[AMD_IP_GFX] &&
- is_reset_enable(AMD_IP_GFX, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_GFX, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-illegal-reg-access")
bad_access_ring_helper(device, CMD_STREAM_TRANS_BAD_REG_ADDRESS,
AMDGPU_HW_IP_GFX, &pci);
@@ -86,7 +86,7 @@ igt_main
igt_describe("Test-GPU-reset-by-access-gfx-illegal-mem-addr");
igt_subtest_with_dynamic("amdgpu-gfx-illegal-mem-access") {
if (arr_cap[AMD_IP_GFX] &&
- is_reset_enable(AMD_IP_GFX, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_GFX, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-illegal-mem-access")
bad_access_ring_helper(device, CMD_STREAM_TRANS_BAD_MEM_ADDRESS,
AMDGPU_HW_IP_GFX, &pci);
@@ -105,7 +105,7 @@ igt_main
igt_describe("Test-GPU-reset-by-access-compute-illegal-mem-addr");
igt_subtest("amdgpu-compute-illegal-mem-access") {
if (arr_cap[AMD_IP_COMPUTE] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
bad_access_ring_helper(device, CMD_STREAM_TRANS_BAD_MEM_ADDRESS,
AMDGPU_HW_IP_COMPUTE, &pci);
}
@@ -122,7 +122,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-corrupted-header-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-corrupted-header-test") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-corrupted-header-test")
amdgpu_hang_sdma_ring_helper(device, DMA_CORRUPTED_HEADER_HANG, &pci);
}
@@ -131,7 +131,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-slow-linear-copy-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-slow-linear-copy") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-slow-linear-copy")
amdgpu_hang_sdma_ring_helper(device, DMA_SLOW_LINEARCOPY_HANG, &pci);
}
@@ -140,7 +140,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-badop-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-badop-test") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-badop-test")
bad_access_ring_helper(device, CMD_STREAM_EXEC_INVALID_OPCODE,
AMDGPU_HW_IP_DMA, &pci);
@@ -150,7 +150,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-bad-mem-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-bad-mem-test") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-bad-mem-test")
bad_access_ring_helper(device, CMD_STREAM_TRANS_BAD_MEM_ADDRESS,
AMDGPU_HW_IP_DMA, &pci);
@@ -160,7 +160,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-bad-reg-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-bad-reg-test") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-bad-reg-test")
bad_access_ring_helper(device, CMD_STREAM_TRANS_BAD_REG_ADDRESS,
AMDGPU_HW_IP_DMA, &pci);
@@ -170,7 +170,7 @@ igt_main
igt_describe("Test-GPU-reset-by-sdma-bad-length-with-jobs");
igt_subtest_with_dynamic("amdgpu-deadlock-sdma-bad-length-test") {
if (arr_cap[AMD_IP_DMA] &&
- is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_DMA, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-deadlock-sdma-bad-length-test")
bad_access_ring_helper(device, CMD_STREAM_EXEC_INVALID_PACKET_LENGTH,
AMDGPU_HW_IP_DMA, &pci);
diff --git a/tests/amdgpu/amd_dispatch.c b/tests/amdgpu/amd_dispatch.c
index 23d07561c..ceedbccd9 100644
--- a/tests/amdgpu/amd_dispatch.c
+++ b/tests/amdgpu/amd_dispatch.c
@@ -14,31 +14,36 @@
#include "lib/amdgpu/amd_dispatch.h"
static void
-amdgpu_dispatch_hang_slow_gfx(amdgpu_device_handle device_handle)
+amdgpu_dispatch_hang_slow_gfx(amdgpu_device_handle device_handle,
+ const struct pci_addr *pci)
{
- amdgpu_dispatch_hang_slow_helper(device_handle, AMDGPU_HW_IP_GFX);
+ amdgpu_dispatch_hang_slow_helper(device_handle, AMDGPU_HW_IP_GFX, pci);
}
static void
-amdgpu_dispatch_hang_slow_compute(amdgpu_device_handle device_handle)
+amdgpu_dispatch_hang_slow_compute(amdgpu_device_handle device_handle,
+ const struct pci_addr *pci)
{
- amdgpu_dispatch_hang_slow_helper(device_handle, AMDGPU_HW_IP_COMPUTE);
+ amdgpu_dispatch_hang_slow_helper(device_handle, AMDGPU_HW_IP_COMPUTE, pci);
}
static void
-amdgpu_dispatch_hang_gfx(amdgpu_device_handle device_handle, enum cmd_error_type error)
+amdgpu_dispatch_hang_gfx(amdgpu_device_handle device_handle,
+ enum cmd_error_type error, const struct pci_addr *pci)
{
- amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_GFX, error);
+ amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_GFX, error, pci);
}
static void
-amdgpu_dispatch_hang_compute(amdgpu_device_handle device_handle, enum cmd_error_type error)
+amdgpu_dispatch_hang_compute(amdgpu_device_handle device_handle,
+ enum cmd_error_type error, const struct pci_addr *pci)
{
- amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_COMPUTE, error);
+ amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_COMPUTE, error, pci);
}
static void
-amdgpu_gpu_reset_test(amdgpu_device_handle device_handle, int drm_amdgpu)
+amdgpu_gpu_reset_test(amdgpu_device_handle device_handle, int drm_amdgpu,
+ const struct pci_addr *pci)
{
amdgpu_context_handle context_handle;
char debugfs_path[256], tmp[10];
@@ -67,8 +72,8 @@ amdgpu_gpu_reset_test(amdgpu_device_handle device_handle, int drm_amdgpu)
r = amdgpu_cs_ctx_free(context_handle);
igt_assert_eq(r, 0);
- amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_GFX, 0);
- amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_COMPUTE, 0);
+ amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_GFX, 0, pci);
+ amdgpu_gfx_dispatch_test(device_handle, AMDGPU_HW_IP_COMPUTE, 0, pci);
}
igt_main
@@ -78,6 +83,7 @@ igt_main
int fd = -1;
int r;
bool arr_cap[AMD_IP_MAX] = {0};
+ struct pci_addr pci;
igt_fixture {
uint32_t major, minor;
@@ -90,7 +96,9 @@ igt_main
igt_info("Initialized amdgpu, driver version %d.%d\n",
major, minor);
-
+ igt_skip_on(get_pci_addr_from_fd(fd, &pci));
+ igt_info("PCI Address: domain %04x, bus %02x, device %02x, function %02x\n",
+ pci.domain, pci.bus, pci.device, pci.function);
r = amdgpu_query_gpu_info(device, &gpu_info);
igt_assert_eq(r, 0);
r = setup_amdgpu_ip_blocks(major, minor, &gpu_info, device);
@@ -102,7 +110,7 @@ igt_main
igt_subtest_with_dynamic("amdgpu-dispatch-test-compute-with-IP-COMPUTE") {
if (arr_cap[AMD_IP_COMPUTE]) {
igt_dynamic_f("amdgpu-dispatch-test-compute")
- amdgpu_dispatch_hang_slow_compute(device);
+ amdgpu_dispatch_hang_slow_compute(device, &pci);
}
}
@@ -110,52 +118,52 @@ igt_main
igt_subtest_with_dynamic("amdgpu-dispatch-test-gfx-with-IP-GFX") {
if (arr_cap[AMD_IP_GFX]) {
igt_dynamic_f("amdgpu-dispatch-test-gfx")
- amdgpu_dispatch_hang_slow_gfx(device);
+ amdgpu_dispatch_hang_slow_gfx(device, &pci);
}
}
igt_describe("Test GPU reset using a binary shader to hang the job on gfx ring");
igt_subtest_with_dynamic("amdgpu-dispatch-hang-test-gfx-with-IP-GFX") {
if (arr_cap[AMD_IP_GFX] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-dispatch-hang-test-gfx")
- amdgpu_dispatch_hang_gfx(device, BACKEND_SE_GC_SHADER_INVALID_SHADER);
+ amdgpu_dispatch_hang_gfx(device, BACKEND_SE_GC_SHADER_INVALID_SHADER, &pci);
}
}
igt_describe("Test GPU reset using a binary shader to hang the job on compute ring");
igt_subtest_with_dynamic("amdgpu-dispatch-hang-test-compute-with-IP-COMPUTE") {
if (arr_cap[AMD_IP_COMPUTE] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-dispatch-hang-test-compute")
- amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_SHADER);
+ amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_SHADER, &pci);
}
}
igt_describe("Test GPU reset using a invalid shader program address to hang the job on compute ring");
igt_subtest_with_dynamic("amdgpu-dispatch-invalid-program-addr-test-compute-with-IP-COMPUTE") {
if (arr_cap[AMD_IP_COMPUTE] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-dispatch-invalid-program-addr-test-compute")
- amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_PROGRAM_ADDR);
+ amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_PROGRAM_ADDR, &pci);
}
}
igt_describe("Test GPU reset using a invalid shader program setting to hang the job on compute ring");
igt_subtest_with_dynamic("amdgpu-dispatch-invalid-setting-test-compute-with-IP-COMPUTE") {
if (arr_cap[AMD_IP_COMPUTE] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-dispatch-invalid-setting-test-compute")
- amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_PROGRAM_SETTING);
+ amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_PROGRAM_SETTING, &pci);
}
}
igt_describe("Test GPU reset using a invalid shader user data to hang the job on compute ring");
igt_subtest_with_dynamic("amdgpu-dispatch-invalid-user-data-test-compute-with-IP-COMPUTE") {
if (arr_cap[AMD_IP_COMPUTE] &&
- is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE)) {
+ is_reset_enable(AMD_IP_COMPUTE, AMDGPU_RESET_TYPE_PER_QUEUE, &pci)) {
igt_dynamic_f("amdgpu-dispatch-invalid-user-data-test-compute")
- amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_USER_DATA);
+ amdgpu_dispatch_hang_compute(device, BACKEND_SE_GC_SHADER_INVALID_USER_DATA, &pci);
}
}
@@ -163,7 +171,7 @@ igt_main
igt_subtest_with_dynamic("amdgpu-reset-test-gfx-with-IP-GFX-and-COMPUTE") {
if (arr_cap[AMD_IP_GFX] && arr_cap[AMD_IP_COMPUTE]) {
igt_dynamic_f("amdgpu-reset-gfx-compute")
- amdgpu_gpu_reset_test(device, fd);
+ amdgpu_gpu_reset_test(device, fd, &pci);
}
}
diff --git a/tests/amdgpu/amd_pci_unplug.c b/tests/amdgpu/amd_pci_unplug.c
index 4c055b99f..cb88185a0 100644
--- a/tests/amdgpu/amd_pci_unplug.c
+++ b/tests/amdgpu/amd_pci_unplug.c
@@ -47,7 +47,6 @@ igt_main
igt_subtest("amdgpu_hotunplug_with_cs")
amdgpu_hotunplug_with_cs(&setup, &unplug);
- /*TODO about second GPU*/
igt_subtest("amdgpu_hotunplug_with_exported_bo")
amdgpu_hotunplug_with_exported_bo(&setup, &unplug);
diff --git a/tests/amdgpu/amd_queue_reset.c b/tests/amdgpu/amd_queue_reset.c
index 87cf665f3..a7aca4171 100644
--- a/tests/amdgpu/amd_queue_reset.c
+++ b/tests/amdgpu/amd_queue_reset.c
@@ -1126,6 +1126,7 @@ igt_main
unsigned int ring_id_job_good;
unsigned int ring_id_job_bad;
int expect_error;
+ struct pci_addr pci ;
enum amd_ip_block_type ip_tests[3] = {AMD_IP_COMPUTE/*keep first*/, AMD_IP_GFX, AMD_IP_DMA};
enum amd_ip_block_type ip_background = AMD_IP_COMPUTE;
@@ -1202,6 +1203,9 @@ igt_main
igt_require(fd_shm != -1);
launch_background_process(argc, argv, path, &pid_background, fd_shm);
process = PROCESS_TEST;
+ igt_skip_on(get_pci_addr_from_fd(fd, &pci));
+ igt_info("PCI Address: domain %04x, bus %02x, device %02x, function %02x\n",
+ pci.domain, pci.bus, pci.device, pci.function);
} else {
process = PROCESS_BACKGROUND;
}
@@ -1236,7 +1240,7 @@ igt_main
reset = (ip_tests[i] != AMD_IP_DMA) && (it->test == CMD_STREAM_EXEC_INVALID_PACKET_LENGTH) ?
AMDGPU_RESET_TYPE_PER_QUEUE : AMDGPU_RESET_TYPE_PER_PIPE;
- if (arr_cap[ip_tests[i]] && is_reset_enable(ip_tests[i], reset) &&
+ if (arr_cap[ip_tests[i]] && is_reset_enable(ip_tests[i], reset, &pci) &&
get_next_rings(&ring_id_good, &ring_id_bad, info[0].available_rings,
info[i].available_rings, ip_background != ip_tests[i], &ring_id_job_good, &ring_id_job_bad)) {
igt_dynamic_f("amdgpu-%s-ring-good-%d-bad-%d-%s", it->name, ring_id_job_good, ring_id_job_bad,
--
2.34.1
More information about the igt-dev
mailing list