Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: 9276/1: Refactor dump_instr()

1. Rename local variable 'val16' to 'tmp'. So that the processing
statements of thumb and arm can be aligned.
2. Fix two sparse check warnings: (add __user for type conversion)
warning: incorrect type in initializer (different address spaces)
expected unsigned short [noderef] __user *register __p
got unsigned short [usertype] *
3. Prepare for the next patch to avoid repeated judgment.
Before:
if (!user_mode(regs)) {
if (thumb)
else
} else {
if (thumb)
else
}

After:
if (thumb) {
if (user_mode(regs))
else
} else {
if (user_mode(regs))
else
}

Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

authored by

Zhen Lei and committed by
Russell King (Oracle)
21d0798a 59e2cf8d

+13 -12
+13 -12
arch/arm/kernel/traps.c
··· 178 178 for (i = -4; i < 1 + !!thumb; i++) { 179 179 unsigned int val, bad; 180 180 181 - if (!user_mode(regs)) { 182 - if (thumb) { 183 - u16 val16; 184 - bad = get_kernel_nofault(val16, &((u16 *)addr)[i]); 185 - val = val16; 186 - } else { 187 - bad = get_kernel_nofault(val, &((u32 *)addr)[i]); 188 - } 189 - } else { 190 - if (thumb) 191 - bad = get_user(val, &((u16 *)addr)[i]); 181 + if (thumb) { 182 + u16 tmp; 183 + 184 + if (user_mode(regs)) 185 + bad = get_user(tmp, &((u16 __user *)addr)[i]); 192 186 else 193 - bad = get_user(val, &((u32 *)addr)[i]); 187 + bad = get_kernel_nofault(tmp, &((u16 *)addr)[i]); 188 + 189 + val = tmp; 190 + } else { 191 + if (user_mode(regs)) 192 + bad = get_user(val, &((u32 __user *)addr)[i]); 193 + else 194 + bad = get_kernel_nofault(val, &((u32 *)addr)[i]); 194 195 } 195 196 196 197 if (!bad)