asm-generic/mm: stub out p{4,u}d_clear_bad() if __PAGETABLE_P{4,U}D_FOLDED
This came up when removing __ARCH_HAS_5LEVEL_HACK for ARC as code bloat. With this patch we see the following code reduction. | bloat-o-meter2 vmlinux-D-elide-p4d_free_tlb vmlinux-E-elide-p?d_clear_bad | add/remove: 0/2 grow/shrink: 0/0 up/down: 0/-40 (-40) | function old new delta | pud_clear_bad 20 - -20 | p4d_clear_bad 20 - -20 | Total: Before=4136930, After=4136890, chg -1.000000% Link: http://lkml.kernel.org/r/20191016162400.14796-6-vgupta@synopsys.com Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Will Deacon <will@kernel.org> Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com> Cc: Nick Piggin <npiggin@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3d14f1110a
commit
f2400abc78
|
@ -558,8 +558,19 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||||
* Do the tests inline, but report and clear the bad entry in mm/memory.c.
|
* Do the tests inline, but report and clear the bad entry in mm/memory.c.
|
||||||
*/
|
*/
|
||||||
void pgd_clear_bad(pgd_t *);
|
void pgd_clear_bad(pgd_t *);
|
||||||
|
|
||||||
|
#ifndef __PAGETABLE_P4D_FOLDED
|
||||||
void p4d_clear_bad(p4d_t *);
|
void p4d_clear_bad(p4d_t *);
|
||||||
|
#else
|
||||||
|
#define p4d_clear_bad(p4d) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PAGETABLE_PUD_FOLDED
|
||||||
void pud_clear_bad(pud_t *);
|
void pud_clear_bad(pud_t *);
|
||||||
|
#else
|
||||||
|
#define pud_clear_bad(p4d) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
void pmd_clear_bad(pmd_t *);
|
void pmd_clear_bad(pmd_t *);
|
||||||
|
|
||||||
static inline int pgd_none_or_clear_bad(pgd_t *pgd)
|
static inline int pgd_none_or_clear_bad(pgd_t *pgd)
|
||||||
|
|
|
@ -24,18 +24,27 @@ void pgd_clear_bad(pgd_t *pgd)
|
||||||
pgd_clear(pgd);
|
pgd_clear(pgd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __PAGETABLE_P4D_FOLDED
|
||||||
void p4d_clear_bad(p4d_t *p4d)
|
void p4d_clear_bad(p4d_t *p4d)
|
||||||
{
|
{
|
||||||
p4d_ERROR(*p4d);
|
p4d_ERROR(*p4d);
|
||||||
p4d_clear(p4d);
|
p4d_clear(p4d);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PAGETABLE_PUD_FOLDED
|
||||||
void pud_clear_bad(pud_t *pud)
|
void pud_clear_bad(pud_t *pud)
|
||||||
{
|
{
|
||||||
pud_ERROR(*pud);
|
pud_ERROR(*pud);
|
||||||
pud_clear(pud);
|
pud_clear(pud);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that the pmd variant below can't be stub'ed out just as for p4d/pud
|
||||||
|
* above. pmd folding is special and typically pmd_* macros refer to upper
|
||||||
|
* level even when folded
|
||||||
|
*/
|
||||||
void pmd_clear_bad(pmd_t *pmd)
|
void pmd_clear_bad(pmd_t *pmd)
|
||||||
{
|
{
|
||||||
pmd_ERROR(*pmd);
|
pmd_ERROR(*pmd);
|
||||||
|
|
Loading…
Reference in New Issue