Messages in this thread | | | Date | Mon, 24 Jul 2023 23:19:49 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v4 05/19] x86/reboot: Assert that IRQs are disabled when turning off virtualization |
| |
On Fri, Jul 21, 2023 at 01:18:45PM -0700, Sean Christopherson wrote: > Assert that IRQs are disabled when turning off virtualization in an > emergency. KVM enables hardware via on_each_cpu(), i.e. could re-enable > hardware if a pending IPI were delivered after disabling virtualization. > > Remove a misleading comment from emergency_reboot_disable_virtualization() > about "just" needing to guarantee the CPU is stable (see above). > > Reviewed-by: Kai Huang <kai.huang@intel.com> > Signed-off-by: Sean Christopherson <seanjc@google.com> > --- > arch/x86/kernel/reboot.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c > index 48ad2d1ff83d..4cad7183b89e 100644 > --- a/arch/x86/kernel/reboot.c > +++ b/arch/x86/kernel/reboot.c > @@ -532,7 +532,6 @@ static inline void nmi_shootdown_cpus_on_restart(void); > > static void emergency_reboot_disable_virtualization(void) > { > - /* Just make sure we won't change CPUs while doing this */ > local_irq_disable(); > > /* > @@ -821,6 +820,13 @@ void cpu_emergency_disable_virtualization(void) > { > cpu_emergency_virt_cb *callback; > > + /* > + * IRQs must be disabled as KVM enables virtualization in hardware via > + * function call IPIs, i.e. IRQs need to be disabled to guarantee > + * virtualization stays disabled. > + */ > + lockdep_assert_irqs_disabled(); > + > rcu_read_lock(); > callback = rcu_dereference(cpu_emergency_virt_callback); > if (callback)
Strictly speaking you don't need rcu_read_lock() when IRQs are already disabled, but since this is non-performance critical code, it might be best to keep it super obvious. IOW, carry on.
| |