From: "Jesse.zhang@amd.com" <jesse.zhang@amd.com>
To: <igt-dev@lists.freedesktop.org>
Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>,
Alex Deucher <alexander.deucher@amd.com>,
Christian Koenig <christian.koenig@amd.com>,
"Jesse.zhang@amd.com" <jesse.zhang@amd.com>
Subject: [PATCH i-g-t] tests/amdgpu: fix concurrent queue test issue
Date: Thu, 5 Sep 2024 16:20:27 +0800 [thread overview]
Message-ID: <20240905082027.1052054-1-jesse.zhang@amd.com> (raw)
When running with parameter --device on multiple cards simultaneously.
All queue test processes will share "/queue_reset_shm",which will create conflicts.
such as:
sudo ./tests/amdgpu/amd_queue_reset --device drm:/dev/dri/card0
sudo ./tests/amdgpu/amd_queue_reset --device drm:/dev/dri/card1
To solve this problem. It should open a unique shared memory for different devices.
Signed-off-by: Jesse Zhang <jesse.zhang@amd.com>
---
tests/amdgpu/amd_queue_reset.c | 44 +++++++++++++++++++++++++++-------
1 file changed, 35 insertions(+), 9 deletions(-)
diff --git a/tests/amdgpu/amd_queue_reset.c b/tests/amdgpu/amd_queue_reset.c
index b257ec3c0..4b26b86dc 100644
--- a/tests/amdgpu/amd_queue_reset.c
+++ b/tests/amdgpu/amd_queue_reset.c
@@ -32,7 +32,6 @@
#define SHARED_CHILD_DESCRIPTOR 3
-#define SHARED_MEM_NAME "/queue_reset_shm"
#define TEST_TIMEOUT 100 //100 seconds
enum process_type {
@@ -349,7 +348,7 @@ static void set_next_test_to_skip(struct shmbuf *sh_mem)
}
static int
-shared_mem_destroy(struct shmbuf *shmp, int shm_fd, bool unmap)
+shared_mem_destroy(struct shmbuf *shmp, int shm_fd, bool unmap, char shm_name[256])
{
int ret = 0;
@@ -363,20 +362,20 @@ shared_mem_destroy(struct shmbuf *shmp, int shm_fd, bool unmap)
if (shm_fd > 0)
close(shm_fd);
- shm_unlink(SHARED_MEM_NAME);
+ shm_unlink(shm_name);
return ret;
}
static int
-shared_mem_create(struct shmbuf **ppbuf)
+shared_mem_create(struct shmbuf **ppbuf, char shm_name[256])
{
int shm_fd = -1;
struct shmbuf *shmp = NULL;
bool unmap = false;
// Create a shared memory object
- shm_fd = shm_open(SHARED_MEM_NAME, O_CREAT | O_RDWR, 0666);
+ shm_fd = shm_open(shm_name, O_CREAT | O_RDWR, 0666);
if (shm_fd == -1)
goto error;
@@ -414,7 +413,7 @@ shared_mem_create(struct shmbuf **ppbuf)
return shm_fd;
error:
- shared_mem_destroy(shmp, shm_fd, unmap);
+ shared_mem_destroy(shmp, shm_fd, unmap, shm_name);
return shm_fd;
}
@@ -877,6 +876,29 @@ is_run_subtest_parameter_found(int argc, char **argv)
return ret;
}
+#define ONDEVICE "--device"
+static int
+is_run_device_parameter_found(int argc, char **argv)
+{
+ int i;
+ int res = 0;
+ char *p = NULL;
+
+ for (i = 1; i < argc; i++) {
+ if (strcmp(ONDEVICE, argv[i]) == 0) {
+ /* Get the sum for a specific device as a unique identifier */
+ p = argv[i+1];
+ while(*p){
+ res += *p;
+ p++;
+ }
+ break;
+ }
+ }
+
+ return res;
+}
+
static bool
add_background_parameter(int *pargc, char **argv)
@@ -1057,6 +1079,7 @@ igt_main
struct shmbuf *sh_mem = NULL;
int r;
+ char shm_name[256] = {0};
bool arr_cap[AMD_IP_MAX] = {0};
unsigned int ring_id_good;
unsigned int ring_id_bad;
@@ -1116,8 +1139,11 @@ igt_main
const_num_of_tests = 1;
else
const_num_of_tests = get_num_of_tests(&arr_err[0], &ip_tests[0], ARRAY_SIZE(ip_tests));
- fd = drm_open_driver(DRIVER_AMDGPU);
+ r = is_run_device_parameter_found(argc, argv);
+ snprintf(shm_name,sizeof(shm_name),"/queue_reset_shm_%d",r);
+
+ fd = drm_open_driver(DRIVER_AMDGPU);
err = amdgpu_device_initialize(fd, &major, &minor, &device);
igt_require(err == 0);
@@ -1137,7 +1163,7 @@ igt_main
if (!is_background_parameter_found(argc, argv)) {
add_background_parameter(&argc, argv);
- fd_shm = shared_mem_create(&sh_mem);
+ fd_shm = shared_mem_create(&sh_mem, shm_name);
igt_require(fd_shm != -1);
launch_background_process(argc, argv, path, &pid_background, fd_shm);
process = PROCESS_TEST;
@@ -1190,7 +1216,7 @@ igt_main
free_contexts(device, arr_context_handle, const_num_of_tests);
amdgpu_device_deinitialize(device);
drm_close_driver(fd);
- shared_mem_destroy(sh_mem, fd_shm, true);
+ shared_mem_destroy(sh_mem, fd_shm, true, shm_name);
posix_spawn_file_actions_destroy(&action);
free_command_line(argc, argv, path);
--
2.25.1
next reply other threads:[~2024-09-05 8:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-05 8:20 Jesse.zhang@amd.com [this message]
2024-09-05 8:49 ` ✗ Fi.CI.BUILD: failure for tests/amdgpu: fix concurrent queue test issue Patchwork
2024-09-05 20:45 ` [PATCH i-g-t] " vitaly prosyak
-- strict thread matches above, loose matches on Subject: below --
2024-09-06 2:13 Jesse.zhang@amd.com
2024-09-06 22:39 ` vitaly prosyak
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=20240905082027.1052054-1-jesse.zhang@amd.com \
--to=jesse.zhang@amd.com \
--cc=alexander.deucher@amd.com \
--cc=christian.koenig@amd.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=vitaly.prosyak@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox