| .. | .. |
|---|
| 1109 | 1109 | err = SIGILL; |
|---|
| 1110 | 1110 | break; |
|---|
| 1111 | 1111 | } |
|---|
| 1112 | | - /* fall through */ |
|---|
| 1112 | + fallthrough; |
|---|
| 1113 | 1113 | case beql_op: |
|---|
| 1114 | 1114 | case bnel_op: |
|---|
| 1115 | 1115 | if (delay_slot(regs)) { |
|---|
| .. | .. |
|---|
| 1174 | 1174 | fpu_emul: |
|---|
| 1175 | 1175 | regs->regs[31] = r31; |
|---|
| 1176 | 1176 | regs->cp0_epc = epc; |
|---|
| 1177 | | - if (!used_math()) { /* First time FPU user. */ |
|---|
| 1178 | | - preempt_disable(); |
|---|
| 1179 | | - err = init_fpu(); |
|---|
| 1180 | | - preempt_enable(); |
|---|
| 1181 | | - set_used_math(); |
|---|
| 1182 | | - } |
|---|
| 1183 | | - lose_fpu(1); /* Save FPU state for the emulator. */ |
|---|
| 1184 | 1177 | |
|---|
| 1185 | 1178 | err = fpu_emulator_cop1Handler(regs, ¤t->thread.fpu, 0, |
|---|
| 1186 | 1179 | &fault_addr); |
|---|
| .. | .. |
|---|
| 1212 | 1205 | case lwl_op: |
|---|
| 1213 | 1206 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1214 | 1207 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1215 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 4)) { |
|---|
| 1208 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 1216 | 1209 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1217 | 1210 | err = SIGSEGV; |
|---|
| 1218 | 1211 | break; |
|---|
| .. | .. |
|---|
| 1285 | 1278 | case lwr_op: |
|---|
| 1286 | 1279 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1287 | 1280 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1288 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 4)) { |
|---|
| 1281 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 1289 | 1282 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1290 | 1283 | err = SIGSEGV; |
|---|
| 1291 | 1284 | break; |
|---|
| .. | .. |
|---|
| 1359 | 1352 | case swl_op: |
|---|
| 1360 | 1353 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1361 | 1354 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1362 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 4)) { |
|---|
| 1355 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 1363 | 1356 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1364 | 1357 | err = SIGSEGV; |
|---|
| 1365 | 1358 | break; |
|---|
| .. | .. |
|---|
| 1429 | 1422 | case swr_op: |
|---|
| 1430 | 1423 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1431 | 1424 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1432 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 4)) { |
|---|
| 1425 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 1433 | 1426 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1434 | 1427 | err = SIGSEGV; |
|---|
| 1435 | 1428 | break; |
|---|
| .. | .. |
|---|
| 1504 | 1497 | |
|---|
| 1505 | 1498 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1506 | 1499 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1507 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 8)) { |
|---|
| 1500 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 1508 | 1501 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1509 | 1502 | err = SIGSEGV; |
|---|
| 1510 | 1503 | break; |
|---|
| .. | .. |
|---|
| 1623 | 1616 | |
|---|
| 1624 | 1617 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1625 | 1618 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1626 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 8)) { |
|---|
| 1619 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 1627 | 1620 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1628 | 1621 | err = SIGSEGV; |
|---|
| 1629 | 1622 | break; |
|---|
| .. | .. |
|---|
| 1742 | 1735 | |
|---|
| 1743 | 1736 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1744 | 1737 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1745 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 8)) { |
|---|
| 1738 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 1746 | 1739 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1747 | 1740 | err = SIGSEGV; |
|---|
| 1748 | 1741 | break; |
|---|
| .. | .. |
|---|
| 1860 | 1853 | |
|---|
| 1861 | 1854 | rt = regs->regs[MIPSInst_RT(inst)]; |
|---|
| 1862 | 1855 | vaddr = regs->regs[MIPSInst_RS(inst)] + MIPSInst_SIMM(inst); |
|---|
| 1863 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 8)) { |
|---|
| 1856 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 1864 | 1857 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1865 | 1858 | err = SIGSEGV; |
|---|
| 1866 | 1859 | break; |
|---|
| .. | .. |
|---|
| 1977 | 1970 | err = SIGBUS; |
|---|
| 1978 | 1971 | break; |
|---|
| 1979 | 1972 | } |
|---|
| 1980 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 4)) { |
|---|
| 1973 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 1981 | 1974 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 1982 | 1975 | err = SIGBUS; |
|---|
| 1983 | 1976 | break; |
|---|
| .. | .. |
|---|
| 2033 | 2026 | err = SIGBUS; |
|---|
| 2034 | 2027 | break; |
|---|
| 2035 | 2028 | } |
|---|
| 2036 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 4)) { |
|---|
| 2029 | + if (!access_ok((void __user *)vaddr, 4)) { |
|---|
| 2037 | 2030 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 2038 | 2031 | err = SIGBUS; |
|---|
| 2039 | 2032 | break; |
|---|
| .. | .. |
|---|
| 2096 | 2089 | err = SIGBUS; |
|---|
| 2097 | 2090 | break; |
|---|
| 2098 | 2091 | } |
|---|
| 2099 | | - if (!access_ok(VERIFY_READ, (void __user *)vaddr, 8)) { |
|---|
| 2092 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 2100 | 2093 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 2101 | 2094 | err = SIGBUS; |
|---|
| 2102 | 2095 | break; |
|---|
| .. | .. |
|---|
| 2157 | 2150 | err = SIGBUS; |
|---|
| 2158 | 2151 | break; |
|---|
| 2159 | 2152 | } |
|---|
| 2160 | | - if (!access_ok(VERIFY_WRITE, (void __user *)vaddr, 8)) { |
|---|
| 2153 | + if (!access_ok((void __user *)vaddr, 8)) { |
|---|
| 2161 | 2154 | current->thread.cp0_baduaddr = vaddr; |
|---|
| 2162 | 2155 | err = SIGBUS; |
|---|
| 2163 | 2156 | break; |
|---|
| .. | .. |
|---|
| 2242 | 2235 | |
|---|
| 2243 | 2236 | #ifdef CONFIG_DEBUG_FS |
|---|
| 2244 | 2237 | |
|---|
| 2245 | | -static int mipsr2_stats_show(struct seq_file *s, void *unused) |
|---|
| 2238 | +static int mipsr2_emul_show(struct seq_file *s, void *unused) |
|---|
| 2246 | 2239 | { |
|---|
| 2247 | 2240 | |
|---|
| 2248 | 2241 | seq_printf(s, "Instruction\tTotal\tBDslot\n------------------------------\n"); |
|---|
| .. | .. |
|---|
| 2308 | 2301 | return 0; |
|---|
| 2309 | 2302 | } |
|---|
| 2310 | 2303 | |
|---|
| 2311 | | -static int mipsr2_stats_clear_show(struct seq_file *s, void *unused) |
|---|
| 2304 | +static int mipsr2_clear_show(struct seq_file *s, void *unused) |
|---|
| 2312 | 2305 | { |
|---|
| 2313 | | - mipsr2_stats_show(s, unused); |
|---|
| 2306 | + mipsr2_emul_show(s, unused); |
|---|
| 2314 | 2307 | |
|---|
| 2315 | 2308 | __this_cpu_write((mipsr2emustats).movs, 0); |
|---|
| 2316 | 2309 | __this_cpu_write((mipsr2bdemustats).movs, 0); |
|---|
| .. | .. |
|---|
| 2353 | 2346 | return 0; |
|---|
| 2354 | 2347 | } |
|---|
| 2355 | 2348 | |
|---|
| 2356 | | -static int mipsr2_stats_open(struct inode *inode, struct file *file) |
|---|
| 2357 | | -{ |
|---|
| 2358 | | - return single_open(file, mipsr2_stats_show, inode->i_private); |
|---|
| 2359 | | -} |
|---|
| 2360 | | - |
|---|
| 2361 | | -static int mipsr2_stats_clear_open(struct inode *inode, struct file *file) |
|---|
| 2362 | | -{ |
|---|
| 2363 | | - return single_open(file, mipsr2_stats_clear_show, inode->i_private); |
|---|
| 2364 | | -} |
|---|
| 2365 | | - |
|---|
| 2366 | | -static const struct file_operations mipsr2_emul_fops = { |
|---|
| 2367 | | - .open = mipsr2_stats_open, |
|---|
| 2368 | | - .read = seq_read, |
|---|
| 2369 | | - .llseek = seq_lseek, |
|---|
| 2370 | | - .release = single_release, |
|---|
| 2371 | | -}; |
|---|
| 2372 | | - |
|---|
| 2373 | | -static const struct file_operations mipsr2_clear_fops = { |
|---|
| 2374 | | - .open = mipsr2_stats_clear_open, |
|---|
| 2375 | | - .read = seq_read, |
|---|
| 2376 | | - .llseek = seq_lseek, |
|---|
| 2377 | | - .release = single_release, |
|---|
| 2378 | | -}; |
|---|
| 2379 | | - |
|---|
| 2349 | +DEFINE_SHOW_ATTRIBUTE(mipsr2_emul); |
|---|
| 2350 | +DEFINE_SHOW_ATTRIBUTE(mipsr2_clear); |
|---|
| 2380 | 2351 | |
|---|
| 2381 | 2352 | static int __init mipsr2_init_debugfs(void) |
|---|
| 2382 | 2353 | { |
|---|
| 2383 | | - struct dentry *mipsr2_emul; |
|---|
| 2384 | | - |
|---|
| 2385 | | - if (!mips_debugfs_dir) |
|---|
| 2386 | | - return -ENODEV; |
|---|
| 2387 | | - |
|---|
| 2388 | | - mipsr2_emul = debugfs_create_file("r2_emul_stats", S_IRUGO, |
|---|
| 2389 | | - mips_debugfs_dir, NULL, |
|---|
| 2390 | | - &mipsr2_emul_fops); |
|---|
| 2391 | | - if (!mipsr2_emul) |
|---|
| 2392 | | - return -ENOMEM; |
|---|
| 2393 | | - |
|---|
| 2394 | | - mipsr2_emul = debugfs_create_file("r2_emul_stats_clear", S_IRUGO, |
|---|
| 2395 | | - mips_debugfs_dir, NULL, |
|---|
| 2396 | | - &mipsr2_clear_fops); |
|---|
| 2397 | | - if (!mipsr2_emul) |
|---|
| 2398 | | - return -ENOMEM; |
|---|
| 2399 | | - |
|---|
| 2354 | + debugfs_create_file("r2_emul_stats", S_IRUGO, mips_debugfs_dir, NULL, |
|---|
| 2355 | + &mipsr2_emul_fops); |
|---|
| 2356 | + debugfs_create_file("r2_emul_stats_clear", S_IRUGO, mips_debugfs_dir, |
|---|
| 2357 | + NULL, &mipsr2_clear_fops); |
|---|
| 2400 | 2358 | return 0; |
|---|
| 2401 | 2359 | } |
|---|
| 2402 | 2360 | |
|---|