From nobody Fri May 8 06:50:19 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DAD58C433F5 for ; Mon, 9 May 2022 11:01:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231621AbiEILFM (ORCPT ); Mon, 9 May 2022 07:05:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231517AbiEILE6 (ORCPT ); Mon, 9 May 2022 07:04:58 -0400 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93E06222C2C for ; Mon, 9 May 2022 04:01:02 -0700 (PDT) Received: by mail-pj1-x1032.google.com with SMTP id a15-20020a17090ad80f00b001dc2e23ad84so16671946pjv.4 for ; Mon, 09 May 2022 04:01:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hh8Q/KvNuhUqACFeqsQV2T1sVIozPsF9U1lcARGxZeI=; b=ZxSdbIS2ZWZlnQRxzJ9+QdFDYogt3VJySniueW++bzx/HyauWYkmgTLRR+0vFxIGtj KsOT7SkViIB3J13U7og8tKuvd4DS3rawovJxNXug3FgyVblYaj95VZr/TbPrfqkw4OwB uUmJxH4y0zUWiamwK3ZcS8fH8m8MiZ9IWeVtXYghqAQbpeiUTSUONGLNCa+FjIxRkgtr I2AhQ/5O5ZKkCUBup3/zcTMPWw3vY33vj/tT3aaGogUtfI584oTfWsxyQToDzKqqqRVo lmocWhOmcYkeS3M760hkIGGe4Pfgp4ytK+w/4TZHIERGD3ZpSGXjhARW07eLbSCQs6Zf kS5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hh8Q/KvNuhUqACFeqsQV2T1sVIozPsF9U1lcARGxZeI=; b=D6hkVJgB2CkV0hWe+o3R++EE55Aw3XKdC75aZgcRUQAubQGhCda9Ms3nXkBMBjEsuM Defh1K1AkSj4Xq8qNaNAxjZGFCKQldOjo/6Jx2ufbqdNnNfBcdrrebjeQXH/nG77pEnx DLqjRt3UrP78ugPy9/3gmMMMroiilUqzkJtS0rU2qlo1ToXWYFEDYLMF3mByQAv6kKGm tq78zjRgu0x5iR3CxHzUy8j9IgM5xU4swbHANCvwk6AqvDLcMM3YOIwd71YzxqxoV2v5 TMyxb6s6gDzsfYQOL6EUo0QiNAqpWRnTpCnDII5JbQfx53jXNUgF2IBMSM3iV5hmy5DZ oFgw== X-Gm-Message-State: AOAM532eHI1VadcvTMPf2PTdyCDjCdKA0RhiwLWqFYhzEnwBA6pX+EUt lxdgUsgg+rr9NM34oWpe/+Irpg== X-Google-Smtp-Source: ABdhPJx+fU8dUrM5IVwoZn/ILMFer/x3N87PdLxZhj/Brm/n0VW9GFWDnNWNGaOBopn9Ncaaz3NanA== X-Received: by 2002:a17:902:bc4c:b0:15f:12dc:7c85 with SMTP id t12-20020a170902bc4c00b0015f12dc7c85mr4518856plz.108.1652094061885; Mon, 09 May 2022 04:01:01 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id n12-20020a170902968c00b0015e8d4eb244sm6813303plp.142.2022.05.09.04.00.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 04:01:01 -0700 (PDT) From: zhenwei pi To: akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhenwei pi Subject: [PATCH v2 1/5] mm/memory-failure.c: move clear_hwpoisoned_pages Date: Mon, 9 May 2022 18:56:37 +0800 Message-Id: <20220509105641.491313-2-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220509105641.491313-1-pizhenwei@bytedance.com> References: <20220509105641.491313-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" clear_hwpoisoned_pages() clears HWPoison flag and decreases the number of poisoned pages, this actually works as part of memory failure. Move this function from sparse.c to memory-failure.c, finally there is no CONFIG_MEMORY_FAILURE in sparse.c. Acked-by: Naoya Horiguchi Signed-off-by: zhenwei pi --- mm/internal.h | 11 +++++++++++ mm/memory-failure.c | 21 +++++++++++++++++++++ mm/sparse.c | 27 --------------------------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index cf16280ce132..84dd6aa7ba97 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -634,6 +634,9 @@ static inline int find_next_best_node(int node, nodemas= k_t *used_node_mask) } #endif =20 +/* + * mm/memory-failure.c + */ extern int hwpoison_filter(struct page *p); =20 extern u32 hwpoison_filter_dev_major; @@ -643,6 +646,14 @@ extern u64 hwpoison_filter_flags_value; extern u64 hwpoison_filter_memcg; extern u32 hwpoison_filter_enable; =20 +#ifdef CONFIG_MEMORY_FAILURE +void clear_hwpoisoned_pages(struct page *memmap, int nr_pages); +#else +static inline void clear_hwpoisoned_pages(struct page *memmap, int nr_page= s) +{ +} +#endif + extern unsigned long __must_check vm_mmap_pgoff(struct file *, unsigned l= ong, unsigned long, unsigned long, unsigned long, unsigned long); diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 27760c19bad7..46d9fb612dcc 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -2401,3 +2401,24 @@ int soft_offline_page(unsigned long pfn, int flags) =20 return ret; } + +void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) +{ + int i; + + /* + * A further optimization is to have per section refcounted + * num_poisoned_pages. But that would need more space per memmap, so + * for now just do a quick global check to speed up this routine in the + * absence of bad pages. + */ + if (atomic_long_read(&num_poisoned_pages) =3D=3D 0) + return; + + for (i =3D 0; i < nr_pages; i++) { + if (PageHWPoison(&memmap[i])) { + num_poisoned_pages_dec(); + ClearPageHWPoison(&memmap[i]); + } + } +} diff --git a/mm/sparse.c b/mm/sparse.c index 952f06d8f373..e983c38fac8f 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -916,33 +916,6 @@ int __meminit sparse_add_section(int nid, unsigned lon= g start_pfn, return 0; } =20 -#ifdef CONFIG_MEMORY_FAILURE -static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) -{ - int i; - - /* - * A further optimization is to have per section refcounted - * num_poisoned_pages. But that would need more space per memmap, so - * for now just do a quick global check to speed up this routine in the - * absence of bad pages. - */ - if (atomic_long_read(&num_poisoned_pages) =3D=3D 0) - return; - - for (i =3D 0; i < nr_pages; i++) { - if (PageHWPoison(&memmap[i])) { - num_poisoned_pages_dec(); - ClearPageHWPoison(&memmap[i]); - } - } -} -#else -static inline void clear_hwpoisoned_pages(struct page *memmap, int nr_page= s) -{ -} -#endif - void sparse_remove_section(struct mem_section *ms, unsigned long pfn, unsigned long nr_pages, unsigned long map_offset, struct vmem_altmap *altmap) --=20 2.20.1 From nobody Fri May 8 06:50:19 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6E31C433EF for ; Mon, 9 May 2022 11:01:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231663AbiEILFU (ORCPT ); Mon, 9 May 2022 07:05:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231536AbiEILE7 (ORCPT ); Mon, 9 May 2022 07:04:59 -0400 Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D959F223851 for ; Mon, 9 May 2022 04:01:05 -0700 (PDT) Received: by mail-pl1-x62f.google.com with SMTP id q18so555847pln.12 for ; Mon, 09 May 2022 04:01:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Dwecl2Kr1urUIZir4QecyhUGT2o+Jo6GQteEXIEdnc4=; b=bYuFJNt6ZEGQO5O5z5nIFxsS6dk83OgKxaii7XuPjAdM2s4k3cG/HlVgCLphAahc+o 2Mpv157r4aX42F2I6pzx/WdVj+6wRp+FU6wrRNZPt2cnEjVPmCVzBBrYwvq8JgeqI/iS ztXJfWYwkpBFJ+QgSUjs9bIUtesCdKcOdR061A/gxIWqFcvFqGxVyX/YNxVsR62MNC26 ePn2L11yNJ2Ax3SGGXklYIJRaaNwCGpqGwmQEveG2X7CnRg5SYtCM87bgCnMdIQmwMuD Zbm1EZ+YkoycHRb3kC7CWaPWFbirQPR+3S2O52B58bJOpC5uqfnq6AaydXWS5JU0cXZb LUbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Dwecl2Kr1urUIZir4QecyhUGT2o+Jo6GQteEXIEdnc4=; b=kmcR4JExN81D/uMc/3bF92x+D12WGOdAN7ekTgbavoUwkfpFLkoJe9NxtXaDyE4uvy AZdTAytbKLZjCCAPEv8N2YhFF/0Tqrcov+NhOVy5zG7jTxApioQXAIJX26dc6CASTmhO 0+KPMUADAZj5Ef+HKHE/q9hyM3fk5MBrZlVtPPPTZkW5xJnRUCwf99S7Ul9Iuca/GJ96 wNzDANxtnfMILWOlzwJtxi6bFie0eCs3Vk3Y249xMmXzkc8l7gGbcW0TWuWQ2yvDejIb AOFoEZ1jMTqh8d90egJ/bHM8jlgIMBf+H88FSSav2bfh1jaZY17M1nmcUimnhbsvL2xz azcA== X-Gm-Message-State: AOAM531KpDYj+gP2qdA9GRbEWcAEDJhTcN3juZcKLJlwXMjBArFBTTPA nkqX8XBFxUPtJJaicWkK1+5JNw== X-Google-Smtp-Source: ABdhPJy1uR5B7Z3hoJSkWWt6S8aIJC8MM9+evsRCGhS7NW+twaifPSICrJjYgfX9wH3uhyeq/gCA1g== X-Received: by 2002:a17:903:22cf:b0:15e:cf4e:79c9 with SMTP id y15-20020a17090322cf00b0015ecf4e79c9mr15891618plg.54.1652094065144; Mon, 09 May 2022 04:01:05 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id n12-20020a170902968c00b0015e8d4eb244sm6813303plp.142.2022.05.09.04.01.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 04:01:04 -0700 (PDT) From: zhenwei pi To: akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhenwei pi Subject: [PATCH v2 2/5] mm/memory-failure.c: simplify num_poisoned_pages_dec Date: Mon, 9 May 2022 18:56:38 +0800 Message-Id: <20220509105641.491313-3-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220509105641.491313-1-pizhenwei@bytedance.com> References: <20220509105641.491313-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Don't decrease the number of poisoned pages in page_alloc.c, let the memory-failure.c do inc/dec poisoned pages only. Also simplify unpoison_memory(), only decrease the number of poisoned pages when: - TestClearPageHWPoison() succeed - put_page_back_buddy succeed After decreasing, print necessary log. Finally, remove clear_page_hwpoison() and unpoison_taken_off_page(). Acked-by: Naoya Horiguchi Signed-off-by: zhenwei pi --- mm/memory-failure.c | 37 +++++++++---------------------------- mm/page_alloc.c | 1 - 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 46d9fb612dcc..ece05858568f 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -2101,28 +2101,6 @@ core_initcall(memory_failure_init); pr_info(fmt, pfn); \ }) =20 -static inline int clear_page_hwpoison(struct ratelimit_state *rs, struct p= age *p) -{ - if (TestClearPageHWPoison(p)) { - unpoison_pr_info("Unpoison: Software-unpoisoned page %#lx\n", - page_to_pfn(p), rs); - num_poisoned_pages_dec(); - return 1; - } - return 0; -} - -static inline int unpoison_taken_off_page(struct ratelimit_state *rs, - struct page *p) -{ - if (put_page_back_buddy(p)) { - unpoison_pr_info("Unpoison: Software-unpoisoned page %#lx\n", - page_to_pfn(p), rs); - return 0; - } - return -EBUSY; -} - /** * unpoison_memory - Unpoison a previously poisoned page * @pfn: Page number of the to be unpoisoned page @@ -2140,6 +2118,7 @@ int unpoison_memory(unsigned long pfn) struct page *page; struct page *p; int ret =3D -EBUSY; + int freeit =3D 0; static DEFINE_RATELIMIT_STATE(unpoison_rs, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST); =20 @@ -2180,18 +2159,15 @@ int unpoison_memory(unsigned long pfn) =20 ret =3D get_hwpoison_page(p, MF_UNPOISON); if (!ret) { - if (clear_page_hwpoison(&unpoison_rs, page)) - ret =3D 0; - else - ret =3D -EBUSY; + ret =3D TestClearPageHWPoison(page) ? 0 : -EBUSY; } else if (ret < 0) { if (ret =3D=3D -EHWPOISON) { - ret =3D unpoison_taken_off_page(&unpoison_rs, p); + ret =3D put_page_back_buddy(p) ? 0 : -EBUSY; } else unpoison_pr_info("Unpoison: failed to grab page %#lx\n", pfn, &unpoison_rs); } else { - int freeit =3D clear_page_hwpoison(&unpoison_rs, p); + freeit =3D !!TestClearPageHWPoison(p); =20 put_page(page); if (freeit && !(pfn =3D=3D my_zero_pfn(0) && page_count(p) =3D=3D 1)) { @@ -2202,6 +2178,11 @@ int unpoison_memory(unsigned long pfn) =20 unlock_mutex: mutex_unlock(&mf_mutex); + if (!ret || freeit) { + num_poisoned_pages_dec(); + unpoison_pr_info("Unpoison: Software-unpoisoned page %#lx\n", + page_to_pfn(p), &unpoison_rs); + } return ret; } EXPORT_SYMBOL(unpoison_memory); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0e42038382c1..d710846ef653 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -9625,7 +9625,6 @@ bool put_page_back_buddy(struct page *page) ClearPageHWPoisonTakenOff(page); __free_one_page(page, pfn, zone, 0, migratetype, FPI_NONE); if (TestClearPageHWPoison(page)) { - num_poisoned_pages_dec(); ret =3D true; } } --=20 2.20.1 From nobody Fri May 8 06:50:19 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62F63C433EF for ; Mon, 9 May 2022 11:01:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230412AbiEILFX (ORCPT ); Mon, 9 May 2022 07:05:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231600AbiEILFG (ORCPT ); Mon, 9 May 2022 07:05:06 -0400 Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49446224040 for ; Mon, 9 May 2022 04:01:09 -0700 (PDT) Received: by mail-pl1-x630.google.com with SMTP id n18so13502226plg.5 for ; Mon, 09 May 2022 04:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lgBugjMBjpGQ7xeNvhxji4XO8XtdFmxbyx8qWXB/d1E=; b=Pj3odeW7eWCV6Y3wbzSEpD8iLoimaxAI1ooehshks8JT1P+ojlGgtSlicuvorjqyuO kT/iSH9IeTlMksEU/xWsoNwYko7rqXxxjzmm7oEHy9uBn+PwWOaxTT/EMhftkdQSxcNs eGk5ULQ2fgZEg9dJac5mZduPWbV1z0FGFUj8xKI7mox5vPPrbdfNxmtVi1H3bZwnCcgR E4bjgy+vFNnAUACAkd4XWb2qxrFBOJ1RYP1wyhLjvM97E3+yfhHY3zIHCohiu5BeTRVE IE3l1JXhD1BJyLIUALFNepOCs3HyemnMQzn2YuOIZ/1ccCAkhgRSWZN+uw75l01f5aGc 7Qmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lgBugjMBjpGQ7xeNvhxji4XO8XtdFmxbyx8qWXB/d1E=; b=SDiyQLa0nchMPvNrcbnGWspUrju9llIrZpIZrKdH8Cb3wH2guJrlXkIshLPRtpkai9 qlYu4vSOKn0TZBnBVtmJ6nhy+UoIWWeyqSwPBx85gpCiXqvncX5PsClwgMPQcKY4heMH DZQqwXvLuUacMqn/U6FLb7ugLivcPxXpdVnsd4302d1wbh3WzDMuK5umXFMn2+CDEyBH jwH8EqWhFSuPwpTGiuJ0CrwT52qiMU0OeN4w7C8eMugarKy5pE4x5JXHxj+Tv41mxPKW q7enWILy3LdWQUJabkUKogpf1sv77ckh9Up4qB53U/bTBonRnPTquVPL7jPHUvnyiYyf lhbg== X-Gm-Message-State: AOAM533EHzZdoce9RSxCIXqjJjLA9lrQgad7D78kTX9H3288acgEJPg3 gAM9YBVcuz37noeAcHtdA0IzxA== X-Google-Smtp-Source: ABdhPJzX90hgfGWeg918bEYrTW1cS8gQltC1OktUE0gYPnZCoiRblOWmhlkao5W1SGi61URQ7uy4sQ== X-Received: by 2002:a17:903:210:b0:15e:f139:f901 with SMTP id r16-20020a170903021000b0015ef139f901mr14084732plh.66.1652094068623; Mon, 09 May 2022 04:01:08 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id n12-20020a170902968c00b0015e8d4eb244sm6813303plp.142.2022.05.09.04.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 04:01:08 -0700 (PDT) From: zhenwei pi To: akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhenwei pi Subject: [PATCH v2 3/5] mm/memory-failure.c: add hwpoison_filter for soft offline Date: Mon, 9 May 2022 18:56:39 +0800 Message-Id: <20220509105641.491313-4-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220509105641.491313-1-pizhenwei@bytedance.com> References: <20220509105641.491313-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" hwpoison_filter is missing in the soft offline path, this leads an issue: after enabling the corrupt filter, the user process still has a chance to inject hwpoison fault by madvise(addr, len, MADV_SOFT_OFFLINE) at PFN which is expected to reject. Also do a minor change in comment of memory_failure(). Signed-off-by: zhenwei pi Acked-by: Naoya Horiguchi --- mm/memory-failure.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index ece05858568f..ed280ef5473d 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1762,7 +1762,7 @@ static DEFINE_MUTEX(mf_mutex); * enabled and no spinlocks hold. * * Return: 0 for successfully handled the memory error, - * -EOPNOTSUPP for memory_filter() filtered the error event, + * -EOPNOTSUPP for hwpoison_filter() filtered the error event, * < 0(except -EOPNOTSUPP) on failure. */ int memory_failure(unsigned long pfn, int flags) @@ -2317,7 +2317,9 @@ static void put_ref_page(struct page *page) * @pfn: pfn to soft-offline * @flags: flags. Same as memory_failure(). * - * Returns 0 on success, otherwise negated errno. + * Returns 0 on success + * -EOPNOTSUPP for hwpoison_filter() filtered the error event + * < 0 otherwise negated errno. * * Soft offline a page, by migration or invalidation, * without killing anything. This is for the case when @@ -2368,6 +2370,16 @@ int soft_offline_page(unsigned long pfn, int flags) ret =3D get_hwpoison_page(page, flags | MF_SOFT_OFFLINE); put_online_mems(); =20 + if (hwpoison_filter(page)) { + if (ret > 0) + put_page(page); + else + put_ref_page(ref_page); + + mutex_unlock(&mf_mutex); + return -EOPNOTSUPP; + } + if (ret > 0) { ret =3D soft_offline_in_use_page(page); } else if (ret =3D=3D 0) { --=20 2.20.1 From nobody Fri May 8 06:50:19 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5914C433FE for ; Mon, 9 May 2022 11:01:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231620AbiEILFf (ORCPT ); Mon, 9 May 2022 07:05:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231602AbiEILFG (ORCPT ); Mon, 9 May 2022 07:05:06 -0400 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69686223867 for ; Mon, 9 May 2022 04:01:12 -0700 (PDT) Received: by mail-pj1-x1029.google.com with SMTP id gj17-20020a17090b109100b001d8b390f77bso16701282pjb.1 for ; Mon, 09 May 2022 04:01:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Tr6+NBI5Dp7/pv2IhiUO3+bTmtkrDRJXLmbHS2KDzto=; b=29UqZuhw9+M3t42ulPc2ZSmZykQBVXN33MMQFuKE/0R1Kyd39m/lC7COmCnwOidfAn Q267MfGBvY6H1Sqo7KBGDIh2ogS6Nvs0Vp2+NTBA6iHpGp0Vqv7b9wjdw20bZhaIhYme MUnYF0YnyGufZYUokA6v2jORmdAYEHKj1mZ4qiBRigG706w+qBN6N0Dj/pkxfuyl4sm1 nvjZDHIZPMD2JDnE6iw3Cp709ZCkXTre51LDkijO2HYNDuzVH89m5rzNiWlI2QuBb6a3 6H38ONV6LkPtY2fNEoyzRQnQFgZSjmYNH6A8j3Mez/Sp4GRaKiOv8V9Ck/XrnEg7jFXK XbjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Tr6+NBI5Dp7/pv2IhiUO3+bTmtkrDRJXLmbHS2KDzto=; b=yyC+mOP6HzRc1XH82i7Nf46JUM+kL5nue8sO6h8DeNK6liMlY/hbOBY5g5vRk2eUAh pm7GmqK43qsBQqTFJzJOCWbuBhg29dwuZrXFIHpoGkriHGvH1MNdMbh9lnwPIQ4CysV6 jiO/WaA2JwPUXp5I2O9dUyaw/dxSMJhdquEfmy8zCh5sXALDi7xHZXqsUTprMpRiUyC2 a3MHvr2Vtsmqve+U6khz39OSZPuTHnqLA2mGpeiMJ7WQilJCV6hzd/d94F860WqGv1ca x7f7O20PgFT9/VzBRkMNZAKy8A/mdddF6GHoJeF1UMvtmD1U/ixjCIzd8tcxHjlvgzLx o2Zw== X-Gm-Message-State: AOAM5325L3IMo9OsjTO0/t4dAAyVOGIPaZRDpSJ0yNby9PbeBZhfHg+i uGnA/w/NaVisYsKOLCw6+mnrXA== X-Google-Smtp-Source: ABdhPJyU6HCZrGSz6lqIXae9RRYvrGcjZLnJUViQxdva/SCNkBkiHGP9a4t1FymjNKczWy+XWRGMIw== X-Received: by 2002:a17:90b:38c7:b0:1dc:77aa:e3d5 with SMTP id nn7-20020a17090b38c700b001dc77aae3d5mr25428577pjb.51.1652094071883; Mon, 09 May 2022 04:01:11 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id n12-20020a170902968c00b0015e8d4eb244sm6813303plp.142.2022.05.09.04.01.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 04:01:11 -0700 (PDT) From: zhenwei pi To: akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhenwei pi Subject: [PATCH v2 4/5] mm/hwpoison: disable hwpoison filter during removing Date: Mon, 9 May 2022 18:56:40 +0800 Message-Id: <20220509105641.491313-5-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220509105641.491313-1-pizhenwei@bytedance.com> References: <20220509105641.491313-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" hwpoison filter is enabled by hwpoison-inject module, after removing this module, hwpoison filter still works. What is worse, user can not find the debugfs entries to know this. Disable the hwpoison filter during removing hwpoison-inject module. Signed-off-by: zhenwei pi Acked-by: Naoya Horiguchi --- mm/hwpoison-inject.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/hwpoison-inject.c b/mm/hwpoison-inject.c index bb0cea5468cb..5c0cddd81505 100644 --- a/mm/hwpoison-inject.c +++ b/mm/hwpoison-inject.c @@ -65,6 +65,7 @@ DEFINE_DEBUGFS_ATTRIBUTE(unpoison_fops, NULL, hwpoison_un= poison, "%lli\n"); =20 static void pfn_inject_exit(void) { + hwpoison_filter_enable =3D 0; debugfs_remove_recursive(hwpoison_dir); } =20 --=20 2.20.1 From nobody Fri May 8 06:50:19 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2741EC433EF for ; Mon, 9 May 2022 11:01:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231777AbiEILF1 (ORCPT ); Mon, 9 May 2022 07:05:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231643AbiEILFN (ORCPT ); Mon, 9 May 2022 07:05:13 -0400 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B7C5226880 for ; Mon, 9 May 2022 04:01:15 -0700 (PDT) Received: by mail-pl1-x631.google.com with SMTP id n8so13515183plh.1 for ; Mon, 09 May 2022 04:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t0KsZv2R4FmOpyzJ37nNuFGF3hEBVQUSZOEw7FIgU2A=; b=yjtzA8SItPH7R6S1S+OGpTA8lpujjgtHSpoSwPxtQUypZnh+LhhkrVjtjaxYiSIVAp iVo3fIPQGwplTUrHyLZm+y+PW7GyXKOyGCa/Mk5TpRRWgY8ampXvMrn3BYumiT5GRlHB BAPwL6edGJN/fGAQUqu92vb6/tAVD3lhNQBVMpBoHpI0a8/1mEJZcCGlQmMGNkMSwbsr 17l7fH1SLbbetWfYC50CRYmCDeskVHYFWSZYWmXLz1WuvE0MByPEXHTARY5dFhTICCxG mR3NVxFDYHIgork84g9o9A8HXp9wLBJY+kZqiVmveHEhPszocewvWXXDYls9OOPHvKg2 7ZLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t0KsZv2R4FmOpyzJ37nNuFGF3hEBVQUSZOEw7FIgU2A=; b=VaVi7y01ySUK0yNenjjGG8biIKinbKbvVQrwF1dbVk1RhRs7NaGoD7MGvEH0lo9Qnd LehuExYc8hgAQ5Qwvyde4k1ix9rqkVKjbYhKYnFtGn8u0+Uq2kJ9fUwHLpd9u22/qTvb yfTpzGLbfS623jGqVx/NGdO7RozaWQ5sEw5VoshzayEJV0Xuk7S8mfX7HQQoGDy3rlXo iuHFQuxzLbziyQq7x4s25yKlDdykmZxwzMn6CkCdbiCI9sr0dg9DqkhBWcGNFRkd3nZY zFYOuYzjBY3SucpIfR4flNs3KraHKroxaRA+NyFwfzmFwHpvo07HYPGelZUyy0qEFfHz Yxvw== X-Gm-Message-State: AOAM533zugyPyRByOwGHZ8KuoSV8c0Bn5uJGu+XQuOwWg1JkmL5dkXYd ZfYXDuTjXoPiLjF2BwWbpbiWcAqe9X53xg== X-Google-Smtp-Source: ABdhPJx/WzlB7PylnxnAdFCim/SskrKr0osvOo6sFRdb5OtHidyhPLSUg7ojKRvRf81iZeBPIyd+DQ== X-Received: by 2002:a17:90a:f2ce:b0:1d9:a18f:87f3 with SMTP id gt14-20020a17090af2ce00b001d9a18f87f3mr25860804pjb.213.1652094074838; Mon, 09 May 2022 04:01:14 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id n12-20020a170902968c00b0015e8d4eb244sm6813303plp.142.2022.05.09.04.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 04:01:14 -0700 (PDT) From: zhenwei pi To: akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhenwei pi Subject: [PATCH v2 5/5] mm/memory-failure.c: simplify num_poisoned_pages_inc/dec Date: Mon, 9 May 2022 18:56:41 +0800 Message-Id: <20220509105641.491313-6-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220509105641.491313-1-pizhenwei@bytedance.com> References: <20220509105641.491313-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Originally, do num_poisoned_pages_inc() in memory failure routine, use num_poisoned_pages_dec() to rollback the number if filtered/ cancelled. Suggested by Naoya, do num_poisoned_pages_inc() only in action_result(), this make this clear and simple. Signed-off-by: zhenwei pi Acked-by: Naoya Horiguchi --- mm/memory-failure.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index ed280ef5473d..2d590cba412c 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1133,6 +1133,7 @@ static void action_result(unsigned long pfn, enum mf_= action_page_type type, { trace_memory_failure_event(pfn, type, result); =20 + num_poisoned_pages_inc(); pr_err("Memory failure: %#lx: recovery action for %s: %s\n", pfn, action_page_types[type], action_name[result]); } @@ -1588,8 +1589,6 @@ static int try_memory_failure_hugetlb(unsigned long p= fn, int flags, int *hugetlb goto out; } =20 - num_poisoned_pages_inc(); - /* * Handling free hugepage. The possible race with hugepage allocation * or demotion can be prevented by PageHWPoison flag. @@ -1815,7 +1814,6 @@ int memory_failure(unsigned long pfn, int flags) } =20 hpage =3D compound_head(p); - num_poisoned_pages_inc(); =20 /* * We need/can do nothing about count=3D0 pages. @@ -1839,7 +1837,6 @@ int memory_failure(unsigned long pfn, int flags) /* We lost the race, try again */ if (retry) { ClearPageHWPoison(p); - num_poisoned_pages_dec(); retry =3D false; goto try_again; } @@ -1915,8 +1912,7 @@ int memory_failure(unsigned long pfn, int flags) */ if (PageCompound(p)) { if (retry) { - if (TestClearPageHWPoison(p)) - num_poisoned_pages_dec(); + ClearPageHWPoison(p); unlock_page(p); put_page(p); flags &=3D ~MF_COUNT_INCREASED; @@ -1938,8 +1934,7 @@ int memory_failure(unsigned long pfn, int flags) page_flags =3D p->flags; =20 if (hwpoison_filter(p)) { - if (TestClearPageHWPoison(p)) - num_poisoned_pages_dec(); + TestClearPageHWPoison(p); unlock_page(p); put_page(p); res =3D -EOPNOTSUPP; --=20 2.20.1