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
>

Reply via email to