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

MIPS: Use WARN() in uasm for better diagnostics.

On the off chance that uasm ever warns about overflow, there is no way
to know what the offending instruction is.

Change the printks to WARNs, so we can get a nice stack trace. It has
the added benefit of being much more noticeable than the short single
line warning message, so is less likely to be ignored.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/1905/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

David Daney and committed by
Ralf Baechle
8d662c8d 2c8c53e2

+16 -24
+16 -24
arch/mips/mm/uasm.c
··· 156 156 157 157 static inline __uasminit u32 build_rs(u32 arg) 158 158 { 159 - if (arg & ~RS_MASK) 160 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 159 + WARN(arg & ~RS_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 161 160 162 161 return (arg & RS_MASK) << RS_SH; 163 162 } 164 163 165 164 static inline __uasminit u32 build_rt(u32 arg) 166 165 { 167 - if (arg & ~RT_MASK) 168 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 166 + WARN(arg & ~RT_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 169 167 170 168 return (arg & RT_MASK) << RT_SH; 171 169 } 172 170 173 171 static inline __uasminit u32 build_rd(u32 arg) 174 172 { 175 - if (arg & ~RD_MASK) 176 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 173 + WARN(arg & ~RD_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 177 174 178 175 return (arg & RD_MASK) << RD_SH; 179 176 } 180 177 181 178 static inline __uasminit u32 build_re(u32 arg) 182 179 { 183 - if (arg & ~RE_MASK) 184 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 180 + WARN(arg & ~RE_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 185 181 186 182 return (arg & RE_MASK) << RE_SH; 187 183 } 188 184 189 185 static inline __uasminit u32 build_simm(s32 arg) 190 186 { 191 - if (arg > 0x7fff || arg < -0x8000) 192 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 187 + WARN(arg > 0x7fff || arg < -0x8000, 188 + KERN_WARNING "Micro-assembler field overflow\n"); 193 189 194 190 return arg & 0xffff; 195 191 } 196 192 197 193 static inline __uasminit u32 build_uimm(u32 arg) 198 194 { 199 - if (arg & ~IMM_MASK) 200 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 195 + WARN(arg & ~IMM_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 201 196 202 197 return arg & IMM_MASK; 203 198 } 204 199 205 200 static inline __uasminit u32 build_bimm(s32 arg) 206 201 { 207 - if (arg > 0x1ffff || arg < -0x20000) 208 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 202 + WARN(arg > 0x1ffff || arg < -0x20000, 203 + KERN_WARNING "Micro-assembler field overflow\n"); 209 204 210 - if (arg & 0x3) 211 - printk(KERN_WARNING "Invalid micro-assembler branch target\n"); 205 + WARN(arg & 0x3, KERN_WARNING "Invalid micro-assembler branch target\n"); 212 206 213 207 return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); 214 208 } 215 209 216 210 static inline __uasminit u32 build_jimm(u32 arg) 217 211 { 218 - if (arg & ~((JIMM_MASK) << 2)) 219 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 212 + WARN(arg & ~(JIMM_MASK << 2), 213 + KERN_WARNING "Micro-assembler field overflow\n"); 220 214 221 215 return (arg >> 2) & JIMM_MASK; 222 216 } 223 217 224 218 static inline __uasminit u32 build_scimm(u32 arg) 225 219 { 226 - if (arg & ~SCIMM_MASK) 227 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 220 + WARN(arg & ~SCIMM_MASK, 221 + KERN_WARNING "Micro-assembler field overflow\n"); 228 222 229 223 return (arg & SCIMM_MASK) << SCIMM_SH; 230 224 } 231 225 232 226 static inline __uasminit u32 build_func(u32 arg) 233 227 { 234 - if (arg & ~FUNC_MASK) 235 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 228 + WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 236 229 237 230 return arg & FUNC_MASK; 238 231 } 239 232 240 233 static inline __uasminit u32 build_set(u32 arg) 241 234 { 242 - if (arg & ~SET_MASK) 243 - printk(KERN_WARNING "Micro-assembler field overflow\n"); 235 + WARN(arg & ~SET_MASK, KERN_WARNING "Micro-assembler field overflow\n"); 244 236 245 237 return arg & SET_MASK; 246 238 }