On Fri, Oct 9, 2026 at 10:36 AM Hao Ge <[email protected]> wrote: > > __pcpu_map_pages() clears the PTEs it installed when it fails, so > pcpu_map_pages() only has to tear down the CPUs it mapped before > the failing one. > > Signed-off-by: Hao Ge <[email protected]>
Reviewed-by: Suren Baghdasaryan <[email protected]> > --- > mm/percpu-vm.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c > index 509d8901835c..59d3a336a6bd 100644 > --- a/mm/percpu-vm.c > +++ b/mm/percpu-vm.c > @@ -252,10 +252,11 @@ static int pcpu_map_pages(struct pcpu_chunk *chunk, > struct page **pages, > return 0; > err: > for_each_possible_cpu(tcpu) { > - __pcpu_unmap_pages(pcpu_chunk_addr(chunk, tcpu, page_start), > - page_end - page_start); > + /* The failing CPU's partial mapping undoes itself */ > if (tcpu == cpu) > break; > + __pcpu_unmap_pages(pcpu_chunk_addr(chunk, tcpu, page_start), > + page_end - page_start); > } > pcpu_post_unmap_tlb_flush(chunk, page_start, page_end); > return err; > -- > 2.25.1 >
