| Message ID | 20260811042119.3652929-4-anshuman.khandual@arm.com |
|---|---|
| State | New |
| Headers | show |
| Series | mm: Drop pxd_ERROR() | expand |
On 8/11/26 06:21, Anshuman Khandual wrote: > Directly use pr_err() in set_pte_phys() and drop pte_ERROR() which helps in > eventually dropping pte_ERROR() macro across the tree. In this new printing > __FILE__ and __LINE__ has been dropped because they are always the same and > don't really add any value. > > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > Cc: Rich Felker <dalias@libc.org> > Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> > Cc: linux-sh@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > --- > arch/sh/include/asm/pgtable_32.h | 5 ----- > arch/sh/mm/init.c | 11 ++++++++++- > 2 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h > index 5f51af18997b..c8eb9a7a4c4c 100644 > --- a/arch/sh/include/asm/pgtable_32.h > +++ b/arch/sh/include/asm/pgtable_32.h > @@ -401,14 +401,9 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) > #define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) > > #ifdef CONFIG_X2TLB > -#define pte_ERROR(e) \ > - printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \ > - &(e), (e).pte_high, (e).pte_low) > #define pgd_ERROR(e) \ > printk("%s:%d: bad pgd %016llx.\n", __FILE__, __LINE__, pgd_val(e)) > #else > -#define pte_ERROR(e) \ > - printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) > #define pgd_ERROR(e) \ > printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) > #endif > diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c > index 110308bdef01..b3c7fd84ceb4 100644 > --- a/arch/sh/mm/init.c > +++ b/arch/sh/mm/init.c > @@ -78,13 +78,22 @@ static pte_t *__get_pte_phys(unsigned long addr) > return pte_offset_kernel(pmd, addr); > } > > +static void print_bad_pte(pte_t pte) > +{ > +#ifdef CONFIG_X2TLB > + printk("bad pte %p(%08lx%08lx).\n", &pte, pte.pte_high, pte.pte_low); > +#else > + printk("bad pte %08lx.\n", pte_val(pte)); > +#endif I'd avoid that helper if possible, so we don't encourage new users. Shouldn't we just switch to pr_err() right away? > +} > + > static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) > { > pte_t *pte; > > pte = __get_pte_phys(addr); > if (!pte_none(*pte)) { > - pte_ERROR(*pte); > + print_bad_pte(*pte); Maybe similar to my reply to patch #1, actually print something more useful than just "bad pte" ? And possibly also just use ptval_to_str().
On Wed, Aug 12, 2026 at 01:28:23PM +0200, David Hildenbrand (Arm) wrote: > On 8/11/26 06:21, Anshuman Khandual wrote: > > Directly use pr_err() in set_pte_phys() and drop pte_ERROR() which helps in > > eventually dropping pte_ERROR() macro across the tree. In this new printing > > __FILE__ and __LINE__ has been dropped because they are always the same and > > don't really add any value. > > > > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > > Cc: Rich Felker <dalias@libc.org> > > Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> > > Cc: linux-sh@vger.kernel.org > > Cc: linux-kernel@vger.kernel.org > > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > > --- > > arch/sh/include/asm/pgtable_32.h | 5 ----- > > arch/sh/mm/init.c | 11 ++++++++++- > > 2 files changed, 10 insertions(+), 6 deletions(-) > > > > diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h > > index 5f51af18997b..c8eb9a7a4c4c 100644 > > --- a/arch/sh/include/asm/pgtable_32.h > > +++ b/arch/sh/include/asm/pgtable_32.h > > @@ -401,14 +401,9 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) > > #define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) > > > > #ifdef CONFIG_X2TLB > > -#define pte_ERROR(e) \ > > - printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \ > > - &(e), (e).pte_high, (e).pte_low) > > #define pgd_ERROR(e) \ > > printk("%s:%d: bad pgd %016llx.\n", __FILE__, __LINE__, pgd_val(e)) > > #else > > -#define pte_ERROR(e) \ > > - printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) > > #define pgd_ERROR(e) \ > > printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) > > #endif > > diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c > > index 110308bdef01..b3c7fd84ceb4 100644 > > --- a/arch/sh/mm/init.c > > +++ b/arch/sh/mm/init.c > > @@ -78,13 +78,22 @@ static pte_t *__get_pte_phys(unsigned long addr) > > return pte_offset_kernel(pmd, addr); > > } > > > > +static void print_bad_pte(pte_t pte) > > +{ > > +#ifdef CONFIG_X2TLB > > + printk("bad pte %p(%08lx%08lx).\n", &pte, pte.pte_high, pte.pte_low); > > +#else > > + printk("bad pte %08lx.\n", pte_val(pte)); > > +#endif > > I'd avoid that helper if possible, so we don't encourage new users. > > Shouldn't we just switch to pr_err() right away? Yes we could move from printk() to pr_err(). The above helper just prevented an ugly #ifdef block inside if(!pte_none(*pte)) conditional block, nothing more. Will just drop it then. > > > +} > > + > > static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) > > { > > pte_t *pte; > > > > pte = __get_pte_phys(addr); > > if (!pte_none(*pte)) { > > - pte_ERROR(*pte); > > + print_bad_pte(*pte); > > Maybe similar to my reply to patch #1, actually print something more useful than > just "bad pte" ? And possibly also just use ptval_to_str(). Probably #ifdef could be dropped here as ptval_to_str() should be able to handle pte with two unsiged long elements in there i.e pte_high, pte_low along with standard single unsiged long pte_low format. #ifdef CONFIG_X2TLB typedef struct { unsigned long pte_low, pte_high; } pte_t; #define pte_val(x) \ ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) #define __pte(x) \ ({ pte_t __pte = {(x), ((unsigned long long)(x)) >> 32}; __pte; }) #else typedef struct { unsigned long pte_low; } pte_t; #define pte_val(x) ((x).pte_low) #define __pte(x) ((pte_t) { (x) } ) #endif static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) { pte_t *pte; pte = __get_pte_phys(addr); if (!pte_none(*pte)) { char str[PTVAL_STR_MAX]; ptval_to_str(str, pte_val(*pte)); pr_err("unexpected set PTE at %lx in set_pte_phys: bad pte %p(%s).\n", addr, pte, str); return; } set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot)); local_flush_tlb_one(get_asid(), addr); if (pgprot_val(prot) & _PAGE_WIRED) tlb_wire_entry(NULL, addr, *pte); } But if this does not work revert back printing both pte formats separately like before. #ifdef CONFIG_X2TLB pr_err("unexpected set PTE at %lx in set_pte_phys: bad pte %p(%08lx%08lx).\n", addr, pte, pte->pte_high, pte->pte_low); #else char str[PTVAL_STR_MAX]; ptval_to_str(str, pte_val(*pte)); pr_err("unexpected set PTE at %lx in set_pte_phys: bad pte %s.\n", addr, str); #endif > > -- > Cheers, > > David
>>> +} >>> + >>> static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) >>> { >>> pte_t *pte; >>> >>> pte = __get_pte_phys(addr); >>> if (!pte_none(*pte)) { >>> - pte_ERROR(*pte); >>> + print_bad_pte(*pte); >> >> Maybe similar to my reply to patch #1, actually print something more useful than >> just "bad pte" ? And possibly also just use ptval_to_str(). > > Probably #ifdef could be dropped here as ptval_to_str() should be able to > handle pte with two unsiged long elements in there i.e pte_high, pte_low > along with standard single unsiged long pte_low format. Yes, that should just work and clean this up!
diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 5f51af18997b..c8eb9a7a4c4c 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -401,14 +401,9 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) #define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) #ifdef CONFIG_X2TLB -#define pte_ERROR(e) \ - printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \ - &(e), (e).pte_high, (e).pte_low) #define pgd_ERROR(e) \ printk("%s:%d: bad pgd %016llx.\n", __FILE__, __LINE__, pgd_val(e)) #else -#define pte_ERROR(e) \ - printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) #define pgd_ERROR(e) \ printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) #endif diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 110308bdef01..b3c7fd84ceb4 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -78,13 +78,22 @@ static pte_t *__get_pte_phys(unsigned long addr) return pte_offset_kernel(pmd, addr); } +static void print_bad_pte(pte_t pte) +{ +#ifdef CONFIG_X2TLB + printk("bad pte %p(%08lx%08lx).\n", &pte, pte.pte_high, pte.pte_low); +#else + printk("bad pte %08lx.\n", pte_val(pte)); +#endif +} + static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) { pte_t *pte; pte = __get_pte_phys(addr); if (!pte_none(*pte)) { - pte_ERROR(*pte); + print_bad_pte(*pte); return; }
Directly use pr_err() in set_pte_phys() and drop pte_ERROR() which helps in eventually dropping pte_ERROR() macro across the tree. In this new printing __FILE__ and __LINE__ has been dropped because they are always the same and don't really add any value. Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Cc: linux-sh@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/sh/include/asm/pgtable_32.h | 5 ----- arch/sh/mm/init.c | 11 ++++++++++- 2 files changed, 10 insertions(+), 6 deletions(-)