.. | .. |
---|
111 | 111 | */ |
---|
112 | 112 | atomic_t kgdb_active = ATOMIC_INIT(-1); |
---|
113 | 113 | EXPORT_SYMBOL_GPL(kgdb_active); |
---|
114 | | -static DEFINE_RAW_SPINLOCK(dbg_master_lock); |
---|
115 | | -static DEFINE_RAW_SPINLOCK(dbg_slave_lock); |
---|
| 114 | +static DEFINE_HARD_SPINLOCK(dbg_master_lock); |
---|
| 115 | +static DEFINE_HARD_SPINLOCK(dbg_slave_lock); |
---|
116 | 116 | |
---|
117 | 117 | /* |
---|
118 | 118 | * We use NR_CPUs not PERCPU, in case kgdb is used to debug early |
---|
.. | .. |
---|
612 | 612 | * Interrupts will be restored by the 'trap return' code, except when |
---|
613 | 613 | * single stepping. |
---|
614 | 614 | */ |
---|
615 | | - local_irq_save(flags); |
---|
| 615 | + flags = hard_local_irq_save(); |
---|
616 | 616 | |
---|
617 | 617 | cpu = ks->cpu; |
---|
618 | 618 | kgdb_info[cpu].debuggerinfo = regs; |
---|
.. | .. |
---|
666 | 666 | smp_mb__before_atomic(); |
---|
667 | 667 | atomic_dec(&slaves_in_kgdb); |
---|
668 | 668 | dbg_touch_watchdogs(); |
---|
669 | | - local_irq_restore(flags); |
---|
| 669 | + hard_local_irq_restore(flags); |
---|
670 | 670 | rcu_read_unlock(); |
---|
671 | 671 | return 0; |
---|
672 | 672 | } |
---|
.. | .. |
---|
685 | 685 | atomic_set(&kgdb_active, -1); |
---|
686 | 686 | raw_spin_unlock(&dbg_master_lock); |
---|
687 | 687 | dbg_touch_watchdogs(); |
---|
688 | | - local_irq_restore(flags); |
---|
| 688 | + hard_local_irq_restore(flags); |
---|
689 | 689 | rcu_read_unlock(); |
---|
690 | 690 | |
---|
691 | 691 | goto acquirelock; |
---|
.. | .. |
---|
721 | 721 | atomic_set(ks->send_ready, 1); |
---|
722 | 722 | |
---|
723 | 723 | /* Signal the other CPUs to enter kgdb_wait() */ |
---|
724 | | - else if ((!kgdb_single_step) && kgdb_do_roundup) |
---|
| 724 | + else if ((!kgdb_single_step) && kgdb_do_roundup && running_inband()) { |
---|
| 725 | + hard_cond_local_irq_enable(); |
---|
725 | 726 | kgdb_roundup_cpus(); |
---|
| 727 | + hard_cond_local_irq_disable(); |
---|
| 728 | + } |
---|
726 | 729 | #endif |
---|
727 | 730 | |
---|
728 | 731 | /* |
---|
.. | .. |
---|
834 | 837 | atomic_set(&kgdb_active, -1); |
---|
835 | 838 | raw_spin_unlock(&dbg_master_lock); |
---|
836 | 839 | dbg_touch_watchdogs(); |
---|
837 | | - local_irq_restore(flags); |
---|
| 840 | + hard_local_irq_restore(flags); |
---|
838 | 841 | rcu_read_unlock(); |
---|
839 | 842 | |
---|
840 | 843 | return kgdb_info[cpu].ret_state; |
---|
.. | .. |
---|
957 | 960 | if (!kgdb_connected || atomic_read(&kgdb_active) != -1 || dbg_kdb_mode) |
---|
958 | 961 | return; |
---|
959 | 962 | |
---|
960 | | - local_irq_save(flags); |
---|
| 963 | + flags = hard_local_irq_save(); |
---|
961 | 964 | gdbstub_msg_write(s, count); |
---|
962 | 965 | local_irq_restore(flags); |
---|
963 | 966 | } |
---|