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 239FDC5B549 for ; Wed, 4 Jun 2025 14:05:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 424E18D0020; Wed, 4 Jun 2025 10:05:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3FC358D0007; Wed, 4 Jun 2025 10:05:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3123B8D0020; Wed, 4 Jun 2025 10:05:55 -0400 (EDT) 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 127608D0007 for ; Wed, 4 Jun 2025 10:05:55 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 7FE85C1838 for ; Wed, 4 Jun 2025 14:05:54 +0000 (UTC) X-FDA: 83517891828.12.47D8F03 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf16.hostedemail.com (Postfix) with ESMTP id F3E3F180015 for ; Wed, 4 Jun 2025 14:05:51 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="h/7Jr96E"; spf=pass (imf16.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749045952; 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: references:dkim-signature; bh=ceQ8MrBEyOYSLsVlLloLQm5cGgLaPimBF5PhfObg4oc=; b=WeG1LzhxES1IHaT6lhdSmIZkx33gLNSoq1aDR8xuvT9atNUeh2os+v+Ad40Rqdh5JBYHLd ZJ9BzwwATyjH3WYfPeDpg4On008jjEg6zXIGSiGqSL9QDQZJ+1veKoBQsws4lQhEKEm2i3 GvQ+6qbQlWGlu8S3hx9y60KjMP0tohc= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="h/7Jr96E"; spf=pass (imf16.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749045952; a=rsa-sha256; cv=none; b=k1WY7ZdsiBaZXbiFw5FX55GjzcTjI6PLMDLjxwUiEr+gkQ0cScKckxrFCcK7i7Nik6mtqy wvEKrGFoyy/rLK0Qi7VWeDwkw9Cs5p2cAiC2flq6wgDYnQt18JCpLiG+l4ur0/sUECR0JE g44EIM/zrltnfmcVGPRJEii9SwBAMOk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1749045951; h=from:from: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; bh=ceQ8MrBEyOYSLsVlLloLQm5cGgLaPimBF5PhfObg4oc=; b=h/7Jr96EXXiYyGstROqilaQ5aPUmmli0lPheCq1qAvrxe7gAw0GXxgzuYvomSq8DTAL4e7 hKF8Ta68vgN3ipM0iPuNZ2v59NgySczCm5CKzsR6wx07DddveukobLGH97KeF0fz0+sV7d 5XdpW5S4UmOzJQ0FPDNfjz/O055g4vE= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-459-TZXF-B7RNieeL1-GYqGizw-1; Wed, 04 Jun 2025 10:05:47 -0400 X-MC-Unique: TZXF-B7RNieeL1-GYqGizw-1 X-Mimecast-MFC-AGG-ID: TZXF-B7RNieeL1-GYqGizw_1749045947 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-450d9f96f61so42378175e9.1 for ; Wed, 04 Jun 2025 07:05:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749045946; x=1749650746; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ceQ8MrBEyOYSLsVlLloLQm5cGgLaPimBF5PhfObg4oc=; b=qskRuvF70KBIEbCqqTfa7+fKEl7bjkUBPkFPf33gxK6bDkWW2sBWo36SqXtZOXjg44 ShlzncUN2cDlUcrmieCgcAhEvvinn8sJs+vudqIptboRrE/iF7dpj3oQpzyzpYa+GAOz vfs/6+sjsULoVyCBlq2DdXv7incK2mgcknlc2r7yv2YjXFBDjZDwaou3gJzGQy1QEz6h pLxwsqzSq7EUn1BHKcjhZZyfSVcUddbank46bbdzeD4m1Dwl3ubE4EyGRN04WisOfnar kENqgE+Bo7DiXa3Fm07U4qKwa+1PLRN6+MUijPR3Mo4mh54on7n72dTCZvz08n4A7Q1X EoAA== X-Gm-Message-State: AOJu0YxPhs/0UU2wHOOBCUc+epQ5CW6Uf35oam/TP2mIpNO8UpJ6UpM/ VeB+59ATrM2FJlwxCSaLLEoYbUeKd5O7VL8LVrYSMJVl33iHQuufEooGteqwMa6sto7YEJjBFST dsmmSXmJIY7DkIiwBE4fn3g3D4AZYD//7zrrBkZRAde1/rt5+TCS6 X-Gm-Gg: ASbGncuPBak3QF15c9bj8YyzsAMZSAUnR0wSCh/s07L3UNhox4bxfl7omaDbup73ALJ M8kRUWXHlb5gs2L7XYibCezQnj/tILYSRsAbDKo+/JsfxGMIuV1dIgFBf2f0bAdZS3QxBlTNofR 7pXSYNogoog5VJdyV/RFy5LpLF9iYE1zVAc8JiLnTt9jmc0VP7PPJeVboW2pEOdDJNgj3jLtmam 5D6zraKRBJ7zcSPtX4G8B++/ETpNX0jiS8MWsIerPgjDCOtCRVyZKaqmzL11WSk/Q3UkDoT6CK4 Fv8UnsGFCThAY1VvvX7R1U0aOx79XfNtz8bNK0St/8VOUJt/qs7FYnQvfU94NXknAqL/9wS6JpP EhtsL3ro= X-Received: by 2002:a05:600c:4a27:b0:450:d614:cb with SMTP id 5b1f17b1804b1-451f0e547a4mr16906955e9.33.1749045946497; Wed, 04 Jun 2025 07:05:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHYe6tbzgwHaqVnJry21P3Q8c38NZTtjrZN6NtysuRTvfJy+CJBRQzZRfgenFSVCPefI/EKxA== X-Received: by 2002:a05:600c:4a27:b0:450:d614:cb with SMTP id 5b1f17b1804b1-451f0e547a4mr16906525e9.33.1749045945863; Wed, 04 Jun 2025 07:05:45 -0700 (PDT) Received: from localhost (p200300d82f1bb8006fdb1af24fbd1fdf.dip0.t-ipconnect.de. [2003:d8:2f1b:b800:6fdb:1af2:4fbd:1fdf]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-450d7fc2725sm201643215e9.37.2025.06.04.07.05.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Jun 2025 07:05:45 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, David Hildenbrand , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jason Gunthorpe , John Hubbard , Peter Xu Subject: [PATCH v1] mm/gup: remove (VM_)BUG_ONs Date: Wed, 4 Jun 2025 16:05:44 +0200 Message-ID: <20250604140544.688711-1-david@redhat.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: DgNEm645NDnbmLZe9XrQoY_tNxlhS5pDe8t9AB1ZJFU_1749045947 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Queue-Id: F3E3F180015 X-Rspamd-Server: rspam09 X-Stat-Signature: pqmz6t551qs63femzfg9xxdfep6qjw9c X-HE-Tag: 1749045951-330821 X-HE-Meta: U2FsdGVkX1/l0maeETi3udsKukj7Ul6lP9dpqlOmFBdmbhYzSkZVCY6xq33vmfu3CZfI0+H7MZ55SwRYnaRV6L2W9fkqjKZOBpLD8RpGktRze23C/MF8yOuiP9YTbeskYFAJ2s+vS/qjmTUUvVKMjz+7GrtbHoM8tW8u5E670A4ufyhp8as6NfuelqRCqxQ49o/qTw64Y0s7S/rKcJxmYagaGMOgoDc+3aNjbGLCuO9uCopE5sgJnWZJmV4WAWw3wUySOdsZxLa8Ffmd3uUPccRDOo2E0JV5QAj55VjiQljHqf5EubNHrQGAFlCOV+25h77p7tR2/yE46MbXmQDmWw/9S6IIcRXqyDCWliiPIxsuzu0+lgJ7yoZhsY0AQbEtdSirQZZFZgi9Cl3MFI4Dgy737UXD797sRj196M4b2OWx6YGdyDpBGMOP+aaI3QrpYhmk2wXP+/kpKRSZmA/Z5WTwiCdgw8HIzWzrfx0+qfb8c94vumF8Cs4UTOIU6//FJjXNqqE2LuMi1n6Hw7rLRTFRyW26TlcQIpTxAXBAo/tHWgqwZPSPhOc/0xY+OgGYzOt4/dAANBbU9ZBT11++0xo51fFyRDu3iiM9rzYAvQGP/yh5iVtsXSl05Ih1J15piX3JvtEwcLIRXvAGNz9MGiZdXGgcnre56El/JCMZahMAs12H2+syGATr7JOQjHZlsshteEXWRIU8YtA5d43qePnEN+GYA7aJjbkBV1VXaIpsWRyqpNSSyh+dLc1L9Idkvy94Mko59B6hRv06ZH2aaZrY946fb08h4jnZLqyaI+492dhBdvnR2x0UkbLQEQxa19iV9Gk6PH6a1x0O7yEmkufs7eQfs//u07F0O/RzjwapXfi2wYQ6KWGqaOO2go7koboHf2q2Y3vyr8Z3OJOkYjjxbYNCDGDt+SK0AyIy2y2OX12YbQ8ZR+VU2NclcgZOoTqnaao90/rN6+G51VZ 2kf+vZ4x 5qgz1vPDCYQeQokSt+8ki0kQ74eN3TX3FVYyK13scrXHEPSDLyDVJ17Ufw5+tNAzttlcciB7qjX2Cd+n1Qjbj/6Uyfs+sRyOXMF4hYOZU8cEevOeqCIVrZTkne3+iXpcSyiE33oKVzgYI51f0b939YA10uFe7uWS2XEuYE+vHHsO0W49DvXmsSU2a6DEygboQUZaMXws4fnXgRLHqDsUObdUOffgQvqP+hp3A4lIaKb9mikWccPIcmm3sJDu+QAH7V2yin4Fo+ShdnunBpDah9BgTUdhzjPiWAW1Vs8K16EQ+yXJHd58CXd1d36YEefpJMMOgqB/6pjH1MmvTE0JnjEHUZ/A/UicXx5AqwPuGtaQm2hGOMqD6LbStXTSV3btBacq+SeHJJP85EgSwNV0IP/dDVtxLhSfnpmru0Ajn3A7ubMN7eYcPz1l0vqsHd1LWRoRRyqnxQ3arMvfPn/6fmEDIlydyUvfPr5xkzTLf2ysNunPwNFFRWd/q8ljECMnkmKJzbsnpWMv3UfXmZ23V/k+ZUweWH5BW/YiveZX8M94QxovJj7esQ5yyZUeJPbURZikKLMJMPGCZUgXrcCkH3UStAN7WrdLuTpolWWhLh7rbo7fph+K0uxtOtqi14qNwdDpZIiP4QMGSPDBXnmbAjUJuRYDE62g/XSkvLd8m9poMK4KTSnV+7QMEByMR+xbxhDPY+OGvVe3hVfGXOU2+DBtqRNnAJU4yG8e++s/7IuvZS26vK3ebG82B/j8gX8AuCg0RJoYb8Q3gXFZx56iZoMdJdwOJDDz/+vQ2BpMad8Kbmns= 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: Especially once we hit one of the assertions in sanity_check_pinned_pages(), observing follow-up assertions failing in other code can give good clues about what went wrong, so use VM_WARN_ON_ONCE instead. While at it, let's just convert all VM_BUG_ON to VM_WARN_ON_ONCE as well. Add one comment for the pfn_valid() check. We have to introduce VM_WARN_ON_ONCE_VMA() to make that fly. Drop the BUG_ON after mmap_read_lock_killable(), if that ever returns something > 0 we're in bigger trouble. Convert the other BUG_ON's into VM_WARN_ON_ONCE as well, they are in a similar domain "should never happen", but more reasonable to check for during early testing. Cc: Andrew Morton Cc: Lorenzo Stoakes Cc: "Liam R. Howlett" Cc: Vlastimil Babka Cc: Mike Rapoport Cc: Suren Baghdasaryan Cc: Michal Hocko Cc: Jason Gunthorpe Cc: John Hubbard Cc: Peter Xu Signed-off-by: David Hildenbrand --- Wanted to do this for a long time, but my todo list keeps growing ... Based on mm/mm-unstable --- include/linux/mmdebug.h | 12 ++++++++++++ mm/gup.c | 41 +++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h index a0a3894900ed4..14a45979cccc9 100644 --- a/include/linux/mmdebug.h +++ b/include/linux/mmdebug.h @@ -89,6 +89,17 @@ void vma_iter_dump_tree(const struct vma_iterator *vmi); } \ unlikely(__ret_warn_once); \ }) +#define VM_WARN_ON_ONCE_VMA(cond, vma) ({ \ + static bool __section(".data..once") __warned; \ + int __ret_warn_once = !!(cond); \ + \ + if (unlikely(__ret_warn_once && !__warned)) { \ + dump_vma(vma); \ + __warned = true; \ + WARN_ON(1); \ + } \ + unlikely(__ret_warn_once); \ +}) #define VM_WARN_ON_VMG(cond, vmg) ({ \ int __ret_warn = !!(cond); \ \ @@ -115,6 +126,7 @@ void vma_iter_dump_tree(const struct vma_iterator *vmi); #define VM_WARN_ON_FOLIO(cond, folio) BUILD_BUG_ON_INVALID(cond) #define VM_WARN_ON_ONCE_FOLIO(cond, folio) BUILD_BUG_ON_INVALID(cond) #define VM_WARN_ON_ONCE_MM(cond, mm) BUILD_BUG_ON_INVALID(cond) +#define VM_WARN_ON_ONCE_VMA(cond, vma) BUILD_BUG_ON_INVALID(cond) #define VM_WARN_ON_VMG(cond, vmg) BUILD_BUG_ON_INVALID(cond) #define VM_WARN_ONCE(cond, format...) BUILD_BUG_ON_INVALID(cond) #define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond) diff --git a/mm/gup.c b/mm/gup.c index e065a49842a87..3c3931fcdd820 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -64,11 +64,11 @@ static inline void sanity_check_pinned_pages(struct page **pages, !folio_test_anon(folio)) continue; if (!folio_test_large(folio) || folio_test_hugetlb(folio)) - VM_BUG_ON_PAGE(!PageAnonExclusive(&folio->page), page); + VM_WARN_ON_ONCE_PAGE(!PageAnonExclusive(&folio->page), page); else /* Either a PTE-mapped or a PMD-mapped THP. */ - VM_BUG_ON_PAGE(!PageAnonExclusive(&folio->page) && - !PageAnonExclusive(page), page); + VM_WARN_ON_ONCE_PAGE(!PageAnonExclusive(&folio->page) && + !PageAnonExclusive(page), page); } } @@ -760,8 +760,8 @@ static struct page *follow_huge_pmd(struct vm_area_struct *vma, if (!pmd_write(pmdval) && gup_must_unshare(vma, flags, page)) return ERR_PTR(-EMLINK); - VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) && - !PageAnonExclusive(page), page); + VM_WARN_ON_ONCE_PAGE((flags & FOLL_PIN) && PageAnon(page) && + !PageAnonExclusive(page), page); ret = try_grab_folio(page_folio(page), 1, flags); if (ret) @@ -899,8 +899,8 @@ static struct page *follow_page_pte(struct vm_area_struct *vma, goto out; } - VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) && - !PageAnonExclusive(page), page); + VM_WARN_ON_ONCE_PAGE((flags & FOLL_PIN) && PageAnon(page) && + !PageAnonExclusive(page), page); /* try_grab_folio() does nothing unless FOLL_GET or FOLL_PIN is set. */ ret = try_grab_folio(folio, 1, flags); @@ -1180,7 +1180,7 @@ static int faultin_page(struct vm_area_struct *vma, if (unshare) { fault_flags |= FAULT_FLAG_UNSHARE; /* FAULT_FLAG_WRITE and FAULT_FLAG_UNSHARE are incompatible */ - VM_BUG_ON(fault_flags & FAULT_FLAG_WRITE); + VM_WARN_ON_ONCE(fault_flags & FAULT_FLAG_WRITE); } ret = handle_mm_fault(vma, address, fault_flags, NULL); @@ -1760,10 +1760,7 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm, } /* VM_FAULT_RETRY or VM_FAULT_COMPLETED cannot return errors */ - if (!*locked) { - BUG_ON(ret < 0); - BUG_ON(ret >= nr_pages); - } + VM_WARN_ON_ONCE(!*locked && (ret < 0 || ret >= nr_pages)); if (ret > 0) { nr_pages -= ret; @@ -1808,7 +1805,6 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm, ret = mmap_read_lock_killable(mm); if (ret) { - BUG_ON(ret > 0); if (!pages_done) pages_done = ret; break; @@ -1819,11 +1815,11 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm, pages, locked); if (!*locked) { /* Continue to retry until we succeeded */ - BUG_ON(ret != 0); + VM_WARN_ON_ONCE(ret != 0); goto retry; } if (ret != 1) { - BUG_ON(ret > 1); + VM_WARN_ON_ONCE(ret > 1); if (!pages_done) pages_done = ret; break; @@ -1885,10 +1881,10 @@ long populate_vma_page_range(struct vm_area_struct *vma, int gup_flags; long ret; - VM_BUG_ON(!PAGE_ALIGNED(start)); - VM_BUG_ON(!PAGE_ALIGNED(end)); - VM_BUG_ON_VMA(start < vma->vm_start, vma); - VM_BUG_ON_VMA(end > vma->vm_end, vma); + VM_WARN_ON_ONCE(!PAGE_ALIGNED(start)); + VM_WARN_ON_ONCE(!PAGE_ALIGNED(end)); + VM_WARN_ON_ONCE_VMA(start < vma->vm_start, vma); + VM_WARN_ON_ONCE_VMA(end > vma->vm_end, vma); mmap_assert_locked(mm); /* @@ -1957,8 +1953,8 @@ long faultin_page_range(struct mm_struct *mm, unsigned long start, int gup_flags; long ret; - VM_BUG_ON(!PAGE_ALIGNED(start)); - VM_BUG_ON(!PAGE_ALIGNED(end)); + VM_WARN_ON_ONCE(!PAGE_ALIGNED(start)); + VM_WARN_ON_ONCE(!PAGE_ALIGNED(end)); mmap_assert_locked(mm); /* @@ -2908,7 +2904,8 @@ static int gup_fast_pte_range(pmd_t pmd, pmd_t *pmdp, unsigned long addr, } else if (pte_special(pte)) goto pte_unmap; - VM_BUG_ON(!pfn_valid(pte_pfn(pte))); + /* If it's not marked as special it must have a valid memmap. */ + VM_WARN_ON_ONCE(!pfn_valid(pte_pfn(pte))); page = pte_page(pte); folio = try_grab_folio_fast(page, 1, flags); base-commit: 2d0c297637e7d59771c1533847c666cdddc19884 -- 2.49.0