[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/genapic: patch indirect calls to direct ones
commit c7ea45bc8b1f638666d50ad3641541d60e5d2eb8 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri May 17 14:39:08 2019 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri May 17 14:39:08 2019 +0200 x86/genapic: patch indirect calls to direct ones For (I hope) obvious reasons only the ones used at runtime get converted. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/smp.c | 4 ++-- xen/include/asm-x86/mach-generic/mach_apic.h | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index b15d4f05df..e0292b9577 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -29,12 +29,12 @@ void send_IPI_mask(const cpumask_t *mask, int vector) { - genapic.send_IPI_mask(mask, vector); + alternative_vcall(genapic.send_IPI_mask, mask, vector); } void send_IPI_self(int vector) { - genapic.send_IPI_self(vector); + alternative_vcall(genapic.send_IPI_self, vector); } /* diff --git a/xen/include/asm-x86/mach-generic/mach_apic.h b/xen/include/asm-x86/mach-generic/mach_apic.h index 0984554d36..75f1e766b0 100644 --- a/xen/include/asm-x86/mach-generic/mach_apic.h +++ b/xen/include/asm-x86/mach-generic/mach_apic.h @@ -15,8 +15,18 @@ #define TARGET_CPUS ((const typeof(cpu_online_map) *)&cpu_online_map) #define init_apic_ldr (genapic.init_apic_ldr) #define clustered_apic_check (genapic.clustered_apic_check) -#define cpu_mask_to_apicid (genapic.cpu_mask_to_apicid) -#define vector_allocation_cpumask(cpu) (genapic.vector_allocation_cpumask(cpu)) +#define cpu_mask_to_apicid(mask) ({ \ + /* \ + * There are a number of places where the address of a local variable \ + * gets passed here. The use of ?: in alternative_call<N>() triggers an \ + * "address of ... is always true" warning in such a case with at least \ + * gcc 7 and 8. Hence the seemingly pointless local variable here. \ + */ \ + const cpumask_t *m_ = (mask); \ + alternative_call(genapic.cpu_mask_to_apicid, m_); \ +}) +#define vector_allocation_cpumask(cpu) \ + alternative_call(genapic.vector_allocation_cpumask, cpu) static inline void enable_apic_mode(void) { -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |