• Pavel Tatashin's avatar
    xen, mm: allow deferred page initialization for xen pv domains · 6f84f8d1
    Pavel Tatashin authored
    Juergen Gross noticed that commit f7f99100 ("mm: stop zeroing memory
    during allocation in vmemmap") broke XEN PV domains when deferred struct
    page initialization is enabled.
    
    This is because the xen's PagePinned() flag is getting erased from
    struct pages when they are initialized later in boot.
    
    Juergen fixed this problem by disabling deferred pages on xen pv
    domains.  It is desirable, however, to have this feature available as it
    reduces boot time.  This fix re-enables the feature for pv-dmains, and
    fixes the problem the following way:
    
    The fix is to delay setting PagePinned flag until struct pages for all
    allocated memory are initialized, i.e.  until after free_all_bootmem().
    
    A new x86_init.hyper op init_after_bootmem() is called to let xen know
    that boot allocator is done, and hence struct pages for all the
    allocated memory are now initialized.  If deferred page initialization
    is enabled, the rest of struct pages are going to be initialized later
    in boot once page_alloc_init_late() is called.
    
    xen_after_bootmem() walks page table's pages and marks them pinned.
    
    Link: http://lkml.kernel.org/r/20180226160112.24724-2-pasha.tatashin@oracle.comSigned-off-by: default avatarPavel Tatashin <pasha.tatashin@oracle.com>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Tested-by: default avatarJuergen Gross <jgross@suse.com>
    Cc: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
    Cc: Alok Kataria <akataria@vmware.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Laura Abbott <labbott@redhat.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Mathias Krause <minipli@googlemail.com>
    Cc: Jinbum Park <jinb.park7@gmail.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Jia Zhang <zhang.jia@linux.alibaba.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Stefano Stabellini <sstabellini@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6f84f8d1
init_32.c 25.2 KB