From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx132.postini.com [74.125.245.132]) by kanga.kvack.org (Postfix) with SMTP id A53F96B004A for ; Thu, 23 Feb 2012 15:12:43 -0500 (EST) Date: Thu, 23 Feb 2012 12:12:38 -0800 From: Andrew Morton Subject: Re: [PATCH] mm: hugetlb: bail out unmapping after serving reference page Message-Id: <20120223121238.b597e7e4.akpm@linux-foundation.org> In-Reply-To: References: <20120222130659.d75b6f69.akpm@linux-foundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Hillf Danton Cc: Linux-MM , LKML , Michal Hocko , KAMEZAWA Hiroyuki , Hugh Dickins On Thu, 23 Feb 2012 21:05:41 +0800 Hillf Danton wrote: > and a follow-up cleanup also attached. Please, never put more than one patches in an email - it is rather a pain to manually unpick everything. > When unmapping given VM range, a couple of code duplicate, such as pte_page() > and huge_pte_none(), so a cleanup needed to compact them together. > > Signed-off-by: Hillf Danton > --- > > --- a/mm/hugetlb.c Thu Feb 23 20:13:06 2012 > +++ b/mm/hugetlb.c Thu Feb 23 20:30:16 2012 > @@ -2245,16 +2245,23 @@ void __unmap_hugepage_range(struct vm_ar > if (huge_pmd_unshare(mm, &address, ptep)) > continue; > > + pte = huge_ptep_get(ptep); > + if (huge_pte_none(pte)) > + continue; > + > + /* > + * HWPoisoned hugepage is already unmapped and dropped reference > + */ > + if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) > + continue; > + > + page = pte_page(pte); > /* > * If a reference page is supplied, it is because a specific > * page is being unmapped, not a range. Ensure the page we > * are about to unmap is the actual page of interest. > */ > if (ref_page) { > - pte = huge_ptep_get(ptep); > - if (huge_pte_none(pte)) > - continue; > - page = pte_page(pte); > if (page != ref_page) > continue; > > @@ -2267,16 +2274,6 @@ void __unmap_hugepage_range(struct vm_ar > } > > pte = huge_ptep_get_and_clear(mm, address, ptep); > - if (huge_pte_none(pte)) > - continue; > - > - /* > - * HWPoisoned hugepage is already unmapped and dropped reference > - */ > - if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) > - continue; > - > - page = pte_page(pte); > if (pte_dirty(pte)) > set_page_dirty(page); > list_add(&page->lru, &page_list); This changes behaviour when ref_page refers to a hwpoisoned page. -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: email@kvack.org