hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/kernel/debug/debug_core.c
....@@ -111,8 +111,8 @@
111111 */
112112 atomic_t kgdb_active = ATOMIC_INIT(-1);
113113 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);
116116
117117 /*
118118 * We use NR_CPUs not PERCPU, in case kgdb is used to debug early
....@@ -612,7 +612,7 @@
612612 * Interrupts will be restored by the 'trap return' code, except when
613613 * single stepping.
614614 */
615
- local_irq_save(flags);
615
+ flags = hard_local_irq_save();
616616
617617 cpu = ks->cpu;
618618 kgdb_info[cpu].debuggerinfo = regs;
....@@ -666,7 +666,7 @@
666666 smp_mb__before_atomic();
667667 atomic_dec(&slaves_in_kgdb);
668668 dbg_touch_watchdogs();
669
- local_irq_restore(flags);
669
+ hard_local_irq_restore(flags);
670670 rcu_read_unlock();
671671 return 0;
672672 }
....@@ -685,7 +685,7 @@
685685 atomic_set(&kgdb_active, -1);
686686 raw_spin_unlock(&dbg_master_lock);
687687 dbg_touch_watchdogs();
688
- local_irq_restore(flags);
688
+ hard_local_irq_restore(flags);
689689 rcu_read_unlock();
690690
691691 goto acquirelock;
....@@ -721,8 +721,11 @@
721721 atomic_set(ks->send_ready, 1);
722722
723723 /* 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();
725726 kgdb_roundup_cpus();
727
+ hard_cond_local_irq_disable();
728
+ }
726729 #endif
727730
728731 /*
....@@ -834,7 +837,7 @@
834837 atomic_set(&kgdb_active, -1);
835838 raw_spin_unlock(&dbg_master_lock);
836839 dbg_touch_watchdogs();
837
- local_irq_restore(flags);
840
+ hard_local_irq_restore(flags);
838841 rcu_read_unlock();
839842
840843 return kgdb_info[cpu].ret_state;
....@@ -957,7 +960,7 @@
957960 if (!kgdb_connected || atomic_read(&kgdb_active) != -1 || dbg_kdb_mode)
958961 return;
959962
960
- local_irq_save(flags);
963
+ flags = hard_local_irq_save();
961964 gdbstub_msg_write(s, count);
962965 local_irq_restore(flags);
963966 }