[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/smp: Support NULL IPI function pointers
commit 06c30ad7662f0c9fc8bc1c356f8aeaa63fb731ec Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Wed Nov 17 16:16:23 2021 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Nov 29 13:53:05 2021 +0000 xen/smp: Support NULL IPI function pointers There are several cases where the act of interrupting a remote processor has the required side effect. Explicitly allow NULL function pointers so the calling code doesn't have to provide a stub implementation. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/mm/hap/hap.c | 11 +---------- xen/arch/x86/mm/p2m-ept.c | 11 ++--------- xen/common/smp.c | 6 +++++- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 73575deb0d..5b269ef8b3 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -696,15 +696,6 @@ static void hap_update_cr3(struct vcpu *v, int do_locking, bool noflush) hvm_update_guest_cr3(v, noflush); } -/* - * Dummy function to use with on_selected_cpus in order to trigger a vmexit on - * selected pCPUs. When the VM resumes execution it will get a new ASID/VPID - * and thus a clean TLB. - */ -static void dummy_flush(void *data) -{ -} - static bool flush_tlb(bool (*flush_vcpu)(void *ctxt, struct vcpu *v), void *ctxt) { @@ -737,7 +728,7 @@ static bool flush_tlb(bool (*flush_vcpu)(void *ctxt, struct vcpu *v), * not currently running will already be flushed when scheduled because of * the ASID tickle done in the loop above. */ - on_selected_cpus(mask, dummy_flush, NULL, 0); + on_selected_cpus(mask, NULL, NULL, 0); return true; } diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index b2d57a3ee8..1459f66c00 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1236,14 +1236,6 @@ static void ept_memory_type_changed(struct p2m_domain *p2m) ept_sync_domain(p2m); } -static void __ept_sync_domain(void *info) -{ - /* - * The invalidation will be done before VMENTER (see - * vmx_vmenter_helper()). - */ -} - static void ept_sync_domain_prepare(struct p2m_domain *p2m) { struct domain *d = p2m->domain; @@ -1269,7 +1261,8 @@ static void ept_sync_domain_prepare(struct p2m_domain *p2m) static void ept_sync_domain_mask(struct p2m_domain *p2m, const cpumask_t *mask) { - on_selected_cpus(mask, __ept_sync_domain, p2m, 1); + /* Invalidation will be done in vmx_vmenter_helper(). */ + on_selected_cpus(mask, NULL, NULL, 1); } void ept_sync_domain(struct p2m_domain *p2m) diff --git a/xen/common/smp.c b/xen/common/smp.c index 79f4ebd145..781bcf2c24 100644 --- a/xen/common/smp.c +++ b/xen/common/smp.c @@ -87,7 +87,11 @@ void smp_call_function_interrupt(void) irq_enter(); - if ( call_data.wait ) + if ( unlikely(!func) ) + { + cpumask_clear_cpu(cpu, &call_data.selected); + } + else if ( call_data.wait ) { (*func)(info); smp_mb(); -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |