>From the sscanf manpage: i Matches an optionally signed integer; the next pointer must be a pointer to int. The integer is read in base 16 if it begins with 0x or 0X, in base 8 if it begins with 0, and in base 10 otherwise. Only characters that correspond to the base are used. So a single sscanf("%*s %i", ...) would to the job. The only problem is that accepts signed integers, not unsigned. I'm not sure if that's a problem in this use case. Regards, Felix Am 2021-04-14 um 11:21 a.m. schrieb Luben Tuikov: > 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@xxxxxxx> > Cc: John Clements <john.clements@xxxxxxx> > Cc: Hawking Zhang <Hawking.Zhang@xxxxxxx> > Signed-off-by: Luben Tuikov <luben.tuikov@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > index 44dfb3613e37..38a691a3b600 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > @@ -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; _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx