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 3AD32CF31B9 for ; Wed, 2 Oct 2024 20:03:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 996956B0517; Wed, 2 Oct 2024 16:03:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 946C96B0518; Wed, 2 Oct 2024 16:03:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7E6B16B0519; Wed, 2 Oct 2024 16:03:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 50A746B0517 for ; Wed, 2 Oct 2024 16:03:12 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AE22740B7F for ; Wed, 2 Oct 2024 20:03:11 +0000 (UTC) X-FDA: 82629736182.04.22BC2E3 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf16.hostedemail.com (Postfix) with ESMTP id D9A2C180007 for ; Wed, 2 Oct 2024 20:03:09 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=noH7H5gB; spf=pass (imf16.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727899261; 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=QiRp+YwmdyiMme5vt1vRR+VBvbe+ehGGnDWss9t/xgA=; b=1LINwfj0A0SkL9oldCEPWVPTbjCtiw35PV7l+4PJNFwldw0o+lcJZfAxzi8+g/P1Nao4wX bCCs5bFxUpDbF5sw8dwO2Yv48c4lsEyhgx99YPeMcWHKZM0BtM1ok+voWnG5mXMSVwXVf/ yiJXqqRRSU7d4f4LphDLDsRk9Ok7Snc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727899261; a=rsa-sha256; cv=none; b=qY1kPh5rXUdC4nmWuvMw7dOuC7hXAYKoTH9fgqBURrNcbN15KDvupT/y0oqArczckdffVM 2lt3pLolM6Ut6WAPUgF6nieiBmAUE2wTr0Gu9xHvbcnZ1e0S+DRORsrrP/j2yXoKG4T4Ge jr9gMnv8guPpeHCclyWISoehZzul9dw= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=noH7H5gB; spf=pass (imf16.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-208cf673b8dso1247295ad.3 for ; Wed, 02 Oct 2024 13:03:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727899388; x=1728504188; 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=QiRp+YwmdyiMme5vt1vRR+VBvbe+ehGGnDWss9t/xgA=; b=noH7H5gB0t4Nc+qNtA8faqORxS8F4DRB/CoI0+FmtSHhTpEHObycUdeG4GACrnjDLF cYt5RmcCBhP63x+KAcAOSwpP7jX8G1PR7BoxnQ6jybpp/jDh+4FZRjmtc+Cus5eP/mMc 521SokU4hDjfxUmWyvKb4CdCkeT8o2T2dWGeE0Pez86QXAQ+jMPxQwl3ZZF5LYULTUZF ypt6PQJdkc5XdKzrJcpUJHJqQHiBohs9/kcZ3hdnBKkU8952gJe2QauwTTV61WHiydoH MXEx7xwBRdQvvZfHqaI7bmRvz6WKoe5Tmm50CZppRp6tnPbN43TWkSP6WhmyUTCTDEQZ E5xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727899388; x=1728504188; 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=QiRp+YwmdyiMme5vt1vRR+VBvbe+ehGGnDWss9t/xgA=; b=JVy7U+LDf3tYTc0DJIuNzqwoyFcFFjXYRsAtxs+3f9M4KYUavbCkEO0IkpHKBOCyc0 gn+1k99IcFTmkdQV1G0GOkTUJV3ZoO+kURmN+v3iDnrrko/wTh8/N8RZSXcvtBZ6X/xI C688/eve7mxO8+2MY942nFoPWIKX6tM87ujjwl5ZhOB+n32M6jsW4hCZ/9xBu6zdQfo3 3wIkWcmwrgjFoTxsmldz6K1z1wwya36Wf/srke+pKs7Uhfbci4UxxZ4Szv2p9FvFm0Nn NxXdRlBt3vFWZE8+xqAiU4W5kr25Zbky2wgRZDzJET3fhehAbHMjT6DWQgwLCQ25F8ow JETQ== X-Forwarded-Encrypted: i=1; AJvYcCUnebuhbIc3fPlZ1FDYsNxVDlJWR4nqHopVj7mXBvF9SgiE1sOl1YzMBsKD4rjxqjZuRnsrDYdmig==@kvack.org X-Gm-Message-State: AOJu0Ywn54gpxcppsCYBYmUxx9Haup+j+EvRrGoJB0VQEPlOnKFe4asN K+P0G/AnhPcKNwz6zDl7w9FrTwk2XIefmsGmObOngGOgw0YVJBgJoaPtJ4UfvlhiFN+lamqUB3x UwfUihlrmotGtEqvSVw2I/9kiMmg= X-Google-Smtp-Source: AGHT+IEg4DbjqfRXka9aAkfSEmR+s0GKyrJw/htMlsm0Ur8gSdFunyN8Ro8pAlFUZqeVBvUpKSRHiFXvpXPYiqGxEcE= X-Received: by 2002:a17:902:f70a:b0:20b:c1e4:2d77 with SMTP id d9443c01a7336-20bc5a94ec2mr72842175ad.38.1727899388225; Wed, 02 Oct 2024 13:03:08 -0700 (PDT) MIME-Version: 1.0 References: <20241001225207.2215639-1-andrii@kernel.org> <20241001225207.2215639-6-andrii@kernel.org> <20241002072522.GB27552@redhat.com> In-Reply-To: <20241002072522.GB27552@redhat.com> From: Andrii Nakryiko Date: Wed, 2 Oct 2024 13:02:56 -0700 Message-ID: Subject: Re: [PATCH v2 tip/perf/core 5/5] uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution To: Oleg Nesterov Cc: Andrii Nakryiko , linux-trace-kernel@vger.kernel.org, peterz@infradead.org, rostedt@goodmis.org, mhiramat@kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, jolsa@kernel.org, paulmck@kernel.org, willy@infradead.org, surenb@google.com, akpm@linux-foundation.org, linux-mm@kvack.org, mjguzik@gmail.com, brauner@kernel.org, jannh@google.com, mhocko@kernel.org, vbabka@suse.cz, mingo@kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: et8yjbqpsgxbyckz71zy9urjdh6prahu X-Rspamd-Queue-Id: D9A2C180007 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1727899389-658144 X-HE-Meta: U2FsdGVkX19H1uohVHGQhJaVLgHvA2dG9Fk0ftDETQpBTHkc5BxAKdg4dPAPUmJ7VF4hcS1/XS0pTbyxutuiwXELhTdtHDpgxKEFSUwbM3SsWcza0UL8Ot3/y0iWTWfqy3y5iLmiVlDDZn9HABvvmyXldFJwxRNlxwUg6hkqomyC7Lh6gWX3v+Z+gg698/jSZs6hRQThzpK699SDNGaLASoeeElNeQvNaataTOFgrbRo2N89NJWjz6f3sZ/7WrJ5qwTyqiJWMkGmduaEtjyczIhIREMX9S682cIcoP5oV48iEE146MW2+jKAKcO9LvxLdp6Q6/bULPNWT4FpwyUiaUl2P3H9Y+kSKcIudt6pkayotKjaoBE+RPecgpAd910f2OgBC9xkIGa7w32ik7zBLn9TJZaD61BySlVV054T8SFCfUtvnrWhuoJBTrKySkSY3EUv+HULv0vXA0WejJtJiO/7yutpfxcnQp23OPxKUlHd81KUJF1rCi8EVOoV/6tyd2zZIyycCOMxcE8ihe9KbLT2mcWikfSRkGzOkp+s1QYz+bSpzMGyMt+KQdt0cTSpukDfnaQsJw4C7wMzbwW2XHdyxoXFryHMnHqAmrwrheupVxQh7vJ2+cx+3QBKpZi/GHimjzB4qg+JOwD9RDMzcttGBM6i/5JEIbvFHVBCtBfVxtbFBDPmhxAMDP67Rc2qcIebmRxyu3a2UNeS8cLX5rJ03j/L+U6YaQjulP49Ywr1xaxgqNm9etZF3UxlStsbddiyjo7Ljk1CHoj9g71ke1vYY6oNff9+rc11vxk3i+Jh1MN6y5mqhSfxi/sGk3E40MWw6bkazd4sikPavvbXgzoYeok64NEUFp3xS7xSkUmYVsNuWS/UV8Ky83kBHzmC2OlKHqg8mcz5/GXWmtjPVcpd1Pn+fr6eqmoj7YNNj6+h7dMP2l/nafjEIfEV5SyWK//CX/54Lbj5hTiBfBJ SCOB1pJa 9zKX21S/opjhPTymm06rSB75wfKdkeBAbo5PCsnDPgYBR4WLnb2DTOUvg2blCbklqF7cPKWvqzwVZXNttleTRsE/o2HeOEbVt0DnXYJJPYBIUMrDsU2egwh1d0U0IBn77bLOXHRDZNTbY8G+qQ/YWTOxH5u9s7LVe2qHePIrhhw9NtTzYE77pFlAQo5LheOozrY0Vgl8vLxl1SSjqsSm4U5w8IBgmLdM6aj9GwzuL/rn4z9qXVKgNFovfaQXjLE8nBtFiawHv8tBGhOpCSyJ4J3CUrF3R5NRwKRpPKLTokvZCSl05f5ZXRYD4VBVwhqKEXajbCxtfz24oxLanRzzcdaHUJPzqn2nhOc/enz9fW5l4w55HOIR/jklXDQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000038, 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 Wed, Oct 2, 2024 at 12:25=E2=80=AFAM Oleg Nesterov wro= te: > > On 10/01, Andrii Nakryiko wrote: > > > > +static struct uprobe *find_active_uprobe_speculative(unsigned long bp_= vaddr) > > +{ > > + struct mm_struct *mm =3D current->mm; > > + struct uprobe *uprobe =3D NULL; > > + struct vm_area_struct *vma; > > + struct file *vm_file; > > + loff_t offset; > > + long seq; > > + > > + guard(rcu)(); > > + > > + if (!mmap_lock_speculation_start(mm, &seq)) > > + return NULL; > > + > > + vma =3D vma_lookup(mm, bp_vaddr); > > + if (!vma) > > + return NULL; > > + > > + /* vm_file memory can be reused for another instance of struct fi= le, > > + * but can't be freed from under us, so it's safe to read fields = from > > + * it, even if the values are some garbage values; ultimately > > + * find_uprobe_rcu() + mmap_lock_speculation_end() check will ens= ure > > + * that whatever we speculatively found is correct > > + */ > > + vm_file =3D READ_ONCE(vma->vm_file); > > + if (!vm_file) > > + return NULL; > > + > > + offset =3D (loff_t)(vma->vm_pgoff << PAGE_SHIFT) + (bp_vaddr - vm= a->vm_start); > > LGTM. But perhaps vma->vm_pgoff and vma->vm_start need READ_ONCE() as wel= l, > if nothing else to shut up KCSAN if this code races with, say, __split_vm= a() ? We keep going back and forth between reading directly, using READ_ONCE(), and annotating with data_race(). I don't think it matters in terms of correctness or performance, so I'm happy to add whatever incantations that will make everyone satisfied. Let's see what others think, and I'll incorporate that into the next revision. > > > + uprobe =3D find_uprobe_rcu(vm_file->f_inode, offset); > > OK, I guess vm_file->f_inode is fine without READ_ONCE... > > Oleg. >