From 5a2251a56d46d734e0fa2526dabc2b4624d9f4e0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 6 Feb 2020 09:47:48 +1100 Subject: [PATCH] Explicit casts between enum types in IPI Depending on the platform, IPI has a slightly different interface. Explicitly cast from the more speific enum type to the generic and vice versa when calling in and out of generic code. Another possibility would be to typedef a specific enum on RISCV platforms that aliases the one currently used. Then casting would only have to take place when passing args to function calls. --- include/arch/x86/arch/32/mode/smp/ipi.h | 6 +++--- include/arch/x86/arch/64/mode/smp/ipi.h | 4 ++-- src/arch/arm/smp/ipi.c | 4 ++-- src/arch/x86/smp/ipi.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/arch/x86/arch/32/mode/smp/ipi.h b/include/arch/x86/arch/32/mode/smp/ipi.h index 45e818e72..c78ef842e 100644 --- a/include/arch/x86/arch/32/mode/smp/ipi.h +++ b/include/arch/x86/arch/32/mode/smp/ipi.h @@ -29,17 +29,17 @@ typedef enum { static void inline doRemoteInvalidateTLBEntry(vptr_t vptr, word_t mask) { - doRemoteMaskOp1Arg(IpiRemoteCall_InvalidateTLBEntry, vptr, mask); + doRemoteMaskOp1Arg((IpiRemoteCall_t)IpiRemoteCall_InvalidateTLBEntry, vptr, mask); } static void inline doRemoteInvalidatePageStructureCache(word_t mask) { - doRemoteMaskOp0Arg(IpiRemoteCall_InvalidatePageStructureCache, mask); + doRemoteMaskOp0Arg((IpiRemoteCall_t)IpiRemoteCall_InvalidatePageStructureCache, mask); } static void inline doRemoteInvalidateTLB(word_t mask) { - doRemoteMaskOp0Arg(IpiRemoteCall_InvalidateTLB, mask); + doRemoteMaskOp0Arg((IpiRemoteCall_t)IpiRemoteCall_InvalidateTLB, mask); } void Mode_handleRemoteCall(IpiModeRemoteCall_t call, word_t arg0, word_t arg1, word_t arg2); diff --git a/include/arch/x86/arch/64/mode/smp/ipi.h b/include/arch/x86/arch/64/mode/smp/ipi.h index 6903410ee..33979f9fc 100644 --- a/include/arch/x86/arch/64/mode/smp/ipi.h +++ b/include/arch/x86/arch/64/mode/smp/ipi.h @@ -30,12 +30,12 @@ void Mode_handleRemoteCall(IpiModeRemoteCall_t call, word_t arg0, word_t arg1, w static inline void doRemoteInvalidatePCID(word_t type, void *vaddr, asid_t asid, word_t mask) { - doRemoteMaskOp3Arg(IpiRemoteCall_InvalidatePCID, type, (word_t)vaddr, asid, mask); + doRemoteMaskOp3Arg((IpiRemoteCall_t)IpiRemoteCall_InvalidatePCID, type, (word_t)vaddr, asid, mask); } static inline void doRemoteInvalidateASID(vspace_root_t *vspace, asid_t asid, word_t mask) { - doRemoteMaskOp2Arg(IpiRemoteCall_InvalidateASID, (word_t)vspace, asid, mask); + doRemoteMaskOp2Arg((IpiRemoteCall_t)IpiRemoteCall_InvalidateASID, (word_t)vspace, asid, mask); } #endif /* ENABLE_SMP_SUPPORT */ diff --git a/src/arch/arm/smp/ipi.c b/src/arch/arm/smp/ipi.c index 843aaf9bd..1f17b8776 100644 --- a/src/arch/arm/smp/ipi.c +++ b/src/arch/arm/smp/ipi.c @@ -19,11 +19,11 @@ static IpiModeRemoteCall_t remoteCall; /* the remote call being requested */ -static inline void init_ipi_args(IpiModeRemoteCall_t func, +static inline void init_ipi_args(IpiRemoteCall_t func, word_t data1, word_t data2, word_t data3, word_t mask) { - remoteCall = func; + remoteCall = (IpiModeRemoteCall_t)func; ipi_args[0] = data1; ipi_args[1] = data2; ipi_args[2] = data3; diff --git a/src/arch/x86/smp/ipi.c b/src/arch/x86/smp/ipi.c index 7e1b32bd8..fb23c131f 100644 --- a/src/arch/x86/smp/ipi.c +++ b/src/arch/x86/smp/ipi.c @@ -19,11 +19,11 @@ static IpiModeRemoteCall_t remoteCall; /* the remote call being requested */ -static inline void init_ipi_args(IpiModeRemoteCall_t func, +static inline void init_ipi_args(IpiRemoteCall_t func, word_t data1, word_t data2, word_t data3, word_t mask) { - remoteCall = func; + remoteCall = (IpiModeRemoteCall_t)func; ipi_args[0] = data1; ipi_args[1] = data2; ipi_args[2] = data3;