Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753257AbbBYPHl (ORCPT ); Wed, 25 Feb 2015 10:07:41 -0500 Received: from cantor2.suse.de ([195.135.220.15]:41900 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753190AbbBYPHj (ORCPT ); Wed, 25 Feb 2015 10:07:39 -0500 Date: Wed, 25 Feb 2015 16:07:36 +0100 From: Michal Hocko To: Minchan Kim Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Rik van Riel , Johannes Weiner , Mel Gorman , Shaohua Li , Yalin.Wang@sonymobile.com Subject: Re: [PATCH RFC 1/4] mm: throttle MADV_FREE Message-ID: <20150225150736.GF26680@dhcp22.suse.cz> References: <1424765897-27377-1-git-send-email-minchan@kernel.org> <20150224154318.GA14939@dhcp22.suse.cz> <20150225000809.GA6468@blaptop> <20150225071118.GA19115@blaptop> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150225071118.GA19115@blaptop> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1796 Lines: 66 On Wed 25-02-15 16:11:18, Minchan Kim wrote: [...] > diff --git a/mm/madvise.c b/mm/madvise.c > index 6d0fcb8921c2..d41ae76d3e54 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -274,7 +274,9 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr, > spinlock_t *ptl; > pte_t *pte, ptent; > struct page *page; > + swp_entry_t entry; > unsigned long next; > + int rss = 0; > > next = pmd_addr_end(addr, end); > if (pmd_trans_huge(*pmd)) { > @@ -293,9 +295,19 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr, > for (; addr != end; pte++, addr += PAGE_SIZE) { > ptent = *pte; > > - if (!pte_present(ptent)) > + if (pte_none(ptent)) > continue; > > + if (!pte_present(ptent)) { > + entry = pte_to_swp_entry(ptent); > + if (non_swap_entry(entry)) > + continue; > + rss--; > + free_swap_and_cache(entry); > + pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); > + continue; > + } Yes this makes sense. rss is a bit confusing because those pages are not resident. > + > page = vm_normal_page(vma, addr, ptent); > if (!page) > continue; > @@ -326,6 +338,14 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr, > set_pte_at(mm, addr, pte, ptent); > tlb_remove_tlb_entry(tlb, pte, addr); > } > + > + if (rss) { > + if (current->mm == mm) > + sync_mm_rss(mm); > + > + add_mm_counter(mm, MM_SWAPENTS, rss); > + } > + > arch_leave_lazy_mmu_mode(); > pte_unmap_unlock(pte - 1, ptl); > next: > -- > 1.9.1 -- Michal Hocko SUSE Labs -- 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/