On 04/07/2017 16:27, Peter Zijlstra wrote: > Mason wrote: > >> if (IS_ENABLED(CONFIG_DEBUG_PREEMPT) && in_atomic_preempt_off()) { >> pr_err("Preemption disabled at:"); >> print_ip_sym(preempt_disable_ip); >> pr_cont("\n"); >> } >> >> BTW, why didn't print_ip_sym(preempt_disable_ip); say >> where preemption had been disabled? > > It does, but it might be non-obvious. We only store the first 0->!0 > transition IP in there. The output was: [ 1.079483] Preemption disabled at:[ 1.082820] [< (null)>] (null) so preempt_disable_ip was NULL, right? Has it been already clobbered? >> Here's the high-level view. My HW is borked and muxes >> config space and mem space. So I need a way to freeze >> the entire system, make the config space access, and >> then return the system to normal. (AFAICT, config space >> accesses are rare, so if I kill performance for these >> accesses, the system might remain usable.) >> >> Is there a way to do this? Mark suggested stop_machine >> but it seems using it in my situation is not quite >> straight-forward. > > *groan*... so yeah, broken hardware demands crazy stuff... stop machine > is tricky here because I'm not sure we can demand all PCI accessors to > allow sleeping. > > And given that PCI lock is irqsave, we can't even assume IRQs are > enabled. > > Does your platform have NMIs? If so, you can do yuck things like the > kgdb sync. NMI IPI all other CPUs and have them spin-wait on your state. > > Then be careful not to deadlock when two CPUs do that concurrently. My platform is arch/arm/mach-tango (Cortex A9, ARMv7-A) This looks similar to what you described: https://www.linaro.org/blog/core-dump/debugging-arm-kernels-using-nmifiq/ (I CCed Daniel Thompson) Quote article: > Note: On ARMv7-A devices that have security extensions (TrustZone) > FIQ can only be used by the kernel if it is possible to run Linux in > secure mode. It is therefore not possible to exploit FIQ for > debugging and run a secure monitor simultaneously. At the end of this > blog post we will discuss potential future work to mitigate this > problem. On my platform, Linux runs in non-secure mode... Sounds like I don't have many options left for this driver :-( Regards.