drm/amdgpu: Add double-sscanf but invert
authorLuben Tuikov <luben.tuikov@amd.com>
Wed, 14 Apr 2021 15:17:01 +0000 (11:17 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 15 Apr 2021 20:32:44 +0000 (16:32 -0400)
Add back the double-sscanf so that both decimal
and hexadecimal values could be read in, but this
time invert the scan so that hexadecimal format
with a leading 0x is tried first, and if that
fails, then try decimal format.

Also use a logical-AND instead of nesting double
if-conditional.

See commit "drm/amdgpu: Fix a bug for input with double sscanf"

Cc: Alexander Deucher <Alexander.Deucher@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Reviewed-by: John Clements <john.clements@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index 44dfb3613e377f9773077f3861b94dda33283831..38a691a3b600bcb50ec0279d1d2c74622011ca1b 100644 (file)
@@ -229,7 +229,8 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
 
        if (op != -1) {
                if (op == 3) {
-                       if (sscanf(str, "%*s %llx", &address) != 1)
+                       if (sscanf(str, "%*s 0x%llx", &address) != 1 &&
+                           sscanf(str, "%*s %llu", &address) != 1)
                                return -EINVAL;
 
                        data->op = op;
@@ -253,7 +254,9 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
                data->op = op;
 
                if (op == 2) {
-                       if (sscanf(str, "%*s %*s %*s %x %llx %llx",
+                       if (sscanf(str, "%*s %*s %*s 0x%x 0x%llx 0x%llx",
+                                  &sub_block, &address, &value) != 3 &&
+                           sscanf(str, "%*s %*s %*s %u %llu %llu",
                                   &sub_block, &address, &value) != 3)
                                return -EINVAL;
                        data->head.sub_block_index = sub_block;