inject need a real valid address.

Signed-off-by: xinhui pan <xinhui....@amd.com>
---
 tests/amdgpu/ras_tests.c | 53 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/tests/amdgpu/ras_tests.c b/tests/amdgpu/ras_tests.c
index 612ad1d7..d3f1750d 100644
--- a/tests/amdgpu/ras_tests.c
+++ b/tests/amdgpu/ras_tests.c
@@ -29,6 +29,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "xf86drm.h"
 
 const char *ras_block_string[] = {
@@ -452,6 +453,47 @@ static int amdgpu_ras_query_err_count(enum 
amdgpu_ras_block block,
        return 0;
 }
 
+typedef struct ________ras_inject_internal {
+       amdgpu_bo_handle bo_handle;
+       amdgpu_va_handle va_handle;
+       void *cpu;
+       uint64_t mc;
+} amdgpu_ras_handle;
+
+static int amdgpu_ras_alloc_vram_page(uint64_t *mc_address, void **handle)
+{
+       amdgpu_ras_handle h;
+       int r;
+
+       *handle = malloc(sizeof(amdgpu_ras_handle));
+       if (!*handle)
+               return -1;
+
+       r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096,
+                                   AMDGPU_GEM_DOMAIN_VRAM, 0,
+                                   &h.bo_handle, &h.cpu,
+                                   &h.mc, &h.va_handle);
+       if (r) {
+               free(*handle);
+               return r;
+       }
+
+       memset(h.cpu, 4096, 0);
+       memcpy(*handle, &h, sizeof(h));
+       *mc_address = h.mc;
+
+       return 0;
+}
+
+static void amdgpu_ras_free_vram_page(void *handle)
+{
+       amdgpu_ras_handle h = *(amdgpu_ras_handle *)handle;
+
+       free(handle);
+
+       amdgpu_bo_unmap_and_free(h.bo_handle, h.va_handle, h.mc, 4096);
+}
+
 //tests
 static void amdgpu_ras_features_test(int enable)
 {
@@ -508,6 +550,14 @@ static void __amdgpu_ras_inject_test(void)
        int ret;
        int i;
        unsigned long ue, ce, ue_old, ce_old;
+       uint64_t mc;
+       void *handle;
+
+       ret = amdgpu_ras_alloc_vram_page(&mc, &handle);
+       CU_ASSERT_EQUAL(ret, 0);
+
+       if (ret)
+               return;
 
        data.op = 2;
        for (i = 0; i < AMDGPU_RAS_BLOCK__LAST; i++) {
@@ -519,7 +569,7 @@ static void __amdgpu_ras_inject_test(void)
                                .sub_block_index = 0,
                                .name = "",
                        },
-                       .address = 0,
+                       .address = mc,
                        .value = 0,
                };
 
@@ -563,6 +613,7 @@ loop:
                CU_ASSERT_EQUAL(ue_old + 1, ue);
                CU_ASSERT_EQUAL(ce_old, ce);
        }
+       amdgpu_ras_free_vram_page(handle);
 }
 
 static void amdgpu_ras_inject_test(void)
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to