| .. | .. |
|---|
| 208 | 208 | ".set\treorder"); |
|---|
| 209 | 209 | } |
|---|
| 210 | 210 | |
|---|
| 211 | | -static void kgdb_call_nmi_hook(void *ignored) |
|---|
| 211 | +void kgdb_call_nmi_hook(void *ignored) |
|---|
| 212 | 212 | { |
|---|
| 213 | 213 | mm_segment_t old_fs; |
|---|
| 214 | 214 | |
|---|
| 215 | 215 | old_fs = get_fs(); |
|---|
| 216 | | - set_fs(get_ds()); |
|---|
| 216 | + set_fs(KERNEL_DS); |
|---|
| 217 | 217 | |
|---|
| 218 | 218 | kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs()); |
|---|
| 219 | 219 | |
|---|
| 220 | 220 | set_fs(old_fs); |
|---|
| 221 | | -} |
|---|
| 222 | | - |
|---|
| 223 | | -void kgdb_roundup_cpus(unsigned long flags) |
|---|
| 224 | | -{ |
|---|
| 225 | | - local_irq_enable(); |
|---|
| 226 | | - smp_call_function(kgdb_call_nmi_hook, NULL, 0); |
|---|
| 227 | | - local_irq_disable(); |
|---|
| 228 | 221 | } |
|---|
| 229 | 222 | |
|---|
| 230 | 223 | static int compute_signal(int tt) |
|---|
| .. | .. |
|---|
| 326 | 319 | |
|---|
| 327 | 320 | /* Kernel mode. Set correct address limit */ |
|---|
| 328 | 321 | old_fs = get_fs(); |
|---|
| 329 | | - set_fs(get_ds()); |
|---|
| 322 | + set_fs(KERNEL_DS); |
|---|
| 330 | 323 | |
|---|
| 331 | 324 | if (atomic_read(&kgdb_active) != -1) |
|---|
| 332 | 325 | kgdb_nmicallback(smp_processor_id(), regs); |
|---|
| .. | .. |
|---|
| 395 | 388 | return -1; |
|---|
| 396 | 389 | } |
|---|
| 397 | 390 | |
|---|
| 398 | | -struct kgdb_arch arch_kgdb_ops; |
|---|
| 391 | +const struct kgdb_arch arch_kgdb_ops = { |
|---|
| 392 | +#ifdef CONFIG_CPU_BIG_ENDIAN |
|---|
| 393 | + .gdb_bpt_instr = { spec_op << 2, 0x00, 0x00, break_op }, |
|---|
| 394 | +#else |
|---|
| 395 | + .gdb_bpt_instr = { break_op, 0x00, 0x00, spec_op << 2 }, |
|---|
| 396 | +#endif |
|---|
| 397 | +}; |
|---|
| 399 | 398 | |
|---|
| 400 | 399 | int kgdb_arch_init(void) |
|---|
| 401 | 400 | { |
|---|
| 402 | | - union mips_instruction insn = { |
|---|
| 403 | | - .r_format = { |
|---|
| 404 | | - .opcode = spec_op, |
|---|
| 405 | | - .func = break_op, |
|---|
| 406 | | - } |
|---|
| 407 | | - }; |
|---|
| 408 | | - memcpy(arch_kgdb_ops.gdb_bpt_instr, insn.byte, BREAK_INSTR_SIZE); |
|---|
| 409 | | - |
|---|
| 410 | 401 | register_die_notifier(&kgdb_notifier); |
|---|
| 411 | 402 | |
|---|
| 412 | 403 | return 0; |
|---|