Commit 71ce1ab5 authored by Kinsey Ho's avatar Kinsey Ho Committed by Andrew Morton
Browse files

mm/mglru: add CONFIG_ARCH_HAS_HW_PTE_YOUNG

Patch series "mm/mglru: Kconfig cleanup", v4.

This series is the result of the following discussion:
https://lore.kernel.org/47066176-bd93-55dd-c2fa-002299d9e034@linux.ibm.com/

It mainly avoids building the code that walks page tables on CPUs that
use it, i.e., those don't support hardware accessed bit. Specifically,
it introduces a new Kconfig to guard some of functions added by
commit bd74fdae ("mm: multi-gen LRU: support page table walks")
on CPUs like POWER9, on which the series was tested.


This patch (of 5):

Some architectures are able to set the accessed bit in PTEs when PTEs
are used as part of linear address translations.

Add CONFIG_ARCH_HAS_HW_PTE_YOUNG for such architectures to be able to
override arch_has_hw_pte_young().

Link: https://lkml.kernel.org/r/20231227141205.2200125-1-kinseyho@google.com
Link: https://lkml.kernel.org/r/20231227141205.2200125-2-kinseyho@google.com


Signed-off-by: default avatarKinsey Ho <kinseyho@google.com>
Co-developed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Tested-by: default avatarDonet Tom <donettom@linux.vnet.ibm.com>
Acked-by: default avatarYu Zhao <yuzhao@google.com>
Cc: kernel test robot <lkp@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 9c593869
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1470,6 +1470,14 @@ config DYNAMIC_SIGFRAME
config HAVE_ARCH_NODE_DEV_GROUP
	bool

config ARCH_HAS_HW_PTE_YOUNG
	bool
	help
	  Architectures that select this option are capable of setting the
	  accessed bit in PTE entries when using them as part of linear address
	  translations. Architectures that require runtime check should select
	  this option and override arch_has_hw_pte_young().

config ARCH_HAS_NONLEAF_PMD_YOUNG
	bool
	help
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ config ARM64
	select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
	select ARCH_HAS_PTE_DEVMAP
	select ARCH_HAS_PTE_SPECIAL
	select ARCH_HAS_HW_PTE_YOUNG
	select ARCH_HAS_SETUP_DMA_OPS
	select ARCH_HAS_SET_DIRECT_MAP
	select ARCH_HAS_SET_MEMORY
+1 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ config X86
	select ARCH_HAS_PMEM_API		if X86_64
	select ARCH_HAS_PTE_DEVMAP		if X86_64
	select ARCH_HAS_PTE_SPECIAL
	select ARCH_HAS_HW_PTE_YOUNG
	select ARCH_HAS_NONLEAF_PMD_YOUNG	if PGTABLE_LEVELS > 2
	select ARCH_HAS_UACCESS_FLUSHCACHE	if X86_64
	select ARCH_HAS_COPY_MC			if X86_64
+0 −6
Original line number Diff line number Diff line
@@ -1679,12 +1679,6 @@ static inline bool arch_has_pfn_modify_check(void)
	return boot_cpu_has_bug(X86_BUG_L1TF);
}

#define arch_has_hw_pte_young arch_has_hw_pte_young
static inline bool arch_has_hw_pte_young(void)
{
	return true;
}

#define arch_check_zapped_pte arch_check_zapped_pte
void arch_check_zapped_pte(struct vm_area_struct *vma, pte_t pte);

+1 −1
Original line number Diff line number Diff line
@@ -375,7 +375,7 @@ static inline bool arch_has_hw_nonleaf_pmd_young(void)
 */
static inline bool arch_has_hw_pte_young(void)
{
	return false;
	return IS_ENABLED(CONFIG_ARCH_HAS_HW_PTE_YOUNG);
}
#endif