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 62934C5478C for ; Fri, 23 Feb 2024 14:04:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C676B6B0074; Fri, 23 Feb 2024 09:04:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C17466B0075; Fri, 23 Feb 2024 09:04:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ADF466B0078; Fri, 23 Feb 2024 09:04:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id A02F66B0074 for ; Fri, 23 Feb 2024 09:04:07 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 47E4D8122B for ; Fri, 23 Feb 2024 14:04:07 +0000 (UTC) X-FDA: 81823237734.22.3B402A6 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) by imf16.hostedemail.com (Postfix) with ESMTP id 45DCA18002F for ; Fri, 23 Feb 2024 14:04:04 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=F2CfTE+1; spf=pass (imf16.hostedemail.com: domain of dan.carpenter@linaro.org designates 209.85.167.41 as permitted sender) smtp.mailfrom=dan.carpenter@linaro.org; dmarc=pass (policy=none) header.from=linaro.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708697044; a=rsa-sha256; cv=none; b=wzl3QYizswqhcv9krd9vWUIOFGGAcL+hzo+oVnSn9ckLOipWv5WjENnyXNfprwwwB2Mxsu 5i7mbFbq7nTjeEFy5uXRdHaPPWzZb+m0MgLIL7g6IIBtz17D4De87TQvAD2Zp7OywBAVY8 /f2OEefVPzbejiEgcQL7Sk44NXNGOlI= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=F2CfTE+1; spf=pass (imf16.hostedemail.com: domain of dan.carpenter@linaro.org designates 209.85.167.41 as permitted sender) smtp.mailfrom=dan.carpenter@linaro.org; dmarc=pass (policy=none) header.from=linaro.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708697044; 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:in-reply-to: references:dkim-signature; bh=0UVcw4CHvp7SLDBxvSv3EenkmIwKi/AuMs/rkpzYsCk=; b=gN/y+cNJcVHeBgN+vewuGwdKAhiy4PHdySRHUY4ShtWM7nkwkLIkEXdy+vW0dlrv1DP8XZ AYMPWd4wtT4/owTVfRGEQOk51Wn6rfagTtU5TRpq+/YppCZuEu0Z7uh0cncKGGbQ8Nd0Cn j7tJ5z75MzZOfukTY+gAnUCAsbv9dCs= Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-512d19e2cb8so1256368e87.0 for ; Fri, 23 Feb 2024 06:04:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708697042; x=1709301842; darn=kvack.org; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=0UVcw4CHvp7SLDBxvSv3EenkmIwKi/AuMs/rkpzYsCk=; b=F2CfTE+18S7OQ1SFmPTMOy+6S2A+voA1BVOEZgRuiigL0IhpLanzTLoHoubQ6HJxqU De3wiYoulrMA8TN78eLdyJvjjI8gxFJ4bw+ReIQtFWaACaojdYEKnkatOAcfY3OLFB98 v8FBP92PSnSrR65/cHZK5AHL/CGNdid7FfkZDN97nNiOGKnY0aYJnLRS9LK8mT1jEheu AXtZz7DL8R6D8/53Y8PFZ81FBPDwg9qq3TSaR+8MeR2obwVag783ny1sYYCUQXL4EV7g 4ddQl4Ox1OadFZLY1+4A07r0IGeKiYUXXkH3Dy2YeC0JqEr4WWS3+vZ5pGQ4TtMwXZUX GnfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708697042; x=1709301842; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0UVcw4CHvp7SLDBxvSv3EenkmIwKi/AuMs/rkpzYsCk=; b=stEcwhDW9Oi6iF9pD/xmsaTYbfFk/vGOnO/pSSyW0IPW6qrdyWxxkHO2N7lDtOHp/x ekJlJcd/4pWSEFhnJwGrtTlsRNMMXG5ZW9wFGfDIKlpnF/JEFDtz7ku1Lx6nVYThGwh9 StrYUmdcjrJWtrPDgXmntcgzV30UEQdIEuhW9z7GWtrDMqQBbT68/X4JxnbAK8Oejxtg VOyagsKK+h6nTLbEzN/tIC5fSxF9tBM9nMl3Zgqd7xq23zcTV0UYP4F5e4g/AHKEN/70 b9es9ii/JVbU8fZR2PXe9Z4Zvfho9vgvKRcd4fsJk4/YoAp4dzWmarLG8jJcAUeszzvR mDdw== X-Gm-Message-State: AOJu0Yw/TxL3ZqbN3vBtn2hfyOgizUB9zWFLtsDAuAWz7QjCLHkLTGDt DT1uiAPBhDa4RLcN+3qIYq48bgdbfyaMPEGmw5tW+K/txU5XI4qrUuKEbkDrEPI= X-Google-Smtp-Source: AGHT+IHgcTzlQfTxxlvT9YQLFbWmIoIzF+NraltERRDt2TTW+R3qOPJfMu9vEPBG9MkKbezqaDMIzw== X-Received: by 2002:a05:6512:3e16:b0:512:ba3a:5368 with SMTP id i22-20020a0565123e1600b00512ba3a5368mr2025243lfv.48.1708697042327; Fri, 23 Feb 2024 06:04:02 -0800 (PST) Received: from localhost ([102.222.70.76]) by smtp.gmail.com with ESMTPSA id el14-20020a056402360e00b0055fba4996d9sm6452337edb.71.2024.02.23.06.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Feb 2024 06:04:01 -0800 (PST) Date: Fri, 23 Feb 2024 17:03:58 +0300 From: Dan Carpenter To: hughd@google.com Cc: linux-mm@kvack.org Subject: [bug report] mm/pgtable: add rcu_read_lock() and rcu_read_unlock()s Message-ID: <33509f8f-0407-4775-a83e-c81c5589fec6@moroto.mountain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 45DCA18002F X-Stat-Signature: ftf1kyfxahes7ti153o5bshgcyaukzp4 X-Rspam-User: X-HE-Tag: 1708697044-378622 X-HE-Meta: U2FsdGVkX18iLQJld/6kQYOAZPrQW9lO20lv/2ffjPEmzqc1yPNYdlGU2Cib19AgKwwNfJ6oRQW/XppL6lBvvSh/RJE2BtxcU2kGOYH/zvdRPd/CZu1vMtsy34bz0AJI3FTtRNQNm7AcUmukpIWH/sgvZqNYoNlI2+jwMtZE8vAhi+GeExdFKyXFM4zuBy90b9KAakysjQkmO4dpvNdlugOGl4+DfPk9iIw+/JfrTmSVxGkM1efi/derf1YAEQMlvOi24iBfgqtRRXEWG5CHmPTyl2tF/UIm9ZxSiVbq0681sEkW5KQWb09QpuS/JwivhBOsNKK/DzDQkSqho1kM6339H3HyWRmPVwRWa+4Gtmh4XC3GpO/GuEdPKrlhicar1IEj8hKSjyzj+E4sBGi2QTXoE3K7TjIL40rz4xdF82aI/tmFMEznWs0I53Jt4HnCvHZC4R3cKpuorm5+0uMkZnrqw9fGccZrlIeymbU/ZYOfoG93qW1yIC2xekrubWhVm2KDTytKf74shVgs15DVGLeSatqqfx8dCtdrxrXpPTEdsqo9fdx+PJtRGbAgELfx9JavFmD8g7jPhzs3LNgrOH5ckzbBNXTEQpSOdhrauSHyoyz1028R3V/OwI2UfH32rxzm7jO1REzpFvVsJUYTBIZZYJyDB5L7eTTzKDeoDFN7LwHhetSL3Sldcgib9J3hT0e0PdpUw46KCyQpRhptqJ6wkKXVw1PzXRU7Jk0PQPs2ClxeE5uGgsm2mqs9k+sd8t9g942y8Lqa7hEtvyzmOnIFpO4JC18qGrra8dqxeQA5cud39L28NHKICuIUCZEhhzEHiivPM5Myf4x49IZ1haY3Idm72WMXuoOt1RUtVgLM2dmvIxV3MFZxhVkggD+tfvHVKbyHEtlZIAz2/kvtnqscQKAro3RQcE0NC/iKWSy/IL1/bYQmUNTXpVtsuT8MMdElWxxBpdRynTN9MRd 2tTIejvi 3e2lJuyXS8rg9oErRjdljidNA1iIC+PiELPnCHnzSk7JmflnIU+oQTOawJi3v2j0BGipEhKtua9drbb8L/QJHv9yHnIZqjIyxiVbKfZUVsiBgAapGUpfQuo8c4vWNQCsbolLolzCnu0rzrRUTb+PARHf/I12QvE3BSZRJO7v5fERwiPTHV65k7aPjCP+wfEH+y/cNoDF40eukdxmO5xNT4NQrVMyxfchy52iyCfGEw1sAJn92LcFpQFaZpErclQ7YowdhDbP24uPcBLNGj4R75LEEbN+8ZAL4kTxPhmkLeVGIZI0Ish+9HNWAIhjGt/0ZmQyec+NqNTL+JNgnyOKeSwCm+V2/Zo38PruI X-Bogosity: Ham, tests=bogofilter, spamicity=0.000129, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: [ This kind of old and mm is above my pay grade... - dan ] Hello Hugh Dickins, The patch a349d72fd9ef: "mm/pgtable: add rcu_read_lock() and rcu_read_unlock()s" from Jul 11, 2023 (linux-next), leads to the following Smatch static checker warning: ./include/linux/rmap.h:116 put_anon_vma() warn: sleeping in atomic context ./include/linux/rmap.h 113 static inline void put_anon_vma(struct anon_vma *anon_vma) 114 { 115 if (atomic_dec_and_test(&anon_vma->refcount)) --> 116 __put_anon_vma(anon_vma); 117 } move_pages_pte() <- disables preempt -> folio_get_anon_vma() -> put_anon_vma() The relevant bits from move_pages_pte() are here: mm/userfaultfd.c 1109 mmu_notifier_invalidate_range_start(&range); 1110 retry: 1111 dst_pte = pte_offset_map_nolock(mm, dst_pmd, dst_addr, &dst_ptl); ^^^^^^^^^^^^^^^^^^^^^ 1112 1113 /* Retry if a huge pmd materialized from under us */ 1114 if (unlikely(!dst_pte)) { 1115 err = -EAGAIN; 1116 goto out; 1117 } 1118 1119 src_pte = pte_offset_map_nolock(mm, src_pmd, src_addr, &src_ptl); ^^^^^^^^^^^^^^^^^^^^^ These call rcu_read_lock() which disables preemption. [ snip ] 1235 if (!src_anon_vma) { 1236 /* 1237 * folio_referenced walks the anon_vma chain 1238 * without the folio lock. Serialize against it with 1239 * the anon_vma lock, the folio lock is not enough. 1240 */ 1241 src_anon_vma = folio_get_anon_vma(src_folio); ^^^^^^^^^^^^^^^^^^ Potentially sleeps. I started to look at if we know that folio_mapped() will return true, but then I saw that folio_get_anon_vma() actually checks that twice and it's some kind of parallelism thing. I decided to give up before I accidentally over heat my brain. 1242 if (!src_anon_vma) { 1243 /* page was unmapped from under us */ 1244 err = -EAGAIN; 1245 goto out; 1246 } 1247 if (!anon_vma_trylock_write(src_anon_vma)) { 1248 pte_unmap(&orig_src_pte); 1249 pte_unmap(&orig_dst_pte); preempt enabled again here. 1250 src_pte = dst_pte = NULL; 1251 /* now we can block and wait */ 1252 anon_vma_lock_write(src_anon_vma); 1253 goto retry; 1254 } 1255 } regards, dan carpenter