[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 5/5] x86/xen: Don't register PV spinlock IPI when it isn't going to be used
On 1/4/21 3:51 PM, David Woodhouse wrote: > On Mon, 2021-01-04 at 14:06 -0500, boris.ostrovsky@xxxxxxxxxx wrote: >> >> OK, but we still need to do something about virt_spin_lock_key. > Right, I suppose we should just call xen_init_spinlocks() and then my > defensive check stops being defensive and does what we need, including > fixing virt_spin_lock_key. > > Normally it's xen_hvm_smp_prepare_boot_cpu() which calls > xen_init_spinlocks(), and *also* calls xen_vcpu_setup() for CPU0... > which brings me back to your other observation. > > I think we *should* be calling xen_vcpu_setup() for all CPUs, even when > there's no vector callback. We can still have a per-vCPU vcpu_info page > if we want it. It was relatively harmless that we didn't do it for > CPU0, but it was wrong not to do so. > > So I think this fixes both. Will test: I actually think this should go further in that only IPI-related ops should be conditioned on vector callback presence. The rest are generic VCPU routines that are not necessarily interrupt/event-related. And if they call something that *is* related then those specific routines should decide what to do based on xen_have_vector_callback. Also, for the spinlock changes specifically --- I wonder whether it would be better to reverse initial value of xen_pvspin and set it to 'true' only if initialization succeeds. -boris > > --- a/arch/x86/xen/smp_hvm.c > +++ b/arch/x86/xen/smp_hvm.c > @@ -64,6 +64,8 @@ static void xen_hvm_cpu_die(unsigned int cpu) > > void __init xen_hvm_smp_init(void) > { > + smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; > + > if (!xen_have_vector_callback) > return; > > @@ -72,6 +74,5 @@ void __init xen_hvm_smp_init(void) > smp_ops.cpu_die = xen_hvm_cpu_die; > smp_ops.send_call_func_ipi = xen_smp_send_call_function_ipi; > smp_ops.send_call_func_single_ipi = > xen_smp_send_call_function_single_ipi; > - smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; > smp_ops.smp_cpus_done = xen_smp_cpus_done; > }
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |