continue;
WARN_ON(!pmd_present(pmd));
--------- --- if (pmd_sect(pmd)) {
+++++++++ +++ if (pmd_leaf(pmd)) {
pmd_clear(pmdp);
-------- ----
-------- ---- /*
-------- ---- * One TLBI should be sufficient here as the PMD_SIZE
-------- ---- * range is mapped with a single block entry.
-------- ---- */
-------- ---- flush_tlb_kernel_range(addr, addr + PAGE_SIZE);
-------- ---- if (free_mapped)
++++++++ ++++ if (free_mapped) {
++++++++ ++++ /* CONT blocks are not supported in the vmemmap */
++++++++ ++++ WARN_ON(pmd_cont(pmd));
++++++++ ++++ flush_tlb_kernel_range(addr, addr + PMD_SIZE);
free_hotplug_page_range(pmd_page(pmd),
PMD_SIZE, altmap);
++++++++ ++++ }
++++++++ ++++ /* unmap_hotplug_range() flushes TLB for !free_mapped */
continue;
}
WARN_ON(!pmd_table(pmd));
continue;
WARN_ON(!pud_present(pud));
--------- --- if (pud_sect(pud)) {
+++++++++ +++ if (pud_leaf(pud)) {
pud_clear(pudp);
-------- ----
-------- ---- /*
-------- ---- * One TLBI should be sufficient here as the PUD_SIZE
-------- ---- * range is mapped with a single block entry.
-------- ---- */
-------- ---- flush_tlb_kernel_range(addr, addr + PAGE_SIZE);
-------- ---- if (free_mapped)
++++++++ ++++ if (free_mapped) {
++++++++ ++++ flush_tlb_kernel_range(addr, addr + PUD_SIZE);
free_hotplug_page_range(pud_page(pud),
PUD_SIZE, altmap);
++++++++ ++++ }
++++++++ ++++ /* unmap_hotplug_range() flushes TLB for !free_mapped */
continue;
}
WARN_ON(!pud_table(pud));