Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: change "panic: i82489_icr_wait: busy" when entering DDB to warning
Hi,
On Wed, Oct 28, 2015 at 12:56 AM, Christoph Badura <bad%bsd.de@localhost> wrote:
> I get an annoying recursive "panic: i82489_icr_wait: busy" when invoking
> DDB from the console on my Dell PE1400SC machines. C.f. the console log at
> the end.
Could you try the attached patch.
Regards,
--
Kimihiro Nonaka
diff --git a/sys/arch/amd64/amd64/db_interface.c b/sys/arch/amd64/amd64/db_interface.c
index 5b07bf197f3..df64670046f 100644
--- a/sys/arch/amd64/amd64/db_interface.c
+++ b/sys/arch/amd64/amd64/db_interface.c
@@ -131,11 +131,25 @@ db_suspend_others(void)
win = (ddb_cpu == cpu_me);
__cpu_simple_unlock(&db_lock);
if (win) {
+ CPU_INFO_ITERATOR cii;
+ struct cpu_info *ci, *self = curcpu();
+ bool do_ipi = false;
+
+ for (CPU_INFO_FOREACH(cii, ci)) {
+ if (ci == self)
+ continue;
+ if ((ci->ci_flags & CPUF_RUNNING) == 0)
+ continue;
+ do_ipi = true;
+ break;
+ }
+ if (do_ipi) {
#ifdef XEN
- xen_broadcast_ipi(XEN_IPI_DDB);
+ xen_broadcast_ipi(XEN_IPI_DDB);
#else
- x86_ipi(ddb_vec, LAPIC_DEST_ALLEXCL, LAPIC_DLMODE_FIXED);
+ x86_ipi(ddb_vec, LAPIC_DEST_ALLEXCL, LAPIC_DLMODE_FIXED);
#endif /* XEN */
+ }
}
ddb_mp_online = x86_mp_online;
diff --git a/sys/arch/i386/i386/db_interface.c b/sys/arch/i386/i386/db_interface.c
index 5b51554eefa..c8580801de7 100644
--- a/sys/arch/i386/i386/db_interface.c
+++ b/sys/arch/i386/i386/db_interface.c
@@ -142,11 +142,25 @@ db_suspend_others(void)
win = (ddb_cpu == cpu_me);
__cpu_simple_unlock(&db_lock);
if (win) {
+ CPU_INFO_ITERATOR cii;
+ struct cpu_info *ci, *self = curcpu();
+ bool do_ipi = false;
+
+ for (CPU_INFO_FOREACH(cii, ci)) {
+ if (ci == self)
+ continue;
+ if ((ci->ci_flags & CPUF_RUNNING) == 0)
+ continue;
+ do_ipi = true;
+ break;
+ }
+ if (do_ipi) {
#ifdef XEN
- xen_broadcast_ipi(XEN_IPI_DDB);
+ xen_broadcast_ipi(XEN_IPI_DDB);
#else
- x86_ipi(ddb_vec, LAPIC_DEST_ALLEXCL, LAPIC_DLMODE_FIXED);
+ x86_ipi(ddb_vec, LAPIC_DEST_ALLEXCL, LAPIC_DLMODE_FIXED);
#endif /* XEN */
+ }
}
ddb_mp_online = x86_mp_online;
x86_mp_online = false;
Home |
Main Index |
Thread Index |
Old Index