From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH 00/25] mm: Preemptibility -v7 Date: Thu, 17 Feb 2011 13:06:39 +0100 Message-ID: <1297944399.2413.1672.camel@twins> References: <20110125173111.720927511@chello.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20110125173111.720927511@chello.nl> Sender: owner-linux-mm@kvack.org To: Andrea Arcangeli Cc: Avi Kivity , Thomas Gleixner , Rik van Riel , Ingo Molnar , akpm@linux-foundation.org, Linus Torvalds , linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Benjamin Herrenschmidt , David Miller , Hugh Dickins , Mel Gorman , Nick Piggin , Paul McKenney , Yanmin Zhang List-Id: linux-arch.vger.kernel.org On Tue, 2011-01-25 at 18:31 +0100, Peter Zijlstra wrote: > - figure out what to do with sparc's tlb_batch lack of ->fullmm David, how does this look? --- Index: linux-2.6/arch/sparc/mm/tlb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.orig/arch/sparc/mm/tlb.c +++ linux-2.6/arch/sparc/mm/tlb.c @@ -43,7 +43,8 @@ void flush_tlb_pending(void) put_cpu_var(tlb_batch); } =20 -void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep,= pte_t orig) +void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr,=20 + pte_t *ptep, pte_t orig, int fullmm) { struct tlb_batch *tb =3D &get_cpu_var(tlb_batch); unsigned long nr; @@ -77,12 +78,10 @@ void tlb_batch_add(struct mm_struct *mm, =20 no_cache_flush: =20 - /* - if (tb->fullmm) { + if (fullmm) { put_cpu_var(tlb_batch); return; } - */ =20 nr =3D tb->tlb_nr; =20 Index: linux-2.6/arch/sparc/include/asm/pgtable_64.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.orig/arch/sparc/include/asm/pgtable_64.h +++ linux-2.6/arch/sparc/include/asm/pgtable_64.h @@ -655,9 +655,11 @@ static inline int pte_special(pte_t pte) #define pte_unmap(pte) do { } while (0) =20 /* Actual page table PTE updates. */ -extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t= *ptep, pte_t orig); +extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr,=20 + pte_t *ptep, pte_t orig, int fullmm); =20 -static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pt= e_t *ptep, pte_t pte) +static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,= =20 + pte_t *ptep, pte_t pte, int fullmm) { pte_t orig =3D *ptep; =20 @@ -670,12 +672,19 @@ static inline void set_pte_at(struct mm_ * and SUN4V pte layout, so this inline test is fine. */ if (likely(mm !=3D &init_mm) && (pte_val(orig) & _PAGE_VALID)) - tlb_batch_add(mm, addr, ptep, orig); + tlb_batch_add(mm, addr, ptep, orig, fullmm); } =20 +#define set_pte_at(mm,addr,ptep,pte) \ + __set_pte_at((mm), (addr), (ptep), (pte), 0) + #define pte_clear(mm,addr,ptep) \ set_pte_at((mm), (addr), (ptep), __pte(0UL)) =20 +#define __HAVE_ARCH_PTE_CLEAR_NOT_PRESENT_FULL +#define pte_clear_not_present_full(mm,addr,ptep,fullmm) \ + __set_pte_at((mm), (addr), (ptep), __pte(0UL), (fullmm)) + #ifdef DCACHE_ALIASING_POSSIBLE #define __HAVE_ARCH_MOVE_PTE #define move_pte(pte, prot, old_addr, new_addr) \ -- 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from bombadil.infradead.org ([18.85.46.34]:43815 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753532Ab1BQMH1 convert rfc822-to-8bit (ORCPT ); Thu, 17 Feb 2011 07:07:27 -0500 Subject: Re: [PATCH 00/25] mm: Preemptibility -v7 From: Peter Zijlstra In-Reply-To: <20110125173111.720927511@chello.nl> References: <20110125173111.720927511@chello.nl> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Date: Thu, 17 Feb 2011 13:06:39 +0100 Message-ID: <1297944399.2413.1672.camel@twins> Mime-Version: 1.0 Sender: linux-arch-owner@vger.kernel.org List-ID: To: Andrea Arcangeli Cc: Avi Kivity , Thomas Gleixner , Rik van Riel , Ingo Molnar , akpm@linux-foundation.org, Linus Torvalds , linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Benjamin Herrenschmidt , David Miller , Hugh Dickins , Mel Gorman , Nick Piggin , Paul McKenney , Yanmin Zhang Message-ID: <20110217120639.DxPqr-pTdfmS3fYDrwBK2sutMKmWQ8vs7PpW8qiYOsQ@z> On Tue, 2011-01-25 at 18:31 +0100, Peter Zijlstra wrote: > - figure out what to do with sparc's tlb_batch lack of ->fullmm David, how does this look? --- Index: linux-2.6/arch/sparc/mm/tlb.c =================================================================== --- linux-2.6.orig/arch/sparc/mm/tlb.c +++ linux-2.6/arch/sparc/mm/tlb.c @@ -43,7 +43,8 @@ void flush_tlb_pending(void) put_cpu_var(tlb_batch); } -void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig) +void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, + pte_t *ptep, pte_t orig, int fullmm) { struct tlb_batch *tb = &get_cpu_var(tlb_batch); unsigned long nr; @@ -77,12 +78,10 @@ void tlb_batch_add(struct mm_struct *mm, no_cache_flush: - /* - if (tb->fullmm) { + if (fullmm) { put_cpu_var(tlb_batch); return; } - */ nr = tb->tlb_nr; Index: linux-2.6/arch/sparc/include/asm/pgtable_64.h =================================================================== --- linux-2.6.orig/arch/sparc/include/asm/pgtable_64.h +++ linux-2.6/arch/sparc/include/asm/pgtable_64.h @@ -655,9 +655,11 @@ static inline int pte_special(pte_t pte) #define pte_unmap(pte) do { } while (0) /* Actual page table PTE updates. */ -extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig); +extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, + pte_t *ptep, pte_t orig, int fullmm); -static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte) +static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, + pte_t *ptep, pte_t pte, int fullmm) { pte_t orig = *ptep; @@ -670,12 +672,19 @@ static inline void set_pte_at(struct mm_ * and SUN4V pte layout, so this inline test is fine. */ if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) - tlb_batch_add(mm, addr, ptep, orig); + tlb_batch_add(mm, addr, ptep, orig, fullmm); } +#define set_pte_at(mm,addr,ptep,pte) \ + __set_pte_at((mm), (addr), (ptep), (pte), 0) + #define pte_clear(mm,addr,ptep) \ set_pte_at((mm), (addr), (ptep), __pte(0UL)) +#define __HAVE_ARCH_PTE_CLEAR_NOT_PRESENT_FULL +#define pte_clear_not_present_full(mm,addr,ptep,fullmm) \ + __set_pte_at((mm), (addr), (ptep), __pte(0UL), (fullmm)) + #ifdef DCACHE_ALIASING_POSSIBLE #define __HAVE_ARCH_MOVE_PTE #define move_pte(pte, prot, old_addr, new_addr) \