Hi, i was implementing and testing core dump feature of HDD driver on PS3 powerpc arch and tried to enter KDB manually with sysctl debug.kdb.panic=1. And i'm getting the following message from KDB: timeout stopping cpus.
I took a look at generic_stop_cpus which sends IPI to every CPU. On powerpc, IPI_STOP is implemented the following way: cpuid = PCPU_GET(cpuid); savectx(&stoppcbs[cpuid]); savectx(PCPU_GET(curpcb)); CPU_SET_ATOMIC(cpuid, &stopped_cpus); while (!CPU_ISSET(cpuid, &started_cpus)) cpu_spinwait(); CPU_CLR_ATOMIC(cpuid, &stopped_cpus); CPU_CLR_ATOMIC(cpuid, &started_cpus); generic_stop_cpus waits until all CPUs clear its ID in stopped_cpus bitmap. If you take a look at the previous snippet of code then the bit is indeed set but then cleared immediately. And that is why i get timeout message in kdb i think. Or do i not undestand something here ? Could someone please clarify. I could be wrong but i think it should be like this: cpuid = PCPU_GET(cpuid); savectx(&stoppcbs[cpuid]); savectx(PCPU_GET(curpcb)); CPU_CLR_ATOMIC(cpuid, &started_cpus); <------------- move here CPU_SET_ATOMIC(cpuid, &stopped_cpus); while (!CPU_ISSET(cpuid, &started_cpus)) cpu_spinwait(); CPU_CLR_ATOMIC(cpuid, &stopped_cpus); Thanks Regards
_______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"