[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 Mon, 2021-01-04 at 14:06 -0500, boris.ostrovsky@xxxxxxxxxx wrote: > On 1/4/21 12:32 PM, David Woodhouse wrote: > > On Mon, 2021-01-04 at 12:06 -0500, boris.ostrovsky@xxxxxxxxxx wrote > > : > > > > @@ -115,7 +115,7 @@ PV_CALLEE_SAVE_REGS_THUNK(xen_vcpu_stolen); > > > > void __init xen_init_spinlocks(void) > > > > { > > > > /* Don't need to use pvqspinlock code if there is only > > > > 1 vCPU. */ > > > > - if (num_possible_cpus() == 1 || nopvspin) > > > > + if (num_possible_cpus() == 1 || nopvspin || > > > > !xen_have_vector_callback) > > > > > > xen_init_spinlock() will not be called without vector callbacks > > > so > > > this test is not really necessary. > > > > Right, that's just paranoia to make the conditions consistent and > > safe. > > > 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: --- 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; } Attachment:
smime.p7s
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |