From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758249AbZFPNuN (ORCPT ); Tue, 16 Jun 2009 09:50:13 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754860AbZFPNuD (ORCPT ); Tue, 16 Jun 2009 09:50:03 -0400 Received: from mga14.intel.com ([143.182.124.37]:5350 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751516AbZFPNuB (ORCPT ); Tue, 16 Jun 2009 09:50:01 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.42,228,1243839600"; d="scan'208";a="155110417" Date: Tue, 16 Jun 2009 21:49:44 +0800 From: Wu Fengguang To: Minchan Kim Cc: Andrew Morton , LKML , Andi Kleen , Ingo Molnar , Mel Gorman , Thomas Gleixner , "H. Peter Anvin" , Peter Zijlstra , Nick Piggin , Hugh Dickins , Andi Kleen , "riel@redhat.com" , "chris.mason@oracle.com" , "linux-mm@kvack.org" Subject: Re: [PATCH 09/22] HWPOISON: Handle hardware poisoned pages in try_to_unmap Message-ID: <20090616134944.GB7524@localhost> References: <20090615024520.786814520@intel.com> <20090615031253.530308256@intel.com> <28c262360906150609gd736bf7p7a57de1b81cedd97@mail.gmail.com> <20090615152612.GA11700@localhost> <20090616090308.bac3b1f7.minchan.kim@barrios-desktop> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20090616090308.bac3b1f7.minchan.kim@barrios-desktop> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 16, 2009 at 08:03:08AM +0800, Minchan Kim wrote: > On Mon, 15 Jun 2009 23:26:12 +0800 > Wu Fengguang wrote: > > > On Mon, Jun 15, 2009 at 09:09:03PM +0800, Minchan Kim wrote: > > > On Mon, Jun 15, 2009 at 11:45 AM, Wu Fengguang wrote: > > > > From: Andi Kleen > > > > > > > > When a page has the poison bit set replace the PTE with a poison entry. > > > > This causes the right error handling to be done later when a process runs > > > > into it. > > > > > > > > Also add a new flag to not do that (needed for the memory-failure handler > > > > later) > > > > > > > > Reviewed-by: Wu Fengguang > > > > Signed-off-by: Andi Kleen > > > > > > > > --- > > > >  include/linux/rmap.h |    1 + > > > >  mm/rmap.c            |    9 ++++++++- > > > >  2 files changed, 9 insertions(+), 1 deletion(-) > > > > > > > > --- sound-2.6.orig/mm/rmap.c > > > > +++ sound-2.6/mm/rmap.c > > > > @@ -958,7 +958,14 @@ static int try_to_unmap_one(struct page > > > >        /* Update high watermark before we lower rss */ > > > >        update_hiwater_rss(mm); > > > > > > > > -       if (PageAnon(page)) { > > > > +       if (PageHWPoison(page) && !(flags & TTU_IGNORE_HWPOISON)) { > > > > +               if (PageAnon(page)) > > > > +                       dec_mm_counter(mm, anon_rss); > > > > +               else if (!is_migration_entry(pte_to_swp_entry(*pte))) > > > > > > Isn't it straightforward to use !is_hwpoison_entry ? > > > > Good catch! It looks like a redundant check: the > > page_check_address() at the beginning of the function guarantees that > > !is_migration_entry() or !is_migration_entry() tests will all be TRUE. > > So let's do this? > It seems you expand my sight :) > > I don't know migration well. > How page_check_address guarantee it's not migration entry ? page_check_address() calls pte_present() which returns the (_PAGE_PRESENT | _PAGE_PROTNONE) bits. While x86-64 defines #define __swp_entry(type, offset) ((swp_entry_t) { \ ((type) << (_PAGE_BIT_PRESENT + 1)) \ | ((offset) << SWP_OFFSET_SHIFT) }) where SWP_OFFSET_SHIFT is defined to the bigger one of max(_PAGE_BIT_PROTNONE + 1, _PAGE_BIT_FILE + 1) = max(8+1, 6+1) = 9. So __swp_entry(type, offset) := (type << 1) | (offset << 9) We know that the swap type is 5 bits. So the bit 0 _PAGE_PRESENT and bit 8 _PAGE_PROTNONE will all be zero for swap entries. > In addtion, If the page is poison while we are going to > migration((PAGE_MIGRATION && migration) == TRUE), we should decrease > file_rss ? It will die on trying to migrate the poisoned page so we don't care the accounting. But normally the poisoned page shall already be isolated so we don't care that die either. Thanks, Fengguang > > > > -               else if (!is_migration_entry(pte_to_swp_entry(*pte))) > > +               else > > > > > > Thanks, > > Fengguang > > > -- > Kinds Regards > Minchan Kim