[PATCH 1/2] powerpc/lib: Implement PMEM API
Christophe LEROY
christophe.leroy at c-s.fr
Thu Oct 19 22:13:32 AEDT 2017
Le 19/10/2017 à 09:13, Oliver O'Halloran a écrit :
> Implement the architecture specific cache maintence functions that make
> up the "PMEM API". Currently the writeback and invalidate functions
> are the same since the function of the DCBST (data cache block store)
> instruction is typically interpreted as "writeback to the point of
> coherency" rather than to memory. As a result implementing the API
> requires a full cache flush rather than just a cache write back. This
> will probably change in the not-too-distant future.
>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
> arch/powerpc/Kconfig | 1 +
> arch/powerpc/lib/Makefile | 2 +-
> arch/powerpc/lib/pmem.c | 34 ++++++++++++++++++++++++++++++++++
> 3 files changed, 36 insertions(+), 1 deletion(-)
> create mode 100644 arch/powerpc/lib/pmem.c
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index 809c468edab1..0996add8a572 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -138,6 +138,7 @@ config PPC
> select ARCH_HAS_ELF_RANDOMIZE
> select ARCH_HAS_FORTIFY_SOURCE
> select ARCH_HAS_GCOV_PROFILE_ALL
> + select ARCH_HAS_PMEM_API if PPC64
Why restrict that to PPC64 ?
> select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE
> select ARCH_HAS_SG_CHAIN
> select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
> index 50d5bf954cff..7aa237d10546 100644
> --- a/arch/powerpc/lib/Makefile
> +++ b/arch/powerpc/lib/Makefile
> @@ -23,7 +23,7 @@ endif
>
> obj64-y += copypage_64.o copyuser_64.o mem_64.o hweight_64.o \
> copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \
> - memcpy_64.o memcmp_64.o
> + memcpy_64.o memcmp_64.o pmem.o
>
> obj64-$(CONFIG_SMP) += locks.o
> obj64-$(CONFIG_ALTIVEC) += vmx-helper.o
> diff --git a/arch/powerpc/lib/pmem.c b/arch/powerpc/lib/pmem.c
> new file mode 100644
> index 000000000000..0fa09262ca13
> --- /dev/null
> +++ b/arch/powerpc/lib/pmem.c
> @@ -0,0 +1,34 @@
> +/*
> + * Copyright(c) 2017 IBM Corporation. All rights reserved.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of version 2 of the GNU General Public License 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.
> + */
> +
> +#include <linux/string.h>
> +#include <linux/export.h>
> +
> +#include <asm/cacheflush.h>
> +
> +/*
> + * CONFIG_ARCH_HAS_PMEM_API symbols
> + */
> +void arch_wb_cache_pmem(void *addr, size_t size)
> +{
> + unsigned long start = (unsigned long) addr;
> + flush_inval_dcache_range(start, start + size);
That function seems to only exist in PPC64, however a quite similar one,
called flush_dcache_range() does the same on PPC32 (defined in
arch/powerpc/include/asm/cacheflush.h)
In the meantime, I see that PPC64 also has a function called
flush_dcache_range(), which does the same as PPC32 function
clean_dcache_range()
Maybe she should re-unify the names ?
Christophe
> +}
> +EXPORT_SYMBOL(arch_wb_cache_pmem);
> +
> +void arch_invalidate_pmem(void *addr, size_t size)
> +{
> + unsigned long start = (unsigned long) addr;
> + flush_inval_dcache_range(start, start + size);
> +}
> +EXPORT_SYMBOL(arch_invalidate_pmem);
>
More information about the Linuxppc-dev
mailing list