All of lore.kernel.org
 help / color / mirror / Atom feed
From: 罗飞 <luofei@unicloud.com>
To: "naoya.horiguchi@nec.com" <naoya.horiguchi@nec.com>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Cc: "linmiaohe@huawei.com" <linmiaohe@huawei.com>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: 答复: [PATCH] mm, hwpoison, hugetlb: Check hugetlb head page hwpoison flag when unpoison page
Date: Thu, 4 Aug 2022 12:07:53 +0000	[thread overview]
Message-ID: <85ab16d0a56c4942bb8a3e67b9d55858@unicloud.com> (raw)
In-Reply-To: <20220804113308.2901178-1-luofei@unicloud.com>

Sorry, wrong patch, please ignore this email.
________________________________________
发件人: 罗飞
发送时间: 2022年8月4日 19:33:08
收件人: naoya.horiguchi@nec.com; akpm@linux-foundation.org
抄送: linmiaohe@huawei.com; linux-mm@kvack.org; linux-kernel@vger.kernel.org; 罗飞
主题: [PATCH] mm, hwpoison, hugetlb: Check hugetlb head page hwpoison flag when unpoison page

When software-poison a huge page, if dissolve_free_huge_page() failed,
the huge page will be added to hugepage_freelists. In this case, the
head page will hold the hwpoison flag, but the real poisoned tail page
hwpoison flag is not set, this will cause unpoison_memory() fail to
unpoison the previously poisoned page.

So add a check on hugetlb head page, and also need to ensure the
previously poisoned tail page in huge page raw_hwp_list.

Signed-off-by: luofei <luofei@unicloud.com>
---
 mm/memory-failure.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 14439806b5ef..fc571b0ceb9d 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -2293,6 +2293,28 @@ core_initcall(memory_failure_init);
                pr_info(fmt, pfn);                      \
 })

+static bool hugetlb_page_head_poison(struct page *hpage, struct page *page)
+{
+       struct llist_head *head;
+       struct llist_node *t, *tnode;
+       struct raw_hwp_page *p;
+
+       if (PageHuge(page) && PageHWPoison(hpage) && HPageFreed(hpage))
+               return false;
+
+       if (HPageRawHwpUnreliable(hpage))
+               return false;
+
+       head = raw_hwp_list_head(hpage);
+       llist_for_each_safe(tnode, t, head->first) {
+               p = container_of(tnode, struct raw_hwp_page, node);
+               if (p->page == page)
+                       return true;
+       }
+
+       return false;
+}
+
 /**
  * unpoison_memory - Unpoison a previously poisoned page
  * @pfn: Page number of the to be unpoisoned page
@@ -2330,7 +2352,7 @@ int unpoison_memory(unsigned long pfn)
                goto unlock_mutex;
        }

-       if (!PageHWPoison(p)) {
+       if (!PageHWPoison(p) && !hugetlb_page_head_poison(page, p)) {
                unpoison_pr_info("Unpoison: Page was already unpoisoned %#lx\n",
                                 pfn, &unpoison_rs);
                goto unlock_mutex;
--
2.27.0


      reply	other threads:[~2022-08-04 12:08 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-04 11:33 [PATCH] mm, hwpoison, hugetlb: Check hugetlb head page hwpoison flag when unpoison page luofei
2022-08-04 12:07 ` 罗飞 [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=85ab16d0a56c4942bb8a3e67b9d55858@unicloud.com \
    --to=luofei@unicloud.com \
    --cc=akpm@linux-foundation.org \
    --cc=linmiaohe@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=naoya.horiguchi@nec.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.