Messages in this thread | | | Subject | Re: [PATCH] x86/vmemmap: Handle unpopulated sub-pmd ranges | From | David Hildenbrand <> | Date | Wed, 27 Jan 2021 12:29:27 +0100 |
| |
On 27.01.21 12:23, Oscar Salvador wrote: > When the size of a struct page is not multiple of 2MB, sections do > not span a PMD anymore and so when populating them some parts of the > PMD will remain unused. > Because of this, PMDs will be left behind when depopulating sections > since remove_pmd_table() thinks that those unused parts are still in > use. > > Fix this by marking the unused parts with PAGE_INUSE, so memchr_inv() will > do the right thing and will let us free the PMD when the last user of it > is gone. > > This patch is based on a similar patch by David Hildenbrand: > > https://lore.kernel.org/linux-mm/20200722094558.9828-9-david@redhat.com/ > https://lore.kernel.org/linux-mm/20200722094558.9828-10-david@redhat.com/ > > Signed-off-by: Oscar Salvador <osalvador@suse.de> > --- > arch/x86/mm/init_64.c | 81 +++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 74 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index b5a3fa4033d3..9b6d45ea353b 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -873,6 +873,71 @@ int arch_add_memory(int nid, u64 start, u64 size, > > #define PAGE_INUSE 0xFD
Note that I called it "PAGE_UNUSED", using "PAGE_INUSE" might make it a little harder to digest.
-- Thanks,
David / dhildenb
| |