[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 15/17] xen: arm64: optimised clear_page
On 04/02/2014 05:23 PM, Ian Campbell wrote: > >>> +#ifdef CONFIG_ARM_32 >>> +#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) >>> +#else >>> +extern void clear_page(void *to); >>> +#endif >>> + >> >> I would prefer if you move the defined in arm{32,64}/page.h. > > Ack. Just resending this one: Thanks! > ------------<8------------------ > > > From f679cbc3a191c43aa303b4e74f241e8755430ba0 Mon Sep 17 00:00:00 2001 > From: Ian Campbell <ian.campbell@xxxxxxxxxx> > Date: Wed, 19 Mar 2014 17:19:56 +0000 > Subject: [PATCH] xen: arm64: optimised clear_page > > Taken from Linux v3.14-rc7. > > The clear_page header now needs to be within the !__ASSEMBLY__ > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > Acked-by: Tim Deegan <tim@xxxxxxx> Acked-by: Julien Grall <julien.grall@xxxxxxxxxx> > --- > v3: Move prototypes to arm{32,64}/page.h > --- > xen/arch/arm/arm64/lib/Makefile | 1 + > xen/arch/arm/arm64/lib/clear_page.S | 36 > +++++++++++++++++++++++++++++++++++ > xen/include/asm-arm/arm32/page.h | 2 ++ > xen/include/asm-arm/arm64/page.h | 2 ++ > xen/include/asm-arm/page.h | 2 -- > 5 files changed, 41 insertions(+), 2 deletions(-) > create mode 100644 xen/arch/arm/arm64/lib/clear_page.S > > diff --git a/xen/arch/arm/arm64/lib/Makefile b/xen/arch/arm/arm64/lib/Makefile > index 9f3b236..b895afa 100644 > --- a/xen/arch/arm/arm64/lib/Makefile > +++ b/xen/arch/arm/arm64/lib/Makefile > @@ -1,3 +1,4 @@ > obj-y += memcpy.o memmove.o memset.o memchr.o > +obj-y += clear_page.o > obj-y += bitops.o find_next_bit.o > obj-y += strchr.o strrchr.o > diff --git a/xen/arch/arm/arm64/lib/clear_page.S > b/xen/arch/arm/arm64/lib/clear_page.S > new file mode 100644 > index 0000000..8d5cadb > --- /dev/null > +++ b/xen/arch/arm/arm64/lib/clear_page.S > @@ -0,0 +1,36 @@ > +/* > + * Copyright (C) 2012 ARM Ltd. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <xen/config.h> > + > +/* > + * Clear page @dest > + * > + * Parameters: > + * x0 - dest > + */ > +ENTRY(clear_page) > + mrs x1, dczid_el0 > + and w1, w1, #0xf > + mov x2, #4 > + lsl x1, x2, x1 > + > +1: dc zva, x0 > + add x0, x0, x1 > + tst x0, #(PAGE_SIZE - 1) > + b.ne 1b > + ret > +ENDPROC(clear_page) > diff --git a/xen/include/asm-arm/arm32/page.h > b/xen/include/asm-arm/arm32/page.h > index 191a108..a4c1a1a 100644 > --- a/xen/include/asm-arm/arm32/page.h > +++ b/xen/include/asm-arm/arm32/page.h > @@ -111,6 +111,8 @@ static inline uint64_t gva_to_ipa_par(vaddr_t va) > return par; > } > > +#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) > + > #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 20b4c5a..91e1914 100644 > --- a/xen/include/asm-arm/arm64/page.h > +++ b/xen/include/asm-arm/arm64/page.h > @@ -105,6 +105,8 @@ static inline uint64_t gva_to_ipa_par(vaddr_t va) > return par; > } > > +extern void clear_page(void *to); > + > #endif /* __ASSEMBLY__ */ > > #endif /* __ARM_ARM64_PAGE_H__ */ > diff --git a/xen/include/asm-arm/page.h b/xen/include/asm-arm/page.h > index d18ec2a..c77ba85 100644 > --- a/xen/include/asm-arm/page.h > +++ b/xen/include/asm-arm/page.h > @@ -382,8 +382,6 @@ static inline int gva_to_ipa(vaddr_t va, paddr_t *paddr) > #define third_table_offset(va) TABLE_OFFSET(third_linear_offset(va)) > #define zeroeth_table_offset(va) TABLE_OFFSET(zeroeth_linear_offset(va)) > > -#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) > - > #define PAGE_ALIGN(x) (((x) + PAGE_SIZE - 1) & PAGE_MASK) > > #endif /* __ARM_PAGE_H__ */ > -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |