All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlastimil Babka <vbabka@suse.cz>
To: Mel Gorman <mgorman@techsingularity.net>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Naoya Horiguchi <nao.horiguchi@gmail.com>
Subject: Re: [PATCH v1] mm: bad_page() checks bad_flags instead of page->flags for hwpoison page
Date: Wed, 18 May 2016 11:31:07 +0200	[thread overview]
Message-ID: <573C365B.6020807@suse.cz> (raw)
In-Reply-To: <20160518092100.GB2527@techsingularity.net>

On 05/18/2016 11:21 AM, Mel Gorman wrote:
> On Tue, May 17, 2016 at 04:42:55PM +0900, Naoya Horiguchi wrote:
>> There's a race window between checking page->flags and unpoisoning, which
>> taints kernel with "BUG: Bad page state". That's overkill. It's safer to
>> use bad_flags to detect hwpoisoned page.
>>
>
> I'm not quite getting this one. Minimally, instead of = __PG_HWPOISON, it
> should have been (bad_flags & __PG_POISON). As Vlastimil already pointed
> out, __PG_HWPOISON can be 0. What I'm not getting is why this fixes the
> race. The current race is
>
> 1. Check poison, set bad_flags
> 2. poison clears in parallel
> 3. Check page->flag state in bad_page and trigger warning
>
> The code changes it to
>
> 1. Check poison, set bad_flags
> 2. poison clears in parallel
> 3. Check bad_flags and trigger warning

I think you got step 3 here wrong. It's "skip the warning since we have 
set bad_flags to hwpoison and bad_flags didn't change due to parallel 
unpoison".

Perhaps the question is why do we need to split the handling between 
check_new_page_bad() and bad_page() like this? It might have been 
different in the past, but seems like at this point we only look for 
hwpoison from check_new_page_bad(). But a cleanup can come later.

> There is warning either way. What did I miss?
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Vlastimil Babka <vbabka@suse.cz>
To: Mel Gorman <mgorman@techsingularity.net>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Naoya Horiguchi <nao.horiguchi@gmail.com>
Subject: Re: [PATCH v1] mm: bad_page() checks bad_flags instead of page->flags for hwpoison page
Date: Wed, 18 May 2016 11:31:07 +0200	[thread overview]
Message-ID: <573C365B.6020807@suse.cz> (raw)
In-Reply-To: <20160518092100.GB2527@techsingularity.net>

On 05/18/2016 11:21 AM, Mel Gorman wrote:
> On Tue, May 17, 2016 at 04:42:55PM +0900, Naoya Horiguchi wrote:
>> There's a race window between checking page->flags and unpoisoning, which
>> taints kernel with "BUG: Bad page state". That's overkill. It's safer to
>> use bad_flags to detect hwpoisoned page.
>>
>
> I'm not quite getting this one. Minimally, instead of = __PG_HWPOISON, it
> should have been (bad_flags & __PG_POISON). As Vlastimil already pointed
> out, __PG_HWPOISON can be 0. What I'm not getting is why this fixes the
> race. The current race is
>
> 1. Check poison, set bad_flags
> 2. poison clears in parallel
> 3. Check page->flag state in bad_page and trigger warning
>
> The code changes it to
>
> 1. Check poison, set bad_flags
> 2. poison clears in parallel
> 3. Check bad_flags and trigger warning

I think you got step 3 here wrong. It's "skip the warning since we have 
set bad_flags to hwpoison and bad_flags didn't change due to parallel 
unpoison".

Perhaps the question is why do we need to split the handling between 
check_new_page_bad() and bad_page() like this? It might have been 
different in the past, but seems like at this point we only look for 
hwpoison from check_new_page_bad(). But a cleanup can come later.

> There is warning either way. What did I miss?
>

  reply	other threads:[~2016-05-18  9:31 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-17  7:42 [PATCH v1] mm: bad_page() checks bad_flags instead of page->flags for hwpoison page Naoya Horiguchi
2016-05-17  7:42 ` Naoya Horiguchi
2016-05-18  7:30 ` Vlastimil Babka
2016-05-18  7:30   ` Vlastimil Babka
2016-05-18  9:21 ` Mel Gorman
2016-05-18  9:21   ` Mel Gorman
2016-05-18  9:31   ` Vlastimil Babka [this message]
2016-05-18  9:31     ` Vlastimil Babka
2016-05-18  9:52     ` Mel Gorman
2016-05-18  9:52       ` Mel Gorman
2016-05-18 10:17       ` Naoya Horiguchi
2016-05-18 10:17         ` Naoya Horiguchi
2016-05-18 10:09     ` [PATCH v2] mm: check_new_page_bad() directly returns in __PG_HWPOISON case Naoya Horiguchi
2016-05-18 10:09       ` Naoya Horiguchi
2016-05-18 14:03       ` Mel Gorman
2016-05-18 14:03         ` Mel Gorman
2016-05-20 14:27         ` Vlastimil Babka
2016-05-20 14:27           ` Vlastimil Babka

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=573C365B.6020807@suse.cz \
    --to=vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=nao.horiguchi@gmail.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.