From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 09C84C54E71 for ; Tue, 19 Mar 2024 20:49:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4751D6B007B; Tue, 19 Mar 2024 16:49:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 425A26B0082; Tue, 19 Mar 2024 16:49:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 313E46B0083; Tue, 19 Mar 2024 16:49:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 23F8C6B007B for ; Tue, 19 Mar 2024 16:49:59 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id AE4FDA0F8B for ; Tue, 19 Mar 2024 20:49:58 +0000 (UTC) X-FDA: 81914980476.14.BAC855E Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by imf09.hostedemail.com (Postfix) with ESMTP id C7774140013 for ; Tue, 19 Mar 2024 20:49:56 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=oRNGJkMF; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf09.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710881396; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=LzFE/m5DbU9WjZnNo3vc0p2nL06oMgUw35m0zyhzHBs=; b=hEuIbCXoazy87iYwl2IONRXLVDvM7zfybOY6DY2g1NKLHw8KrLsJxPE+fy/uIINIVmdSD2 CbuuRXSqJlHPuhTHmLHIHV/xHGvWJ1MLNp+EPNziZMMHck9NxZV0dCEc2eA3L7djNtdJrb uprCfcuKFsSUg7+j8HsIR1RS7kNs5s4= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=oRNGJkMF; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf09.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710881396; a=rsa-sha256; cv=none; b=UuM3Qq48tFDxftBW5rZD8xUMG0YVYBa4W5z1yfRwF/b0J3oHudOYMArgNp8HUYqoX2g7Z7 ZsFfABgMQuP2iT5wNxTLBtLELvm7uSBNs5TE2Y5kNqz2ot4QEpAtkIFZ/FLpzmMBzcBFTk HV2WrjBemLmq3rw6lZ+QunvRDQ3tVA0= Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-a3ddc13bbb3so49663266b.0 for ; Tue, 19 Mar 2024 13:49:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710881395; x=1711486195; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=LzFE/m5DbU9WjZnNo3vc0p2nL06oMgUw35m0zyhzHBs=; b=oRNGJkMFTpy0OjomREnY8P27Zz+ctfQJieJTAya+elNuqoGCs/98deScQhtzgYwilf AeFoh7tpeUOzMYi0PW6nuMz0XP03T7u6v8KqDVRQ82HXFZUucM4A2otcA6lcgmgqvrvU pLkS+Gjw4xF760NJqsJSUxpO6V4sZcsFSktA/yUhlylg8F+mj8Jh7Fe6Gp134gU5ka7a a6CM9QXco9IfKs1FMtOt4AOgkCPxFs3z7kgK/8G+Hf6j59II4H9louQufvWfIEjKU2IX 76IvHGVvVyzffKKqjcOJWdkpvDMvyy4C1Nt3XuAFS4/z+fNDCRBjGte/6kpvdonSdH5o RvxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710881395; x=1711486195; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LzFE/m5DbU9WjZnNo3vc0p2nL06oMgUw35m0zyhzHBs=; b=LuXoopebiv5MpgbL7SFpUNPfsx0Xk8WoMObHXsyC0uY06XPeqb/K2Dqqh9/BSJIn86 xwU72nxK135nEFi/VI1dSaxL2fPxgabOV56X0EA1OrrF01sO7nlwJasHJeMhu3a6hg2C 1njwOBnPNeqSCNlhrAZG1i9uazCz/GKe5t3G0Rz86lJpdGbpH1YEA/0V4R36VNrA6Yvc 2M83h4w+gJ31dZOV4tHPm/1yGFObK/gfWw/ylnq09rgx4pd5rjOIR5xbrofl6aXOswNr kZw5EnSG4gkmObvF8WOo4J9iqR+4ua/vxgApumV0MonNwF/4TIQMgQ7selxUshr0NT2G MTdA== X-Forwarded-Encrypted: i=1; AJvYcCWFWrx0lql/LidIM86v/CVimAw1D/9g39Dd8ANtnW78mv34APYvpm/3EsdTgxxc6WD3CUdj+nosvezGDNA4nkWpYKc= X-Gm-Message-State: AOJu0YyUta+VYOx54bGh3po1F5UB0Ed7pOXq30l/RiKyAq6D4lzYNq0K YdrCG+V3H+Po1AF6tfXJ02ZxCmXuvzpy2jD/aNShMeNRCHuWydcd25j4CN+Df+E6WYYiIxW1xmM x670yfuRXr3V0GxUw6VrZF5pcU9ZOyZ/u5tdM X-Google-Smtp-Source: AGHT+IGXWLGjCvtBBJPHB+AXDtlROX61sbxL8P5/tnul0XIuDk4mFOnYxI5vzoMwdg4uJMIF+QWddSjhyMAxLUf22Vc= X-Received: by 2002:a17:906:709:b0:a46:984f:4a65 with SMTP id y9-20020a170906070900b00a46984f4a65mr562316ejb.19.1710881395015; Tue, 19 Mar 2024 13:49:55 -0700 (PDT) MIME-Version: 1.0 References: <20240311194346.2291333-1-yosryahmed@google.com> In-Reply-To: From: Yosry Ahmed Date: Tue, 19 Mar 2024 13:49:17 -0700 Message-ID: Subject: Re: [PATCH] percpu: clean up all mappings when pcpu_map_pages() fails To: Dennis Zhou Cc: Tejun Heo , Christoph Lameter , Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Uladzislau Rezki , Christoph Hellwig , Lorenzo Stoakes Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: C7774140013 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: yochtjq5e3zjbh66cie6nw5zdcwd3rf5 X-HE-Tag: 1710881396-653366 X-HE-Meta: U2FsdGVkX18YSbpeZoIt3EcSFi9yPouBcfMtM8fwraWEHmOy50YMCrPYaqMDehtLArKKpZ42ThBsM60RJ8BvjH7+9vrdL2WPVrifBM9HJn97irEaPYg579PskqwqsHTNYDgRrtJuBe+7igpN+dBs7Vg9QAVDRy9gwZOOxxAAPVR2inDaxTtOr6jn47S15p2tR1X6WL5Mpa5iTYm6zLqPm/LeYA7RuJWtVujwRDKXxsI/9ao+vBwTXj62HdKAaezOYJMkkTffSxh78YqUcHzVdMCZhqVkSsZsvGzPi1xPJ7JqGTQ4RJ1Pp2VYjzlh3yaa3n9AfSENIK/ahBpv7BTgtaChencWW4X4SAJB90TejmCJ7FNlzuGfgXDyFLgyPF/xBnn6LHuQcdzptTAgn3DOR0Ugw19aPW8BVR3Ssa5QPBFuVvmNCJHRaVp3hseL8X/gzLi4bimvANiK900I+h8+21hD5JF2XvcGRkWpRenojT2KrB94gi7hEqFv3oTZPAiGgWHiYu2/Cufmn6UIHxj26RcVl55tVrMhlPkEcyT1OZrHrnyAt34vZwh9SjmkBQ909r6xgaYD4gi8EjiE4bcwnGVhXibmp/ypG9MEqH/TQLhnvRQZzHk2T4q9lgXEIsMxv3nIvcMHkXUP5VVswM7doo5/Y3KpnwDtYypGrEBHouU52HrXRA9shyJFanJrDW7ToqPKMmxvYwUzZ0e9wJIPSRq7iS/Hly5avg5wB2ow4rh2Wqcs5DDygiMT7T6600l7+t9xf9aqRRR4DStETCsT1Xi691FfNW/GOHU8SOWb1IC6XnIWrqrJJm7VaUt86xlPrO2vmTfe2hoDfAxlu28OcGtlzN9yrf9pKbCH89zVhmWkNvTxOru92BqP4xeTsqMb1ZV/drfEeoWnSX73bkphH9bQNy1oeqTiqiHihibblOrNtwJND2UcnlfvcbWKU7esfX/Jy2ZsyzQdQ2g2KTJ v+1J9aTY BxnsUSjsTwmawHts8UzidMM24N1CGt5NoWo5pOahSEOYjRqcJy3FMGpZRnZXZWXwTHWiaqtYnSODCWj0KmbT0EWv6PGCpppyCgPyKNFzgmyHi2wT9mySaNdWrnJsXgThcBZYAYFRjK9TEVNapoz7URSetdhAx7UUJXdSMUim9NhFDeyOr+AEa0rwXlIeEYQvX20QZdnsK/JZ7UEax4WFZCKIIAUn9IroY4yLkGSdmaFVw+UrNM6QR3yzcwF+Xor8ZdVkg624iy1qwFkAO8d5GbTCG2bLQzTE2Fen7ycazjKyJsCtrTixakNClpyBT+mCRR/QwPbASvLuOAtPcw3HyNZ7FOwr+KixWYX1u X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Mar 19, 2024 at 1:32=E2=80=AFPM Dennis Zhou wro= te: > > Hi Yosry, > > On Tue, Mar 19, 2024 at 01:08:26PM -0700, Yosry Ahmed wrote: > > On Mon, Mar 11, 2024 at 12:43=E2=80=AFPM Yosry Ahmed wrote: > > > > > > In pcpu_map_pages(), if __pcpu_map_pages() fails on a CPU, we call > > > __pcpu_unmap_pages() to clean up mappings on all CPUs where mappings > > > were created, but not on the CPU where __pcpu_map_pages() fails. > > > > > > __pcpu_map_pages() and __pcpu_unmap_pages() are wrappers around > > > vmap_pages_range_noflush() and vunmap_range_noflush(). All other call= ers > > > of vmap_pages_range_noflush() call vunmap_range_noflush() when mappin= g > > > fails, except pcpu_map_pages(). The reason could be that partial > > > mappings may be left behind from a failed mapping attempt. > > > > > > Call __pcpu_unmap_pages() for the failed CPU as well in > > > pcpu_map_pages(). > > > > > > This was found by code inspection, no failures or bugs were observed. > > > > > > Signed-off-by: Yosry Ahmed > > > > Any thoughts about this change? Should I resend next week after the > > merge window? > > > > Sorry for the delay. > > I'm looking at the code from mm/kmsan/hooks.c kmsan_ioremap_page_range(). > It seems like __vunmap_range_noflush() is called on error for > successfully mapped pages similar to how it's being done in percpu-vm.c. You picked an unconventional example to compare against :) > > I haven't read in depth the expectations of vmap_pages_range_noflush() > but on first glance it doesn't seem like percpu is operating out of the > ordinary? I was looking at vm_map_ram(), vmap(), and __vmalloc_area_node(). They all call vmap_pages_range()-> vmap_pages_range_noflush(). When vmap_pages_range() fails: - vm_map_ram() calls vm_unmap_ram()->free_unmap_vmap_area()->vunmap_range_noflush(). - vmap() calls vunmap()->remove_vm_area()->free_unmap_vmap_area()-> vunmap_range_noflush(). - __vmalloc_area_node() calls vfree()->remove_vm_area()->free_unmap_vmap_area()-> vunmap_range_noflush(). I think it is needed to clean up any leftover partial mappings. I am not sure about the kmsan example though. Adding vmalloc reviewers here as well here. > > Thanks, > Dennis > > > > --- > > > > > > Perhaps the reason __pcpu_unmap_pages() is not currently being called > > > for the failed CPU is that the size and alignment requirements make s= ure > > > we never leave any partial mappings behind? I have no idea. Nonethele= ss, > > > I think we want this change as that could be fragile, and is > > > inconsistent with other callers. > > > > > > --- > > > mm/percpu-vm.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c > > > index 2054c9213c433..cd69caf6aa8d8 100644 > > > --- a/mm/percpu-vm.c > > > +++ b/mm/percpu-vm.c > > > @@ -231,10 +231,10 @@ static int pcpu_map_pages(struct pcpu_chunk *ch= unk, > > > return 0; > > > err: > > > for_each_possible_cpu(tcpu) { > > > - if (tcpu =3D=3D cpu) > > > - break; > > > __pcpu_unmap_pages(pcpu_chunk_addr(chunk, tcpu, page_= start), > > > page_end - page_start); > > > + if (tcpu =3D=3D cpu) > > > + break; > > > } > > > pcpu_post_unmap_tlb_flush(chunk, page_start, page_end); > > > return err; > > > -- > > > 2.44.0.278.ge034bb2e1d-goog > > >