lkml.org 
[lkml]   [2018]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [tip:x86/mm] x86/mm/tlb: Leave lazy TLB mode at page table free time
    On 2018-07-17 13:46, Peter Zijlstra wrote:
    > On Tue, Jul 17, 2018 at 02:34:07AM -0700, tip-bot for Rik van Riel wrote:
    > > diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h
    > > index 3063125197ad..e811ef7b8350 100644
    > > --- a/include/asm-generic/tlb.h
    > > +++ b/include/asm-generic/tlb.h
    > > @@ -303,4 +303,14 @@ static inline void tlb_remove_check_page_size_change(struct mmu_gather *tlb,
    > >
    > > #define tlb_migrate_finish(mm) do {} while (0)
    > >
    > > +/*
    > > + * Used to flush the TLB when page tables are removed, when lazy
    > > + * TLB mode may cause a CPU to retain intermediate translations
    > > + * pointing to about-to-be-freed page table memory.
    > > + */
    > > +#ifndef HAVE_TLB_FLUSH_REMOVE_TABLES
    > > +#define tlb_flush_remove_tables(mm) do {} while (0)
    > > +#define tlb_flush_remove_tables_local(mm) do {} while (0)
    > > +#endif
    >
    > Is there a reason these are not inline functions, which gets us type
    > checking and the like?

    More to that, when building (linux-next tag: next-20180724) on arm 32
    there is this build error when CONFIG_MMU is enabled, asm-generic/tlb.h
    isn't included, see arch/arm/include/asm/tlb.h.

    CC mm/memory.o
    mm/memory.c: In function ‘tlb_remove_table_smp_sync’:
    mm/memory.c:339:2: error: implicit declaration of function ‘tlb_flush_remove_tables_local’; did you mean ‘tlb_remove_table’? [-Werror=implicit-function-declaration]
    tlb_flush_remove_tables_local(mm);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    tlb_remove_table
    mm/memory.c: In function ‘tlb_table_flush’:
    mm/memory.c:372:2: error: implicit declaration of function ‘tlb_flush_remove_tables’; did you mean ‘tlb_remove_table’? [-Werror=implicit-function-declaration]
    tlb_flush_remove_tables(tlb->mm);
    ^~~~~~~~~~~~~~~~~~~~~~~
    tlb_remove_table


    Alternative could be setting in every architecture's asm/tlb.h but that
    doesn't make much sense. Other way would be to include prototype in
    arch/arm/include/asm/tlb.h, not sure if that would be the best. Is
    there any other place this could be defined for fixing issue in arm 32
    bit ?


    Cheers,
    Anders

    \
     
     \ /
      Last update: 2018-07-25 03:33    [W:2.406 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site