From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Wagin Subject: Re: [PATCH 34/34] mm: dynamically allocate page->ptl if it cannot be embedded to struct page Date: Wed, 20 Nov 2013 16:56:32 +0400 Message-ID: References: <1381428359-14843-1-git-send-email-kirill.shutemov@linux.intel.com> <1381428359-14843-35-git-send-email-kirill.shutemov@linux.intel.com> <20131120125325.07A42E0090@blue.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Return-path: In-Reply-To: <20131120125325.07A42E0090@blue.fi.intel.com> Sender: owner-linux-mm@kvack.org To: "Kirill A. Shutemov" Cc: Andrew Morton , Peter Zijlstra , Ingo Molnar , LKML , linux-mm@kvack.org, linux-arch@vger.kernel.org List-Id: linux-arch.vger.kernel.org 2013/11/20 Kirill A. Shutemov : > Andrey Wagin wrote: >> Hi Kirill, >> >> Looks like this patch adds memory leaks. >> [ 116.188310] kmemleak: 15672 new suspected memory leaks (see >> /sys/kernel/debug/kmemleak) >> unreferenced object 0xffff8800da45a350 (size 96): >> comm "dracut-initqueu", pid 93, jiffies 4294671391 (age 362.277s) >> hex dump (first 32 bytes): >> 07 00 07 00 ad 4e ad de ff ff ff ff 6b 6b 6b 6b .....N......kkkk >> ff ff ff ff ff ff ff ff 80 24 b4 82 ff ff ff ff .........$...... >> backtrace: >> [] kmemleak_alloc+0x5e/0xc0 >> [] kmem_cache_alloc_trace+0x113/0x290 >> [] __ptlock_alloc+0x27/0x50 >> [] __pmd_alloc+0x59/0x170 >> [] copy_page_range+0x38a/0x3e0 >> [] dup_mm+0x313/0x540 >> [] copy_process+0x161a/0x1880 >> [] do_fork+0x8b/0x360 >> [] SyS_clone+0x16/0x20 >> [] stub_clone+0x69/0x90 >> [] 0xffffffffffffffff >> >> It's quite serious, because my test host went to panic in a few hours. > > Sorry for that. > > Could you test patch below. Yes, it works. I found this too a few minutes ago:) diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index a7cccb6..44c366c 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -62,6 +62,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) { paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); + pgtable_pmd_page_dtor(virt_to_page(pmd)); /* * NOTE! For PAE, any changes to the top page-directory-pointer-table * entries need a full cr3 reload to flush. Thanks. > > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c > index a7cccb6d7fec..7be5809754cf 100644 > --- a/arch/x86/mm/pgtable.c > +++ b/arch/x86/mm/pgtable.c > @@ -61,6 +61,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) > #if PAGETABLE_LEVELS > 2 > void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > { > + struct page *page = virt_to_page(pmd); > paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); > /* > * NOTE! For PAE, any changes to the top page-directory-pointer-table > @@ -69,7 +70,8 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > #ifdef CONFIG_X86_PAE > tlb->need_flush_all = 1; > #endif > - tlb_remove_page(tlb, virt_to_page(pmd)); > + pgtable_pmd_page_dtor(page); > + tlb_remove_page(tlb, page); > } > > #if PAGETABLE_LEVELS > 3 > -- > Kirill A. Shutemov -- 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: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ve0-f169.google.com ([209.85.128.169]:52647 "EHLO mail-ve0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753119Ab3KTM4d (ORCPT ); Wed, 20 Nov 2013 07:56:33 -0500 MIME-Version: 1.0 In-Reply-To: <20131120125325.07A42E0090@blue.fi.intel.com> References: <1381428359-14843-1-git-send-email-kirill.shutemov@linux.intel.com> <1381428359-14843-35-git-send-email-kirill.shutemov@linux.intel.com> <20131120125325.07A42E0090@blue.fi.intel.com> Date: Wed, 20 Nov 2013 16:56:32 +0400 Message-ID: Subject: Re: [PATCH 34/34] mm: dynamically allocate page->ptl if it cannot be embedded to struct page From: Andrey Wagin Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-arch-owner@vger.kernel.org List-ID: To: "Kirill A. Shutemov" Cc: Andrew Morton , Peter Zijlstra , Ingo Molnar , LKML , linux-mm@kvack.org, linux-arch@vger.kernel.org Message-ID: <20131120125632.DwOmRfOCVr3l07lKbYgqVLUB3hqOvdN0b7YEMUTa5ZU@z> 2013/11/20 Kirill A. Shutemov : > Andrey Wagin wrote: >> Hi Kirill, >> >> Looks like this patch adds memory leaks. >> [ 116.188310] kmemleak: 15672 new suspected memory leaks (see >> /sys/kernel/debug/kmemleak) >> unreferenced object 0xffff8800da45a350 (size 96): >> comm "dracut-initqueu", pid 93, jiffies 4294671391 (age 362.277s) >> hex dump (first 32 bytes): >> 07 00 07 00 ad 4e ad de ff ff ff ff 6b 6b 6b 6b .....N......kkkk >> ff ff ff ff ff ff ff ff 80 24 b4 82 ff ff ff ff .........$...... >> backtrace: >> [] kmemleak_alloc+0x5e/0xc0 >> [] kmem_cache_alloc_trace+0x113/0x290 >> [] __ptlock_alloc+0x27/0x50 >> [] __pmd_alloc+0x59/0x170 >> [] copy_page_range+0x38a/0x3e0 >> [] dup_mm+0x313/0x540 >> [] copy_process+0x161a/0x1880 >> [] do_fork+0x8b/0x360 >> [] SyS_clone+0x16/0x20 >> [] stub_clone+0x69/0x90 >> [] 0xffffffffffffffff >> >> It's quite serious, because my test host went to panic in a few hours. > > Sorry for that. > > Could you test patch below. Yes, it works. I found this too a few minutes ago:) diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index a7cccb6..44c366c 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -62,6 +62,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) { paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); + pgtable_pmd_page_dtor(virt_to_page(pmd)); /* * NOTE! For PAE, any changes to the top page-directory-pointer-table * entries need a full cr3 reload to flush. Thanks. > > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c > index a7cccb6d7fec..7be5809754cf 100644 > --- a/arch/x86/mm/pgtable.c > +++ b/arch/x86/mm/pgtable.c > @@ -61,6 +61,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) > #if PAGETABLE_LEVELS > 2 > void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > { > + struct page *page = virt_to_page(pmd); > paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); > /* > * NOTE! For PAE, any changes to the top page-directory-pointer-table > @@ -69,7 +70,8 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > #ifdef CONFIG_X86_PAE > tlb->need_flush_all = 1; > #endif > - tlb_remove_page(tlb, virt_to_page(pmd)); > + pgtable_pmd_page_dtor(page); > + tlb_remove_page(tlb, page); > } > > #if PAGETABLE_LEVELS > 3 > -- > Kirill A. Shutemov