Message ID | 20200812063358.369514-2-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/16] powerpc/mm: Add DEBUG_VM WARN for pmd_clear | expand |
Le 12/08/2020 à 08:33, Aneesh Kumar K.V a écrit : > ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting that bit in > random value. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > mm/debug_vm_pgtable.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index 086309fb9b6f..4c32063a8acf 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -45,9 +45,12 @@ > * pxx_clear() because of how dynamic page table folding works on s390. So > * while loading up the entries do not change the lower 4 bits. It does not > * have affect any other platform. > + * > + * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. > */ > #define S390_MASK_BITS 4 > -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, S390_MASK_BITS) > +#define PPC_MASK_BITS 2 > +#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) Do you mean: #define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, PPC_MASK_BITS | S390_MASK_BITS) Christophe > #define RANDOM_NZVALUE GENMASK(7, 0) > > static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) >
On 8/12/20 12:10 PM, Christophe Leroy wrote: > > > Le 12/08/2020 à 08:33, Aneesh Kumar K.V a écrit : >> ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting >> that bit in >> random value. >> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >> --- >> mm/debug_vm_pgtable.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >> index 086309fb9b6f..4c32063a8acf 100644 >> --- a/mm/debug_vm_pgtable.c >> +++ b/mm/debug_vm_pgtable.c >> @@ -45,9 +45,12 @@ >> * pxx_clear() because of how dynamic page table folding works on >> s390. So >> * while loading up the entries do not change the lower 4 bits. It >> does not >> * have affect any other platform. >> + * >> + * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. >> */ >> #define S390_MASK_BITS 4 >> -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, S390_MASK_BITS) >> +#define PPC_MASK_BITS 2 >> +#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, >> S390_MASK_BITS) > > Do you mean: > > #define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, PPC_MASK_BITS | > S390_MASK_BITS) IIUC GENMASK(hi, low) generate a mask from hi to low bits. Since i want to avoid bit 62, I am forcing it to generate bits from (61, 4) -aneesh
On 08/12/2020 12:03 PM, Aneesh Kumar K.V wrote: > ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting that bit in > random value. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > mm/debug_vm_pgtable.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index 086309fb9b6f..4c32063a8acf 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -45,9 +45,12 @@ > * pxx_clear() because of how dynamic page table folding works on s390. So > * while loading up the entries do not change the lower 4 bits. It does not > * have affect any other platform. > + * > + * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. > */ Please move and fold the above line with the existing paragraph. > #define S390_MASK_BITS 4 > -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, S390_MASK_BITS) > +#define PPC_MASK_BITS 2 s/PPC/PPC64/ > +#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) > #define RANDOM_NZVALUE GENMASK(7, 0) > > static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) > With this change, RANDOM_ORVALUE will be (0x3ffffffffffffff0) which discards both bit 63 and 62. If only bit 62 is to be avoided for ppc64 the mask should be (0xbffffffffffffff0) instead. The following change on this patch should do the trick. diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index eb059fef89c2..1499181fb0e9 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -45,13 +45,13 @@ * entry type. But these bits might affect the ability to clear entries with * pxx_clear() because of how dynamic page table folding works on s390. So * while loading up the entries do not change the lower 4 bits. It does not - * have affect any other platform. - * - * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. + * have affect any other platform. Also avoid the 62nd bit on ppc64 that is + * used to mark a pte entry. */ -#define S390_MASK_BITS 4 -#define PPC_MASK_BITS 2 -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) +#define S390_SKIP_MASK GENMASK(3, 0) +#define PPC64_SKIP_MASK GENMASK(62, 62) +#define ARCH_SKIP_MASK (S390_SKIP_MASK | PPC64_SKIP_MASK) +#define RANDOM_ORVALUE (GENMASK(BITS_PER_LONG - 1, 0) & ~ARCH_SKIP_MASK) #define RANDOM_NZVALUE GENMASK(7, 0) static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot)
On 8/12/20 1:42 PM, Anshuman Khandual wrote: > > > On 08/12/2020 12:03 PM, Aneesh Kumar K.V wrote: >> ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting that bit in >> random value. >> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >> --- >> mm/debug_vm_pgtable.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >> index 086309fb9b6f..4c32063a8acf 100644 >> --- a/mm/debug_vm_pgtable.c >> +++ b/mm/debug_vm_pgtable.c >> @@ -45,9 +45,12 @@ >> * pxx_clear() because of how dynamic page table folding works on s390. So >> * while loading up the entries do not change the lower 4 bits. It does not >> * have affect any other platform. >> + * >> + * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. >> */ > > Please move and fold the above line with the existing paragraph. > >> #define S390_MASK_BITS 4 >> -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, S390_MASK_BITS) >> +#define PPC_MASK_BITS 2 > > s/PPC/PPC64/ > >> +#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) >> #define RANDOM_NZVALUE GENMASK(7, 0) >> >> static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) >> > > With this change, RANDOM_ORVALUE will be (0x3ffffffffffffff0) which discards > both bit 63 and 62. If only bit 62 is to be avoided for ppc64 the mask should > be (0xbffffffffffffff0) instead. The following change on this patch should do > the trick. > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index eb059fef89c2..1499181fb0e9 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -45,13 +45,13 @@ > * entry type. But these bits might affect the ability to clear entries with > * pxx_clear() because of how dynamic page table folding works on s390. So > * while loading up the entries do not change the lower 4 bits. It does not > - * have affect any other platform. > - * > - * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. > + * have affect any other platform. Also avoid the 62nd bit on ppc64 that is > + * used to mark a pte entry. > */ > -#define S390_MASK_BITS 4 > -#define PPC_MASK_BITS 2 > -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) > +#define S390_SKIP_MASK GENMASK(3, 0) > +#define PPC64_SKIP_MASK GENMASK(62, 62) > +#define ARCH_SKIP_MASK (S390_SKIP_MASK | PPC64_SKIP_MASK) > +#define RANDOM_ORVALUE (GENMASK(BITS_PER_LONG - 1, 0) & ~ARCH_SKIP_MASK) > #define RANDOM_NZVALUE GENMASK(7, 0) > > static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) > I will switch to this. -aneesh
diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index 086309fb9b6f..4c32063a8acf 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -45,9 +45,12 @@ * pxx_clear() because of how dynamic page table folding works on s390. So * while loading up the entries do not change the lower 4 bits. It does not * have affect any other platform. + * + * Also avoid the 62nd bit on ppc64 that is used to mark a pte entry. */ #define S390_MASK_BITS 4 -#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1, S390_MASK_BITS) +#define PPC_MASK_BITS 2 +#define RANDOM_ORVALUE GENMASK(BITS_PER_LONG - 1 - PPC_MASK_BITS, S390_MASK_BITS) #define RANDOM_NZVALUE GENMASK(7, 0) static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot)
ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting that bit in random value. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- mm/debug_vm_pgtable.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)