From: Mike Rapoport rppt@linux.ibm.com Subject: sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init()
The kbuild test robot reported the following warning:
arch/sparc/mm/srmmu.c: In function 'srmmu_nocache_init':
arch/sparc/mm/srmmu.c:300:9: error: variable 'pud' set but not used [-Werror=unused-but-set-variable]
300 | pud_t *pud;
This warning is caused by misprint in the page table traversal in srmmu_nocache_init() function which accessed a PMD entry using PGD rather than PUD.
Since sparc32 has only 3 page table levels, the PGD and PUD are essentially the same and usage of __nocache_fix() removed the type checking.
Use PUD for the consistency and to silence the compiler warning.
Link: http://lkml.kernel.org/r/20200520132005.GM1059226@linux.ibm.com Fixes: 7235db268a2777bc38 ("sparc32: use pgtable-nopud instead of 4level-fixup") Signed-off-by: Mike Rapoport rppt@linux.ibm.com Reported-by: kbuild test robot lkp@intel.com Cc: David S. Miller davem@davemloft.net Cc: Anatoly Pugachev matorola@gmail.com Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton akpm@linux-foundation.org ---
arch/sparc/mm/srmmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/sparc/mm/srmmu.c~sparc32-use-pud-rather-than-pgd-to-get-pmd-in-srmmu_nocache_init +++ a/arch/sparc/mm/srmmu.c @@ -333,7 +333,7 @@ static void __init srmmu_nocache_init(vo pgd = pgd_offset_k(vaddr); p4d = p4d_offset(__nocache_fix(pgd), vaddr); pud = pud_offset(__nocache_fix(p4d), vaddr); - pmd = pmd_offset(__nocache_fix(pgd), vaddr); + pmd = pmd_offset(__nocache_fix(pud), vaddr); pte = pte_offset_kernel(__nocache_fix(pmd), vaddr);
pteval = ((paddr >> 4) | SRMMU_ET_PTE | SRMMU_PRIV); _
On Fri, May 22, 2020 at 10:23:09PM -0700, Andrew Morton wrote:
From: Mike Rapoport rppt@linux.ibm.com Subject: sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init()
The kbuild test robot reported the following warning:
arch/sparc/mm/srmmu.c: In function 'srmmu_nocache_init':
arch/sparc/mm/srmmu.c:300:9: error: variable 'pud' set but not used [-Werror=unused-but-set-variable]
300 | pud_t *pud;
This warning is caused by misprint in the page table traversal in srmmu_nocache_init() function which accessed a PMD entry using PGD rather than PUD.
Since sparc32 has only 3 page table levels, the PGD and PUD are essentially the same and usage of __nocache_fix() removed the type checking.
Use PUD for the consistency and to silence the compiler warning.
Unfortunately, this fixes a compile warning but breaks the boot :(
Since pgd, p4d and pud are eesentially the same thing and pgd_offset() and p4d_offset() are no-ops, the __nocache_fix() should be done only at pud level.
The correcteted patch is below, boot tested with qemu-systems-sparc.
Link: http://lkml.kernel.org/r/20200520132005.GM1059226@linux.ibm.com Fixes: 7235db268a2777bc38 ("sparc32: use pgtable-nopud instead of 4level-fixup") Signed-off-by: Mike Rapoport rppt@linux.ibm.com Reported-by: kbuild test robot lkp@intel.com Cc: David S. Miller davem@davemloft.net Cc: Anatoly Pugachev matorola@gmail.com Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton akpm@linux-foundation.org
From 9b8b3214f7f079864dca0c6a7b684ab442eeb437 Mon Sep 17 00:00:00 2001
From: Mike Rapoport rppt@linux.ibm.com Date: Wed, 20 May 2020 15:39:22 +0300 Subject: [PATCH] sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init()
The kbuild test robot reported the following warning:
arch/sparc/mm/srmmu.c: In function 'srmmu_nocache_init':
arch/sparc/mm/srmmu.c:300:9: error: variable 'pud' set but not used [-Werror=unused-but-set-variable]
300 | pud_t *pud;
This warning is caused by misprint in the page table traversal in srmmu_nocache_init() function which accessed a PMD entry using PGD rather than PUD.
Since pgd, p4d and pud are eesentially the same thing and pgd_offset() and p4d_offset() are no-ops, the __nocache_fix() should be done only at pud level.
Remove __nocache_fix() for p4d_offset() and pud_offset() and use it only for PUD and lower levels.
Link: http://lkml.kernel.org/r/20200520132005.GM1059226@linux.ibm.com Fixes: 7235db268a2777bc38 ("sparc32: use pgtable-nopud instead of 4level-fixup") Signed-off-by: Mike Rapoport rppt@linux.ibm.com Reported-by: kbuild test robot lkp@intel.com Cc: David S. Miller davem@davemloft.net Cc: Anatoly Pugachev matorola@gmail.com Cc: stable@vger.kernel.org --- arch/sparc/mm/srmmu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 6cb1ea2d2b5c..3d9690d940a3 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -302,9 +302,9 @@ static void __init srmmu_nocache_init(void)
while (vaddr < srmmu_nocache_end) { pgd = pgd_offset_k(vaddr); - p4d = p4d_offset(__nocache_fix(pgd), vaddr); - pud = pud_offset(__nocache_fix(p4d), vaddr); - pmd = pmd_offset(__nocache_fix(pgd), vaddr); + p4d = p4d_offset(pgd, vaddr); + pud = pud_offset(p4d, vaddr); + pmd = pmd_offset(__nocache_fix(pud), vaddr); pte = pte_offset_kernel(__nocache_fix(pmd), vaddr);
pteval = ((paddr >> 4) | SRMMU_ET_PTE | SRMMU_PRIV);
On Sat, May 23, 2020 at 12:02 PM Mike Rapoport rppt@linux.ibm.com wrote:
Unfortunately, this fixes a compile warning but breaks the boot :(
Argh. I delayed applying/merging this overnight to see if there were any reports, but this came in after I'd already merged Andrew's patches and pushed them out.
So it's in my tree now as commit c2bc26f7ca1f ("sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init()")
The correcteted patch is below, boot tested with qemu-systems-sparc.
Mind sending a patch relative to the previous one that already got merged?
Also, would it perhaps be worth it to just make __nocache_fix() not throw the type away? IOW, make it do something like
#define __nocache_fix(VADDR) \ ((__typeof__(VADDR))__va(__nocache_pa(VADDR)))
or whatever? Wouldn't that show when those pgd/p4d/pud pointers get mis-used because they don't end up dropping the type info..
Linus
On Sat, May 23, 2020 at 12:10:27PM -0700, Linus Torvalds wrote:
On Sat, May 23, 2020 at 12:02 PM Mike Rapoport rppt@linux.ibm.com wrote:
Unfortunately, this fixes a compile warning but breaks the boot :(
Argh. I delayed applying/merging this overnight to see if there were any reports, but this came in after I'd already merged Andrew's patches and pushed them out.
Actually, it's really by chance I noticed it tonight, although still it was too late :)
So it's in my tree now as commit c2bc26f7ca1f ("sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init()")
The correcteted patch is below, boot tested with qemu-systems-sparc.
Mind sending a patch relative to the previous one that already got merged?
Sure.
Also, would it perhaps be worth it to just make __nocache_fix() not throw the type away? IOW, make it do something like
#define __nocache_fix(VADDR) \ ((__typeof__(VADDR))__va(__nocache_pa(VADDR)))
or whatever? Wouldn't that show when those pgd/p4d/pud pointers get mis-used because they don't end up dropping the type info..
Yes, I'll look into it.
Linus
linux-stable-mirror@lists.linaro.org