On Thu, Feb 27, 2020 at 10:50:45AM +1100, Stephen Rothwell wrote: > Hi all, > > On Fri, 21 Feb 2020 13:17:07 -0800 Arjun Roy <arjunroy.kdev@xxxxxxxxx> wrote: > > > > From: Arjun Roy <arjunroy@xxxxxxxxxx> > > > > pte_index() on platforms other than sparc return a numerical index. > > On sparc, it returns a pte_t*. This presents an issue for > > vm_insert_pages(), which relies on pte_index() to find the offset for > > a pte within a pmd, for batched inserts. > > > > This patch: > > 1. Modifies pte_index() for sparc to return a numerical index, like > > other platforms, > > 2. Defines pte_entry() for sparc which returns a pte_t* > > (as pte_index() used to), > > 3. Converts existing sparc callers for pte_index() to use pte_entry(). > > > > Signed-off-by: Arjun Roy <arjunroy@xxxxxxxxxx> > > > > --- > > arch/sparc/include/asm/pgtable_64.h | 11 ++++++----- > > 1 file changed, 6 insertions(+), 5 deletions(-) > > > > diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h > > index 65494c3a420e..851ed0f99159 100644 > > --- a/arch/sparc/include/asm/pgtable_64.h > > +++ b/arch/sparc/include/asm/pgtable_64.h > > @@ -907,11 +907,12 @@ static inline unsigned long pud_pfn(pud_t pud) > > (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))) > > > > /* Find an entry in the third-level page table.. */ > > -#define pte_index(dir, address) \ > > - ((pte_t *) __pmd_page(*(dir)) + \ > > - ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) > > -#define pte_offset_kernel pte_index > > -#define pte_offset_map pte_index > > +#define pte_index(address) \ > > + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) > > +#define pte_entry(dir, address) \ > > + ((pte_t *) __pmd_page(*(dir)) + pte_index(address)) > > +#define pte_offset_kernel pte_entry > > +#define pte_offset_map pte_entry > > #define pte_unmap(pte) do { } while (0) > > > > /* We cannot include <linux/mm_types.h> at this point yet: */ > > -- > > 2.25.0.265.gbab2e86ba0-goog > > I have applied the following patch to the akpm tree today (just ahead > of "mm/memory.c: add vm_insert_pages()") - this includes my suggested > changes. > > From: Arjun Roy <arjunroy@xxxxxxxxxx> > Date: Fri, 21 Feb 2020 13:17:07 -0800 > Subject: [PATCH] mm: Bring sparc pte_index() semantics inline with other platforms. > > pte_index() on platforms other than sparc return a numerical index. > On sparc, it returns a pte_t*. This presents an issue for > vm_insert_pages(), which relies on pte_index() to find the offset for > a pte within a pmd, for batched inserts. > > This patch: > 1. Modifies pte_index() for sparc to return a numerical index, like > other platforms, > 2. Defines pte_entry() for sparc which returns a pte_t* > (as pte_index() used to), > 3. Converts existing sparc callers for pte_index() to use pte_entry(). > > sfr: removed pte_entry and just directly modified pte_offset_kernel instead > > Signed-off-by: Arjun Roy <arjunroy@xxxxxxxxxx> > Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> FWIW: Reviewed-by: Mike Rapoport <rppt@xxxxxxxxxxxxx> > --- > arch/sparc/include/asm/pgtable_64.h | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h > index 65494c3a420e..930ea3c12739 100644 > --- a/arch/sparc/include/asm/pgtable_64.h > +++ b/arch/sparc/include/asm/pgtable_64.h > @@ -907,11 +907,11 @@ static inline unsigned long pud_pfn(pud_t pud) > (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))) > > /* Find an entry in the third-level page table.. */ > -#define pte_index(dir, address) \ > - ((pte_t *) __pmd_page(*(dir)) + \ > - ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) > -#define pte_offset_kernel pte_index > -#define pte_offset_map pte_index > +#define pte_index(address) \ > + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) > +#define pte_offset_kernel(dir, address) \ > + ((pte_t *) __pmd_page(*(dir)) + pte_index(address)) > +#define pte_offset_map(dir, address) pte_offset_kernel((dir), (address)) > #define pte_unmap(pte) do { } while (0) > > /* We cannot include <linux/mm_types.h> at this point yet: */ > -- > 2.25.1 > > -- > Cheers, > Stephen Rothwell -- Sincerely yours, Mike.