On 2017-03-18 13:20, Ralf Ramsauer wrote: > On 03/18/2017 10:05 AM, Jan Kiszka wrote: >> On 2017-03-16 23:17, Ralf Ramsauer wrote: >>> And use this chance to remove unneeded #ifdef ASSEMBLY guards. >>> >>> Signed-off-by: Ralf Ramsauer <[email protected]> >>> --- >>> inmates/lib/{arm64 => arm-common}/include/inmate.h | 17 +---- >>> inmates/lib/arm/include/arch/inmate.h | 26 +++++++ >>> inmates/lib/arm/include/inmate.h | 87 >>> ---------------------- >>> inmates/lib/arm64/include/arch/inmate.h | 25 +++++++ >>> 4 files changed, 52 insertions(+), 103 deletions(-) >>> rename inmates/lib/{arm64 => arm-common}/include/inmate.h (80%) >>> create mode 100644 inmates/lib/arm/include/arch/inmate.h >>> delete mode 100644 inmates/lib/arm/include/inmate.h >>> create mode 100644 inmates/lib/arm64/include/arch/inmate.h >>> >>> diff --git a/inmates/lib/arm64/include/inmate.h >>> b/inmates/lib/arm-common/include/inmate.h >>> similarity index 80% >>> rename from inmates/lib/arm64/include/inmate.h >>> rename to inmates/lib/arm-common/include/inmate.h >>> index 24e828a144..99ab37f0c6 100644 >>> --- a/inmates/lib/arm64/include/inmate.h >>> +++ b/inmates/lib/arm-common/include/inmate.h >>> @@ -13,7 +13,6 @@ >>> #ifndef _JAILHOUSE_INMATE_H >>> #define _JAILHOUSE_INMATE_H >>> >>> -#ifndef __ASSEMBLY__ >>> typedef signed char s8; >>> typedef unsigned char u8; >>> >>> @@ -56,20 +55,6 @@ static inline void cpu_relax(void) >>> asm volatile("" : : : "memory"); >>> } >>> >>> -/* >>> - * To ease the debugging, we can send a spurious hypercall, which should >>> return >>> - * -ENOSYS, but appear in the hypervisor stats for this cell. >>> - */ >>> -static inline void heartbeat(void) >>> -{ >>> - asm volatile ( >>> - "mov x0, %0\n" >>> - "hvc #0\n" >>> - : : "r" (0xbea7) : "x0"); >>> -} >>> - >>> -void __attribute__((used)) vector_irq(void); >>> - >>> typedef void (*irq_handler_t)(unsigned int); >>> void gic_setup(irq_handler_t handler); >>> void gic_enable_irq(unsigned int irq); >>> @@ -79,7 +64,7 @@ u64 timer_get_ticks(void); >>> u64 timer_ticks_to_ns(u64 ticks); >>> void timer_start(u64 timeout); >>> >>> -#endif /* !__ASSEMBLY__ */ >>> +#include <arch/inmate.h> >>> >>> #include "../inmate_common.h" >>> >>> diff --git a/inmates/lib/arm/include/arch/inmate.h >>> b/inmates/lib/arm/include/arch/inmate.h >>> new file mode 100644 >>> index 0000000000..5c2ee1a670 >>> --- /dev/null >>> +++ b/inmates/lib/arm/include/arch/inmate.h >>> @@ -0,0 +1,26 @@ >>> +/* >>> + * Jailhouse, a Linux-based partitioning hypervisor >>> + * >>> + * Copyright (c) ARM Limited, 2014 >>> + * >>> + * Authors: >>> + * Jean-Philippe Brucker <[email protected]> >>> + * >>> + * This work is licensed under the terms of the GNU GPL, version 2. See >>> + * the COPYING file in the top-level directory. >>> + */ >>> + >>> +/* >>> + * To ease the debugging, we can send a spurious hypercall, which should >>> return >>> + * -ENOSYS, but appear in the hypervisor stats for this cell. >>> + */ >>> +static inline void heartbeat(void) >>> +{ >>> + asm volatile ( >>> + ".arch_extension virt\n" >>> + "mov r0, %0\n" >>> + "hvc #0\n" >>> + : : "r" (0xbea7) : "r0"); >>> +} >>> + >>> +void __attribute__((interrupt("IRQ"))) __attribute__((used)) >>> vector_irq(void); >>> diff --git a/inmates/lib/arm/include/inmate.h >>> b/inmates/lib/arm/include/inmate.h >>> deleted file mode 100644 >>> index bbf93131b4..0000000000 >>> --- a/inmates/lib/arm/include/inmate.h >>> +++ /dev/null >>> @@ -1,87 +0,0 @@ >>> -/* >>> - * Jailhouse, a Linux-based partitioning hypervisor >>> - * >>> - * Copyright (c) ARM Limited, 2014 >>> - * >>> - * Authors: >>> - * Jean-Philippe Brucker <[email protected]> >>> - * >>> - * This work is licensed under the terms of the GNU GPL, version 2. See >>> - * the COPYING file in the top-level directory. >>> - */ >>> - >>> -#ifndef _JAILHOUSE_INMATE_H >>> -#define _JAILHOUSE_INMATE_H >>> - >>> -#ifndef __ASSEMBLY__ >>> -typedef signed char s8; >>> -typedef unsigned char u8; >>> - >>> -typedef signed short s16; >>> -typedef unsigned short u16; >>> - >>> -typedef signed int s32; >>> -typedef unsigned int u32; >>> - >>> -typedef signed long long s64; >>> -typedef unsigned long long u64; >>> - >>> -static inline u8 mmio_read8(void *address) >>> -{ >>> - return *(volatile u8 *)address; >>> -} >>> - >>> -static inline void mmio_write8(void *address, u8 value) >>> -{ >>> - *(volatile u8 *)address = value; >>> -} >>> - >>> -static inline void mmio_write16(void *address, u16 value) >>> -{ >>> - *(volatile u16 *)address = value; >>> -} >>> - >>> -static inline u32 mmio_read32(void *address) >>> -{ >>> - return *(volatile u32 *)address; >>> -} >>> - >>> -static inline void mmio_write32(void *address, u32 value) >>> -{ >>> - *(volatile u32 *)address = value; >>> -} >>> - >>> -static inline void cpu_relax(void) >>> -{ >>> - asm volatile("" : : : "memory"); >>> -} >>> - >>> -/* >>> - * To ease the debugging, we can send a spurious hypercall, which should >>> return >>> - * -ENOSYS, but appear in the hypervisor stats for this cell. >>> - */ >>> -static inline void heartbeat(void) >>> -{ >>> - asm volatile ( >>> - ".arch_extension virt\n" >>> - "mov r0, %0\n" >>> - "hvc #0\n" >>> - : : "r" (0xbea7) : "r0"); >>> -} >>> - >>> -void __attribute__((interrupt("IRQ"))) __attribute__((used)) >>> vector_irq(void); >>> - >>> -typedef void (*irq_handler_t)(unsigned int); >>> -void gic_setup(irq_handler_t handler); >>> -void gic_enable_irq(unsigned int irq); >>> - >>> -unsigned long timer_get_frequency(void); >>> -u64 timer_get_ticks(void); >>> -u64 timer_ticks_to_ns(u64 ticks); >>> -void timer_start(u64 timeout); >>> - >>> -#endif /* !__ASSEMBLY__ */ >>> - >>> -#include "../inmate_common.h" >>> - >>> -#endif /* !_JAILHOUSE_INMATE_H */ >>> diff --git a/inmates/lib/arm64/include/arch/inmate.h >>> b/inmates/lib/arm64/include/arch/inmate.h >>> new file mode 100644 >>> index 0000000000..cd9275ddf0 >>> --- /dev/null >>> +++ b/inmates/lib/arm64/include/arch/inmate.h >>> @@ -0,0 +1,25 @@ >>> +/* >>> + * Jailhouse, a Linux-based partitioning hypervisor >>> + * >>> + * Copyright (c) ARM Limited, 2014 >>> + * >>> + * Authors: >>> + * Jean-Philippe Brucker <[email protected]> >>> + * >>> + * This work is licensed under the terms of the GNU GPL, version 2. See >>> + * the COPYING file in the top-level directory. >>> + */ >>> + >>> +/* >>> + * To ease the debugging, we can send a spurious hypercall, which should >>> return >>> + * -ENOSYS, but appear in the hypervisor stats for this cell. >>> + */ >>> +static inline void heartbeat(void) >>> +{ >>> + asm volatile ( >>> + "mov x0, %0\n" >>> + "hvc #0\n" >>> + : : "r" (0xbea7) : "x0"); >>> +} >>> + >>> +void __attribute__((used)) vector_irq(void); >>> >> >> Can be done separately, but we still have the open topic of tagging >> vector_irq as interrupt on 64-bit. > Yes, that's true, but we can not simply tag it. That's probably the > reason why it's missing at the moment. >> >> At that chance, attributes should be combined: >> __attribute__((interrupt("IRQ), used)). > This doesn't work for GCC together with aarch64, they apparently don't > support this parameter. We will have to push away the context manually. >
OK. So I've folded the trivial __attribute__ consolidation into this patch and updated next. Jan -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
