[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 13/45] xen: arm64: dcache flush
This drops the "m" (*_p) asm contraint. I can't figure out what this was for. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- xen/include/asm-arm/arm32/page.h | 2 ++ xen/include/asm-arm/arm64/page.h | 2 ++ xen/include/asm-arm/page.h | 30 ++++++++++++++---------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/xen/include/asm-arm/arm32/page.h b/xen/include/asm-arm/arm32/page.h index edf324c..dfbf4b0 100644 --- a/xen/include/asm-arm/arm32/page.h +++ b/xen/include/asm-arm/arm32/page.h @@ -23,6 +23,8 @@ static inline void write_pte(lpae_t *p, lpae_t pte) : : "r" (pte.bits), "r" (p) : "memory"); } +#define __flush_xen_dcache_one(va) WRITE_CP32((uint32_t) va, DCCMVAC) + #endif /* __ASSEMBLY__ */ #endif /* __ARM_ARM32_PAGE_H__ */ diff --git a/xen/include/asm-arm/arm64/page.h b/xen/include/asm-arm/arm64/page.h index 6053bc2..7b297b5 100644 --- a/xen/include/asm-arm/arm64/page.h +++ b/xen/include/asm-arm/arm64/page.h @@ -18,6 +18,8 @@ static inline void write_pte(lpae_t *p, lpae_t pte) : : "r" (pte.bits), "r" (p) : "memory"); } +#define __flush_xen_dcache_one(va) asm volatile ("dc cvac, %0;" : : "r" (va)) + #endif /* __ASSEMBLY__ */ #endif /* __ARM_ARM64_PAGE_H__ */ diff --git a/xen/include/asm-arm/page.h b/xen/include/asm-arm/page.h index f1a2fe2..3b6b0f9 100644 --- a/xen/include/asm-arm/page.h +++ b/xen/include/asm-arm/page.h @@ -230,6 +230,14 @@ static inline lpae_t mfn_to_p2m_entry(unsigned long mfn, unsigned int mattr) return e; } +#if defined(CONFIG_ARM_32) +# include <asm/arm32/page.h> +#elif defined(CONFIG_ARM_64) +# include <asm/arm64/page.h> +#else +# error "unknown ARM variant" +#endif + /* Architectural minimum cacheline size is 4 32-bit words. */ #define MIN_CACHELINE_BYTES 16 /* Actual cacheline size on the boot CPU. */ @@ -243,7 +251,7 @@ static inline void flush_xen_dcache_va_range(void *p, unsigned long size) void *end; dsb(); /* So the CPU issues all writes to the range */ for ( end = p + size; p < end; p += cacheline_bytes ) - WRITE_CP32((uint32_t) p, DCCMVAC); + __flush_xen_dcache_one(p); dsb(); /* So we know the flushes happen before continuing */ } @@ -254,15 +262,13 @@ static inline void flush_xen_dcache_va_range(void *p, unsigned long size) typeof(x) *_p = &(x); \ if ( sizeof(x) > MIN_CACHELINE_BYTES || sizeof(x) > alignof(x) ) \ flush_xen_dcache_va_range(_p, sizeof(x)); \ - else \ - asm volatile ( \ - "dsb;" /* Finish all earlier writes */ \ - STORE_CP32(0, DCCMVAC) \ - "dsb;" /* Finish flush before continuing */ \ - : : "r" (_p), "m" (*_p)); \ + else { \ + dsb(); /* Finish all earlier writes */ \ + __flush_xen_dcache_one(_p); \ + dsb(); /* Finish flush before continuing */ \ + } \ } while (0) - /* * Flush all hypervisor mappings from the TLB and branch predictor. * This is needed after changing Xen code mappings. @@ -385,14 +391,6 @@ static inline int gva_to_ipa(uint32_t va, paddr_t *paddr) #endif /* __ASSEMBLY__ */ -#if defined(CONFIG_ARM_32) -# include <asm/arm32/page.h> -#elif defined(CONFIG_ARM_64) -# include <asm/arm64/page.h> -#else -# error "unknown ARM variant" -#endif - /* These numbers add up to a 39-bit input address space. The ARMv7-A * architecture actually specifies a 40-bit input address space for the p2m, * with an 8K (1024-entry) top-level table. */ -- 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |