Since the PAGE_SIZE is 8KB on sparc64, the size of
structure amdsriov_ras_telemetry will exceed 64KB,
so use absolute value to fix the buffer size.

Fixes the issue:
 drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:522:2: error: static
 assertion failed due to requirement 'sizeof(struct
 amdsriov_ras_telemetry) <= 64 << 10': amdsriov_ras_telemetry must be 64 KB
 |  sizeof(struct amdsriov_ras_telemetry) <=
        AMD_SRIOV_MSG_RAS_TELEMETRY_SIZE_KB_V1 << 10,
 drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:522:40: note:
        expression evaluates to '115616 <= 65536'
 |   sizeof(struct amdsriov_ras_telemetry) <=
        AMD_SRIOV_MSG_RAS_TELEMETRY_SIZE_KB_V1 << 10,

Fixes: cb48a6b2b61d ("drm/amd/ras: use dedicated memory as vf ras command 
buffer")

Reported-by: kernel test robot <[email protected]>
Closes: 
https://lore.kernel.org/oe-kbuild-all/[email protected]/

Signed-off-by: YiPeng Chai <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h           | 5 +++--
 drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c | 4 ++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h 
b/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h
index 4870c03627df..a841f342a3eb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h
@@ -476,9 +476,10 @@ union amd_sriov_ras_host_push {
        struct amd_sriov_ras_chk_criti chk_criti;
 };
 
-#define AMD_SRIOV_UNIRAS_CMD_MAX_SIZE (PAGE_SIZE * 13)
+#define AMD_SRIOV_UNIRAS_BLOCKS_BUF_SIZE 4096
+#define AMD_SRIOV_UNIRAS_CMD_MAX_SIZE (4096 * 13)
 struct amd_sriov_uniras_shared_mem {
-       uint8_t blocks_ecc_buf[PAGE_SIZE];
+       uint8_t blocks_ecc_buf[AMD_SRIOV_UNIRAS_BLOCKS_BUF_SIZE];
        uint8_t cmd_buf[AMD_SRIOV_UNIRAS_CMD_MAX_SIZE];
 };
 
diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c 
b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
index 3e8b500caec1..81553230dca4 100644
--- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
+++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
@@ -63,7 +63,7 @@ static int amdgpu_virt_ras_get_cmd_shared_mem(struct 
ras_core_context *ras_core,
                                ras_telemetry_offset);
 
        if (cmd == RAS_CMD__GET_ALL_BLOCK_ECC_STATUS) {
-               if (mem_size > PAGE_SIZE)
+               if (mem_size > AMD_SRIOV_UNIRAS_BLOCKS_BUF_SIZE)
                        return -ENOMEM;
 
                shared_mem->cpu_addr = 
ras_telemetry_cpu->uniras_shared_mem.blocks_ecc_buf;
@@ -504,7 +504,7 @@ int amdgpu_virt_ras_hw_init(struct amdgpu_device *adev)
        memset(blks_ecc, 0, sizeof(*blks_ecc));
        if (amdgpu_virt_ras_get_cmd_shared_mem(ras_mgr->ras_core,
                        RAS_CMD__GET_ALL_BLOCK_ECC_STATUS,
-                       PAGE_SIZE, &blks_ecc->shared_mem))
+                       AMD_SRIOV_UNIRAS_BLOCKS_BUF_SIZE, 
&blks_ecc->shared_mem))
                return -ENOMEM;
 
        return 0;
-- 
2.43.0

Reply via email to