Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756403Ab3G2OJX (ORCPT ); Mon, 29 Jul 2013 10:09:23 -0400 Received: from relay.parallels.com ([195.214.232.42]:43394 "EHLO relay.parallels.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755821Ab3G2OJU (ORCPT ); Mon, 29 Jul 2013 10:09:20 -0400 Message-ID: <51F67777.6060609@parallels.com> Date: Mon, 29 Jul 2013 18:08:55 +0400 From: Pavel Emelyanov User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0 MIME-Version: 1.0 To: Cyrill Gorcunov CC: Linux MM , LKML , Andy Lutomirski , Andrew Morton , Matt Mackall , Xiao Guangrong , Marcelo Tosatti , KOSAKI Motohiro , Stephen Rothwell Subject: Re: [PATCH] mm: Save soft-dirty bits on file pages References: <20130726201807.GJ8661@moon> In-Reply-To: <20130726201807.GJ8661@moon> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.30.16.114] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1991 Lines: 56 On 07/27/2013 12:18 AM, Cyrill Gorcunov wrote: > Andy reported that if file page get reclaimed we loose soft-dirty bit > if it was there, so save _PAGE_BIT_SOFT_DIRTY bit when page address > get encoded into pte entry. Thus when #pf happens on such non-present > pte we can restore it back. > > Reported-by: Andy Lutomirski > Signed-off-by: Cyrill Gorcunov > Cc: Pavel Emelyanov > Cc: Andrew Morton > Cc: Matt Mackall > Cc: Xiao Guangrong > Cc: Marcelo Tosatti > Cc: KOSAKI Motohiro > Cc: Stephen Rothwell > --- > @@ -57,17 +57,25 @@ static int install_file_pte(struct mm_st > unsigned long addr, unsigned long pgoff, pgprot_t prot) > { > int err = -ENOMEM; > - pte_t *pte; > + pte_t *pte, ptfile; > spinlock_t *ptl; > > pte = get_locked_pte(mm, addr, &ptl); > if (!pte) > goto out; > > - if (!pte_none(*pte)) > + ptfile = pgoff_to_pte(pgoff); > + > + if (!pte_none(*pte)) { > +#ifdef CONFIG_MEM_SOFT_DIRTY > + if (pte_present(*pte) && > + pte_soft_dirty(*pte)) I think there's no need in wrapping every such if () inside #ifdef CONFIG_..., since the pte_soft_dirty() routine itself would be 0 for non-soft-dirty case and compiler would optimize this code out. > + pte_file_mksoft_dirty(ptfile); > +#endif > zap_pte(mm, vma, addr, pte); > + } > > - set_pte_at(mm, addr, pte, pgoff_to_pte(pgoff)); > + set_pte_at(mm, addr, pte, ptfile); > /* > * We don't need to run update_mmu_cache() here because the "file pte" > * being installed by install_file_pte() is not a real pte - it's a -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/