stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, John David Anglin <dave.anglin@bell.net>,
	Helge Deller <deller@gmx.de>
Subject: [PATCH 4.1 005/123] parisc: Fix some PTE/TLB race conditions and optimize __flush_tlb_range based on timing results
Date: Sat,  8 Aug 2015 15:08:03 -0700	[thread overview]
Message-ID: <20150808220718.009823870@linuxfoundation.org> (raw)
In-Reply-To: <20150808220717.771230091@linuxfoundation.org>

4.1-stable review patch.  If anyone has any objections, please let me know.

------------------

From: John David Anglin <dave.anglin@bell.net>

commit 01ab60570427caa24b9debc369e452e86cd9beb4 upstream.

The increased use of pdtlb/pitlb instructions seemed to increase the
frequency of random segmentation faults building packages. Further, we
had a number of cases where TLB inserts would repeatedly fail and all
forward progress would stop. The Haskell ghc package caused a lot of
trouble in this area. The final indication of a race in pte handling was
this syslog entry on sibaris (C8000):

 swap_free: Unused swap offset entry 00000004
 BUG: Bad page map in process mysqld  pte:00000100 pmd:019bbec5
 addr:00000000ec464000 vm_flags:00100073 anon_vma:0000000221023828 mapping: (null) index:ec464
 CPU: 1 PID: 9176 Comm: mysqld Not tainted 4.0.0-2-parisc64-smp #1 Debian 4.0.5-1
 Backtrace:
  [<0000000040173eb0>] show_stack+0x20/0x38
  [<0000000040444424>] dump_stack+0x9c/0x110
  [<00000000402a0d38>] print_bad_pte+0x1a8/0x278
  [<00000000402a28b8>] unmap_single_vma+0x3d8/0x770
  [<00000000402a4090>] zap_page_range+0xf0/0x198
  [<00000000402ba2a4>] SyS_madvise+0x404/0x8c0

Note that the pte value is 0 except for the accessed bit 0x100. This bit
shouldn't be set without the present bit.

It should be noted that the madvise system call is probably a trigger for many
of the random segmentation faults.

In looking at the kernel code, I found the following problems:

1) The pte_clear define didn't take TLB lock when clearing a pte.
2) We didn't test pte present bit inside lock in exception support.
3) The pte and tlb locks needed to merged in order to ensure consistency
between page table and TLB. This also has the effect of serializing TLB
broadcasts on SMP systems.

The attached change implements the above and a few other tweaks to try
to improve performance. Based on the timing code, TLB purges are very
slow (e.g., ~ 209 cycles per page on rp3440). Thus, I think it
beneficial to test the split_tlb variable to avoid duplicate purges.
Probably, all PA 2.0 machines have combined TLBs.

I dropped using __flush_tlb_range in flush_tlb_mm as I realized all
applications and most threads have a stack size that is too large to
make this useful. I added some comments to this effect.

Since implementing 1 through 3, I haven't had any random segmentation
faults on mx3210 (rp3440) in about one week of building code and running
as a Debian buildd.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/parisc/include/asm/pgtable.h  |   57 ++++++++----
 arch/parisc/include/asm/tlbflush.h |   53 ++++++------
 arch/parisc/kernel/cache.c         |  105 +++++++++++++++--------
 arch/parisc/kernel/entry.S         |  163 +++++++++++++++++--------------------
 arch/parisc/kernel/traps.c         |    4 
 5 files changed, 213 insertions(+), 169 deletions(-)

--- a/arch/parisc/include/asm/pgtable.h
+++ b/arch/parisc/include/asm/pgtable.h
@@ -16,7 +16,7 @@
 #include <asm/processor.h>
 #include <asm/cache.h>
 
-extern spinlock_t pa_dbit_lock;
+extern spinlock_t pa_tlb_lock;
 
 /*
  * kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
@@ -33,6 +33,19 @@ extern spinlock_t pa_dbit_lock;
  */
 #define kern_addr_valid(addr)	(1)
 
+/* Purge data and instruction TLB entries.  Must be called holding
+ * the pa_tlb_lock.  The TLB purge instructions are slow on SMP
+ * machines since the purge must be broadcast to all CPUs.
+ */
+
+static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
+{
+	mtsp(mm->context, 1);
+	pdtlb(addr);
+	if (unlikely(split_tlb))
+		pitlb(addr);
+}
+
 /* Certain architectures need to do special things when PTEs
  * within a page table are directly modified.  Thus, the following
  * hook is made available.
@@ -42,15 +55,20 @@ extern spinlock_t pa_dbit_lock;
                 *(pteptr) = (pteval);                           \
         } while(0)
 
-extern void purge_tlb_entries(struct mm_struct *, unsigned long);
-
-#define set_pte_at(mm, addr, ptep, pteval)                      \
-	do {                                                    \
+#define pte_inserted(x)						\
+	((pte_val(x) & (_PAGE_PRESENT|_PAGE_ACCESSED))		\
+	 == (_PAGE_PRESENT|_PAGE_ACCESSED))
+
+#define set_pte_at(mm, addr, ptep, pteval)			\
+	do {							\
+		pte_t old_pte;					\
 		unsigned long flags;				\
-		spin_lock_irqsave(&pa_dbit_lock, flags);	\
-		set_pte(ptep, pteval);                          \
-		purge_tlb_entries(mm, addr);                    \
-		spin_unlock_irqrestore(&pa_dbit_lock, flags);	\
+		spin_lock_irqsave(&pa_tlb_lock, flags);		\
+		old_pte = *ptep;				\
+		set_pte(ptep, pteval);				\
+		if (pte_inserted(old_pte))			\
+			purge_tlb_entries(mm, addr);		\
+		spin_unlock_irqrestore(&pa_tlb_lock, flags);	\
 	} while (0)
 
 #endif /* !__ASSEMBLY__ */
@@ -268,7 +286,7 @@ extern unsigned long *empty_zero_page;
 
 #define pte_none(x)     (pte_val(x) == 0)
 #define pte_present(x)	(pte_val(x) & _PAGE_PRESENT)
-#define pte_clear(mm,addr,xp)	do { pte_val(*(xp)) = 0; } while (0)
+#define pte_clear(mm, addr, xp)  set_pte_at(mm, addr, xp, __pte(0))
 
 #define pmd_flag(x)	(pmd_val(x) & PxD_FLAG_MASK)
 #define pmd_address(x)	((unsigned long)(pmd_val(x) &~ PxD_FLAG_MASK) << PxD_VALUE_SHIFT)
@@ -435,15 +453,15 @@ static inline int ptep_test_and_clear_yo
 	if (!pte_young(*ptep))
 		return 0;
 
-	spin_lock_irqsave(&pa_dbit_lock, flags);
+	spin_lock_irqsave(&pa_tlb_lock, flags);
 	pte = *ptep;
 	if (!pte_young(pte)) {
-		spin_unlock_irqrestore(&pa_dbit_lock, flags);
+		spin_unlock_irqrestore(&pa_tlb_lock, flags);
 		return 0;
 	}
 	set_pte(ptep, pte_mkold(pte));
 	purge_tlb_entries(vma->vm_mm, addr);
-	spin_unlock_irqrestore(&pa_dbit_lock, flags);
+	spin_unlock_irqrestore(&pa_tlb_lock, flags);
 	return 1;
 }
 
@@ -453,11 +471,12 @@ static inline pte_t ptep_get_and_clear(s
 	pte_t old_pte;
 	unsigned long flags;
 
-	spin_lock_irqsave(&pa_dbit_lock, flags);
+	spin_lock_irqsave(&pa_tlb_lock, flags);
 	old_pte = *ptep;
-	pte_clear(mm,addr,ptep);
-	purge_tlb_entries(mm, addr);
-	spin_unlock_irqrestore(&pa_dbit_lock, flags);
+	set_pte(ptep, __pte(0));
+	if (pte_inserted(old_pte))
+		purge_tlb_entries(mm, addr);
+	spin_unlock_irqrestore(&pa_tlb_lock, flags);
 
 	return old_pte;
 }
@@ -465,10 +484,10 @@ static inline pte_t ptep_get_and_clear(s
 static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
 {
 	unsigned long flags;
-	spin_lock_irqsave(&pa_dbit_lock, flags);
+	spin_lock_irqsave(&pa_tlb_lock, flags);
 	set_pte(ptep, pte_wrprotect(*ptep));
 	purge_tlb_entries(mm, addr);
-	spin_unlock_irqrestore(&pa_dbit_lock, flags);
+	spin_unlock_irqrestore(&pa_tlb_lock, flags);
 }
 
 #define pte_same(A,B)	(pte_val(A) == pte_val(B))
--- a/arch/parisc/include/asm/tlbflush.h
+++ b/arch/parisc/include/asm/tlbflush.h
@@ -13,6 +13,9 @@
  * active at any one time on the Merced bus.  This tlb purge
  * synchronisation is fairly lightweight and harmless so we activate
  * it on all systems not just the N class.
+
+ * It is also used to ensure PTE updates are atomic and consistent
+ * with the TLB.
  */
 extern spinlock_t pa_tlb_lock;
 
@@ -24,20 +27,24 @@ extern void flush_tlb_all_local(void *);
 
 #define smp_flush_tlb_all()	flush_tlb_all()
 
+int __flush_tlb_range(unsigned long sid,
+	unsigned long start, unsigned long end);
+
+#define flush_tlb_range(vma, start, end) \
+	__flush_tlb_range((vma)->vm_mm->context, start, end)
+
+#define flush_tlb_kernel_range(start, end) \
+	__flush_tlb_range(0, start, end)
+
 /*
  * flush_tlb_mm()
  *
- * XXX This code is NOT valid for HP-UX compatibility processes,
- * (although it will probably work 99% of the time). HP-UX
- * processes are free to play with the space id's and save them
- * over long periods of time, etc. so we have to preserve the
- * space and just flush the entire tlb. We need to check the
- * personality in order to do that, but the personality is not
- * currently being set correctly.
- *
- * Of course, Linux processes could do the same thing, but
- * we don't support that (and the compilers, dynamic linker,
- * etc. do not do that).
+ * The code to switch to a new context is NOT valid for processes
+ * which play with the space id's.  Thus, we have to preserve the
+ * space and just flush the entire tlb.  However, the compilers,
+ * dynamic linker, etc, do not manipulate space id's, so there
+ * could be a significant performance benefit in switching contexts
+ * and not flushing the whole tlb.
  */
 
 static inline void flush_tlb_mm(struct mm_struct *mm)
@@ -45,10 +52,18 @@ static inline void flush_tlb_mm(struct m
 	BUG_ON(mm == &init_mm); /* Should never happen */
 
 #if 1 || defined(CONFIG_SMP)
+	/* Except for very small threads, flushing the whole TLB is
+	 * faster than using __flush_tlb_range.  The pdtlb and pitlb
+	 * instructions are very slow because of the TLB broadcast.
+	 * It might be faster to do local range flushes on all CPUs
+	 * on PA 2.0 systems.
+	 */
 	flush_tlb_all();
 #else
 	/* FIXME: currently broken, causing space id and protection ids
-	 *  to go out of sync, resulting in faults on userspace accesses.
+	 * to go out of sync, resulting in faults on userspace accesses.
+	 * This approach needs further investigation since running many
+	 * small applications (e.g., GCC testsuite) is faster on HP-UX.
 	 */
 	if (mm) {
 		if (mm->context != 0)
@@ -65,22 +80,12 @@ static inline void flush_tlb_page(struct
 {
 	unsigned long flags, sid;
 
-	/* For one page, it's not worth testing the split_tlb variable */
-
-	mb();
 	sid = vma->vm_mm->context;
 	purge_tlb_start(flags);
 	mtsp(sid, 1);
 	pdtlb(addr);
-	pitlb(addr);
+	if (unlikely(split_tlb))
+		pitlb(addr);
 	purge_tlb_end(flags);
 }
-
-void __flush_tlb_range(unsigned long sid,
-	unsigned long start, unsigned long end);
-
-#define flush_tlb_range(vma,start,end) __flush_tlb_range((vma)->vm_mm->context,start,end)
-
-#define flush_tlb_kernel_range(start, end) __flush_tlb_range(0,start,end)
-
 #endif
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -342,12 +342,15 @@ EXPORT_SYMBOL(flush_data_cache_local);
 EXPORT_SYMBOL(flush_kernel_icache_range_asm);
 
 #define FLUSH_THRESHOLD 0x80000 /* 0.5MB */
-int parisc_cache_flush_threshold __read_mostly = FLUSH_THRESHOLD;
+static unsigned long parisc_cache_flush_threshold __read_mostly = FLUSH_THRESHOLD;
+
+#define FLUSH_TLB_THRESHOLD (2*1024*1024) /* 2MB initial TLB threshold */
+static unsigned long parisc_tlb_flush_threshold __read_mostly = FLUSH_TLB_THRESHOLD;
 
 void __init parisc_setup_cache_timing(void)
 {
 	unsigned long rangetime, alltime;
-	unsigned long size;
+	unsigned long size, start;
 
 	alltime = mfctl(16);
 	flush_data_cache();
@@ -364,14 +367,43 @@ void __init parisc_setup_cache_timing(vo
 	/* Racy, but if we see an intermediate value, it's ok too... */
 	parisc_cache_flush_threshold = size * alltime / rangetime;
 
-	parisc_cache_flush_threshold = (parisc_cache_flush_threshold + L1_CACHE_BYTES - 1) &~ (L1_CACHE_BYTES - 1); 
+	parisc_cache_flush_threshold = L1_CACHE_ALIGN(parisc_cache_flush_threshold);
 	if (!parisc_cache_flush_threshold)
 		parisc_cache_flush_threshold = FLUSH_THRESHOLD;
 
 	if (parisc_cache_flush_threshold > cache_info.dc_size)
 		parisc_cache_flush_threshold = cache_info.dc_size;
 
-	printk(KERN_INFO "Setting cache flush threshold to %x (%d CPUs online)\n", parisc_cache_flush_threshold, num_online_cpus());
+	printk(KERN_INFO "Setting cache flush threshold to %lu kB\n",
+		parisc_cache_flush_threshold/1024);
+
+	/* calculate TLB flush threshold */
+
+	alltime = mfctl(16);
+	flush_tlb_all();
+	alltime = mfctl(16) - alltime;
+
+	size = PAGE_SIZE;
+	start = (unsigned long) _text;
+	rangetime = mfctl(16);
+	while (start < (unsigned long) _end) {
+		flush_tlb_kernel_range(start, start + PAGE_SIZE);
+		start += PAGE_SIZE;
+		size += PAGE_SIZE;
+	}
+	rangetime = mfctl(16) - rangetime;
+
+	printk(KERN_DEBUG "Whole TLB flush %lu cycles, flushing %lu bytes %lu cycles\n",
+		alltime, size, rangetime);
+
+	parisc_tlb_flush_threshold = size * alltime / rangetime;
+	parisc_tlb_flush_threshold *= num_online_cpus();
+	parisc_tlb_flush_threshold = PAGE_ALIGN(parisc_tlb_flush_threshold);
+	if (!parisc_tlb_flush_threshold)
+		parisc_tlb_flush_threshold = FLUSH_TLB_THRESHOLD;
+
+	printk(KERN_INFO "Setting TLB flush threshold to %lu kB\n",
+		parisc_tlb_flush_threshold/1024);
 }
 
 extern void purge_kernel_dcache_page_asm(unsigned long);
@@ -403,48 +435,45 @@ void copy_user_page(void *vto, void *vfr
 }
 EXPORT_SYMBOL(copy_user_page);
 
-void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
+/* __flush_tlb_range()
+ *
+ * returns 1 if all TLBs were flushed.
+ */
+int __flush_tlb_range(unsigned long sid, unsigned long start,
+		      unsigned long end)
 {
-	unsigned long flags;
-
-	/* Note: purge_tlb_entries can be called at startup with
-	   no context.  */
+	unsigned long flags, size;
 
-	purge_tlb_start(flags);
-	mtsp(mm->context, 1);
-	pdtlb(addr);
-	pitlb(addr);
-	purge_tlb_end(flags);
-}
-EXPORT_SYMBOL(purge_tlb_entries);
-
-void __flush_tlb_range(unsigned long sid, unsigned long start,
-		       unsigned long end)
-{
-	unsigned long npages;
-
-	npages = ((end - (start & PAGE_MASK)) + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
-	if (npages >= 512)  /* 2MB of space: arbitrary, should be tuned */
+	size = (end - start);
+	if (size >= parisc_tlb_flush_threshold) {
 		flush_tlb_all();
-	else {
-		unsigned long flags;
+		return 1;
+	}
+
+	/* Purge TLB entries for small ranges using the pdtlb and
+	   pitlb instructions.  These instructions execute locally
+	   but cause a purge request to be broadcast to other TLBs.  */
+	if (likely(!split_tlb)) {
+		while (start < end) {
+			purge_tlb_start(flags);
+			mtsp(sid, 1);
+			pdtlb(start);
+			purge_tlb_end(flags);
+			start += PAGE_SIZE;
+		}
+		return 0;
+	}
 
+	/* split TLB case */
+	while (start < end) {
 		purge_tlb_start(flags);
 		mtsp(sid, 1);
-		if (split_tlb) {
-			while (npages--) {
-				pdtlb(start);
-				pitlb(start);
-				start += PAGE_SIZE;
-			}
-		} else {
-			while (npages--) {
-				pdtlb(start);
-				start += PAGE_SIZE;
-			}
-		}
+		pdtlb(start);
+		pitlb(start);
 		purge_tlb_end(flags);
+		start += PAGE_SIZE;
 	}
+	return 0;
 }
 
 static void cacheflush_h_tmp_function(void *dummy)
--- a/arch/parisc/kernel/entry.S
+++ b/arch/parisc/kernel/entry.S
@@ -45,7 +45,7 @@
 	.level 2.0
 #endif
 
-	.import         pa_dbit_lock,data
+	.import		pa_tlb_lock,data
 
 	/* space_to_prot macro creates a prot id from a space id */
 
@@ -420,8 +420,8 @@
 	SHLREG		%r9,PxD_VALUE_SHIFT,\pmd
 	extru		\va,31-PAGE_SHIFT,ASM_BITS_PER_PTE,\index
 	dep		%r0,31,PAGE_SHIFT,\pmd  /* clear offset */
-	shladd		\index,BITS_PER_PTE_ENTRY,\pmd,\pmd
-	LDREG		%r0(\pmd),\pte		/* pmd is now pte */
+	shladd		\index,BITS_PER_PTE_ENTRY,\pmd,\pmd /* pmd is now pte */
+	LDREG		%r0(\pmd),\pte
 	bb,>=,n		\pte,_PAGE_PRESENT_BIT,\fault
 	.endm
 
@@ -453,57 +453,53 @@
 	L2_ptep		\pgd,\pte,\index,\va,\fault
 	.endm
 
-	/* Acquire pa_dbit_lock lock. */
-	.macro		dbit_lock	spc,tmp,tmp1
+	/* Acquire pa_tlb_lock lock and recheck page is still present. */
+	.macro		tlb_lock	spc,ptp,pte,tmp,tmp1,fault
 #ifdef CONFIG_SMP
 	cmpib,COND(=),n	0,\spc,2f
-	load32		PA(pa_dbit_lock),\tmp
+	load32		PA(pa_tlb_lock),\tmp
 1:	LDCW		0(\tmp),\tmp1
 	cmpib,COND(=)	0,\tmp1,1b
 	nop
+	LDREG		0(\ptp),\pte
+	bb,<,n		\pte,_PAGE_PRESENT_BIT,2f
+	b		\fault
+	stw		 \spc,0(\tmp)
 2:
 #endif
 	.endm
 
-	/* Release pa_dbit_lock lock without reloading lock address. */
-	.macro		dbit_unlock0	spc,tmp
+	/* Release pa_tlb_lock lock without reloading lock address. */
+	.macro		tlb_unlock0	spc,tmp
 #ifdef CONFIG_SMP
 	or,COND(=)	%r0,\spc,%r0
 	stw             \spc,0(\tmp)
 #endif
 	.endm
 
-	/* Release pa_dbit_lock lock. */
-	.macro		dbit_unlock1	spc,tmp
+	/* Release pa_tlb_lock lock. */
+	.macro		tlb_unlock1	spc,tmp
 #ifdef CONFIG_SMP
-	load32		PA(pa_dbit_lock),\tmp
-	dbit_unlock0	\spc,\tmp
+	load32		PA(pa_tlb_lock),\tmp
+	tlb_unlock0	\spc,\tmp
 #endif
 	.endm
 
 	/* Set the _PAGE_ACCESSED bit of the PTE.  Be clever and
 	 * don't needlessly dirty the cache line if it was already set */
-	.macro		update_ptep	spc,ptep,pte,tmp,tmp1
-#ifdef CONFIG_SMP
-	or,COND(=)	%r0,\spc,%r0
-	LDREG		0(\ptep),\pte
-#endif
+	.macro		update_accessed	ptp,pte,tmp,tmp1
 	ldi		_PAGE_ACCESSED,\tmp1
 	or		\tmp1,\pte,\tmp
 	and,COND(<>)	\tmp1,\pte,%r0
-	STREG		\tmp,0(\ptep)
+	STREG		\tmp,0(\ptp)
 	.endm
 
 	/* Set the dirty bit (and accessed bit).  No need to be
 	 * clever, this is only used from the dirty fault */
-	.macro		update_dirty	spc,ptep,pte,tmp
-#ifdef CONFIG_SMP
-	or,COND(=)	%r0,\spc,%r0
-	LDREG		0(\ptep),\pte
-#endif
+	.macro		update_dirty	ptp,pte,tmp
 	ldi		_PAGE_ACCESSED|_PAGE_DIRTY,\tmp
 	or		\tmp,\pte,\pte
-	STREG		\pte,0(\ptep)
+	STREG		\pte,0(\ptp)
 	.endm
 
 	/* bitshift difference between a PFN (based on kernel's PAGE_SIZE)
@@ -1148,14 +1144,14 @@ dtlb_miss_20w:
 
 	L3_ptep		ptp,pte,t0,va,dtlb_check_alias_20w
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dtlb_check_alias_20w
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 	
 	idtlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1174,14 +1170,14 @@ nadtlb_miss_20w:
 
 	L3_ptep		ptp,pte,t0,va,nadtlb_check_alias_20w
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,nadtlb_check_alias_20w
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
 	idtlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1202,20 +1198,20 @@ dtlb_miss_11:
 
 	L2_ptep		ptp,pte,t0,va,dtlb_check_alias_11
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dtlb_check_alias_11
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb_11	spc,pte,prot
 
-	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
+	mfsp		%sr1,t1  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
 
 	idtlba		pte,(%sr1,va)
 	idtlbp		prot,(%sr1,va)
 
-	mtsp		t0, %sr1	/* Restore sr1 */
-	dbit_unlock1	spc,t0
+	mtsp		t1, %sr1	/* Restore sr1 */
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1235,21 +1231,20 @@ nadtlb_miss_11:
 
 	L2_ptep		ptp,pte,t0,va,nadtlb_check_alias_11
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,nadtlb_check_alias_11
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb_11	spc,pte,prot
 
-
-	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
+	mfsp		%sr1,t1  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
 
 	idtlba		pte,(%sr1,va)
 	idtlbp		prot,(%sr1,va)
 
-	mtsp		t0, %sr1	/* Restore sr1 */
-	dbit_unlock1	spc,t0
+	mtsp		t1, %sr1	/* Restore sr1 */
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1269,16 +1264,16 @@ dtlb_miss_20:
 
 	L2_ptep		ptp,pte,t0,va,dtlb_check_alias_20
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dtlb_check_alias_20
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
-	f_extend	pte,t0
+	f_extend	pte,t1
 
 	idtlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1297,16 +1292,16 @@ nadtlb_miss_20:
 
 	L2_ptep		ptp,pte,t0,va,nadtlb_check_alias_20
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,nadtlb_check_alias_20
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
-	f_extend	pte,t0
+	f_extend	pte,t1
 	
-        idtlbt          pte,prot
-	dbit_unlock1	spc,t0
+	idtlbt		pte,prot
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1406,14 +1401,14 @@ itlb_miss_20w:
 
 	L3_ptep		ptp,pte,t0,va,itlb_fault
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,itlb_fault
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 	
 	iitlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1430,14 +1425,14 @@ naitlb_miss_20w:
 
 	L3_ptep		ptp,pte,t0,va,naitlb_check_alias_20w
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,naitlb_check_alias_20w
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
 	iitlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1458,20 +1453,20 @@ itlb_miss_11:
 
 	L2_ptep		ptp,pte,t0,va,itlb_fault
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,itlb_fault
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb_11	spc,pte,prot
 
-	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
+	mfsp		%sr1,t1  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
 
 	iitlba		pte,(%sr1,va)
 	iitlbp		prot,(%sr1,va)
 
-	mtsp		t0, %sr1	/* Restore sr1 */
-	dbit_unlock1	spc,t0
+	mtsp		t1, %sr1	/* Restore sr1 */
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1482,20 +1477,20 @@ naitlb_miss_11:
 
 	L2_ptep		ptp,pte,t0,va,naitlb_check_alias_11
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,naitlb_check_alias_11
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb_11	spc,pte,prot
 
-	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
+	mfsp		%sr1,t1  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
 
 	iitlba		pte,(%sr1,va)
 	iitlbp		prot,(%sr1,va)
 
-	mtsp		t0, %sr1	/* Restore sr1 */
-	dbit_unlock1	spc,t0
+	mtsp		t1, %sr1	/* Restore sr1 */
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1516,16 +1511,16 @@ itlb_miss_20:
 
 	L2_ptep		ptp,pte,t0,va,itlb_fault
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,itlb_fault
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
-	f_extend	pte,t0	
+	f_extend	pte,t1
 
 	iitlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1536,16 +1531,16 @@ naitlb_miss_20:
 
 	L2_ptep		ptp,pte,t0,va,naitlb_check_alias_20
 
-	dbit_lock	spc,t0,t1
-	update_ptep	spc,ptp,pte,t0,t1
+	tlb_lock	spc,ptp,pte,t0,t1,naitlb_check_alias_20
+	update_accessed	ptp,pte,t0,t1
 
 	make_insert_tlb	spc,pte,prot
 
-	f_extend	pte,t0
+	f_extend	pte,t1
 
 	iitlbt          pte,prot
-	dbit_unlock1	spc,t0
 
+	tlb_unlock1	spc,t0
 	rfir
 	nop
 
@@ -1568,14 +1563,14 @@ dbit_trap_20w:
 
 	L3_ptep		ptp,pte,t0,va,dbit_fault
 
-	dbit_lock	spc,t0,t1
-	update_dirty	spc,ptp,pte,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dbit_fault
+	update_dirty	ptp,pte,t1
 
 	make_insert_tlb	spc,pte,prot
 		
 	idtlbt          pte,prot
-	dbit_unlock0	spc,t0
 
+	tlb_unlock0	spc,t0
 	rfir
 	nop
 #else
@@ -1588,8 +1583,8 @@ dbit_trap_11:
 
 	L2_ptep		ptp,pte,t0,va,dbit_fault
 
-	dbit_lock	spc,t0,t1
-	update_dirty	spc,ptp,pte,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dbit_fault
+	update_dirty	ptp,pte,t1
 
 	make_insert_tlb_11	spc,pte,prot
 
@@ -1600,8 +1595,8 @@ dbit_trap_11:
 	idtlbp		prot,(%sr1,va)
 
 	mtsp            t1, %sr1     /* Restore sr1 */
-	dbit_unlock0	spc,t0
 
+	tlb_unlock0	spc,t0
 	rfir
 	nop
 
@@ -1612,16 +1607,16 @@ dbit_trap_20:
 
 	L2_ptep		ptp,pte,t0,va,dbit_fault
 
-	dbit_lock	spc,t0,t1
-	update_dirty	spc,ptp,pte,t1
+	tlb_lock	spc,ptp,pte,t0,t1,dbit_fault
+	update_dirty	ptp,pte,t1
 
 	make_insert_tlb	spc,pte,prot
 
 	f_extend	pte,t1
 	
-        idtlbt          pte,prot
-	dbit_unlock0	spc,t0
+	idtlbt		pte,prot
 
+	tlb_unlock0	spc,t0
 	rfir
 	nop
 #endif
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -43,10 +43,6 @@
 
 #include "../math-emu/math-emu.h"	/* for handle_fpe() */
 
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
-DEFINE_SPINLOCK(pa_dbit_lock);
-#endif
-
 static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
 	struct pt_regs *regs);
 



  parent reply	other threads:[~2015-08-08 22:08 UTC|newest]

Thread overview: 139+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-08 22:07 [PATCH 4.1 000/123] 4.1.5-stable review Greg Kroah-Hartman
2015-08-08 22:07 ` [PATCH 4.1 001/123] cxl: Fix off by one error allowing subsequent mmap page to be accessed Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 002/123] cxl: Check if afu is not null in cxl_slbia Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 003/123] powerpc/powernv: Fix race in updating core_idle_state Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 004/123] Revert "Input: synaptics - allocate 3 slots to keep stability in image sensors" Greg Kroah-Hartman
2015-08-08 22:08 ` Greg Kroah-Hartman [this message]
2015-08-08 22:08 ` [PATCH 4.1 006/123] parisc: mm: Fix a memory leak related to pmd not attached to the pgd Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 007/123] ARM: pxa: fix dm9000 platform data regression Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 008/123] ARM: dts: dra7x-evm: Prevent glitch on DCAN1 pinmux Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 009/123] ARM: dts: am57xx-beagle-x15: Provide supply for usb2_phy2 Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 010/123] ARM: 8404/1: dma-mapping: fix off-by-one error in bitmap size check Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 011/123] ARM: imx6: gpc: always enable PU domain if CONFIG_PM is not set Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 012/123] MIPS: Fix erroneous JR emulation for MIPS R6 Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 013/123] MIPS: c-r4k: Fix cache flushing for MT cores Greg Kroah-Hartman
2015-08-10 18:36   ` [4.1,013/123] " Leonid Yegoshin
2015-08-10 18:49     ` gregkh
2015-08-10 19:12       ` Leonid Yegoshin
2015-08-10 19:17         ` Markos Chandras
2015-08-10 19:19         ` gregkh
2015-08-10 19:22           ` Leonid Yegoshin
2015-08-08 22:08 ` [PATCH 4.1 014/123] MIPS: Require O32 FP64 support for MIPS64 with O32 compat Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 015/123] MIPS: fpu.h: Allow 64-bit FPU on a 64-bit MIPS R6 CPU Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 016/123] can: replace timestamp as unique skb attribute Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 017/123] can: rcar_can: fix IRQ check Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 018/123] can: c_can: Fix default pinmux glitch at init Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 019/123] can: rcar_can: print signed IRQ # Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 020/123] can: mcp251x: fix resume when device is down Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 021/123] freeing unlinked file indefinitely delayed Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 022/123] x86/init: Clear init_level4_pgt earlier Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 023/123] x86/kasan: Fix KASAN shadow region page tables Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 024/123] x86/kasan: Flush TLBs after switching CR3 Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 025/123] x86/kasan: Fix boot crash on AMD processors Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 026/123] crypto: omap-des - Fix unmapping of dma channels Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 027/123] s390/process: fix sfpc inline assembly Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 028/123] s390/sclp: clear upper register halves in _sclp_print_early Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 029/123] s390/nmi: fix vector register corruption Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 030/123] s390/bpf: clear correct BPF accumulator register Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 031/123] s390/cachinfo: add missing facility check to init_cache_level() Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 032/123] ARC: Override toplevel default -O2 with -O3 Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 033/123] ARC: make sure instruction_pointer() returns unsigned value Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 034/123] kbuild: Allow arch Makefiles to override {cpp,ld,c}flags Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 035/123] bio integrity: do not assume bio_integrity_pool exists if bioset exists Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 036/123] dma-debug: skip debug_dma_assert_idle() when disabled Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 039/123] ALSA: line6: Fix -EBUSY error during active monitoring Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 040/123] ALSA: pcm: Fix lockdep warning with nonatomic PCM ops Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 041/123] ALSA: hda - Add headset mic support for Acer Aspire V5-573G Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 042/123] ALSA: hda: add new AMD PCI IDs with proper driver caps Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 043/123] ALSA: hda - Add new GPU codec ID 0x10de007d to snd-hda Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 044/123] ALSA: hda - Add headset mic pin quirk for a Dell device Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 045/123] ALSA: hda - Apply fixup for another Toshiba Satellite S50D Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 046/123] ALSA: hda - Apply a fixup to Dell Vostro 5480 Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 047/123] ALSA: usb-audio: add dB range mapping for some devices Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 048/123] ALSA: hda - Fix MacBook Pro 5,2 quirk Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 049/123] x86, perf: Fix static_key bug in load_mm_cr4() Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 050/123] Revert "dm: only run the queue on completion if congested or no requests pending" Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 051/123] irqchip/gicv3-its: Fix mapping of LPIs to collections Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 052/123] scsi: fix host max depth checking for the queue_depth sysfs interface Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 053/123] scsi: fix memory leak with scsi-mq Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 055/123] drivers: clk: st: Fix flexgen lock init Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 056/123] drivers: clk: st: Fix mux bit-setting for Cortex A9 clocks Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 057/123] drivers: clk: st: Incorrect register offset used for lock_status Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 058/123] mac80211: clear subdir_stations when removing debugfs Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 060/123] mnt: Clarify and correct the disconnect logic in umount_tree Greg Kroah-Hartman
2015-08-08 22:08 ` [PATCH 4.1 061/123] mnt: In detach_mounts detach the appropriate unmounted mount Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 062/123] ftrace: Fix breakage of set_ftrace_pid Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 063/123] iommu/vt-d: Fix VM domain ID leak Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 064/123] mmc: omap_hsmmc: Fix DTO and DCRC handling Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 065/123] mmc: sdhci check parameters before call dma_free_coherent Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 066/123] mmc: sdhci-esdhc: Make 8BIT bus work Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 067/123] mmc: sdhci-pxav3: fix platform_data is not initialized Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 068/123] HID: cp2112: fix to force single data-report reply Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 069/123] iwlwifi: mvm: fix antenna selection when BT is active Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 070/123] iwlwifi: nvm: remove mac address byte swapping in 8000 family Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 071/123] iwlwifi: pcie: prepare the device before accessing it Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 072/123] md/raid1: fix test for was read error from last working device Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 073/123] spi: img-spfi: fix support for speeds up to 1/4th input clock Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 074/123] spi: imx: Fix small DMA transfers Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 075/123] tile: use free_bootmem_late() for initrd Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 076/123] Input: zforce - dont overwrite the stack Greg Kroah-Hartman
2015-08-08 22:37   ` Dmitry Torokhov
2015-08-10 19:12     ` Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 077/123] Input: usbtouchscreen - avoid unresponsive TSC-30 touch screen Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 078/123] blkcg: fix gendisk reference leak in blkg_conf_prep() Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 079/123] regulator: s2mps11: Fix GPIO suspend enable shift wrapping bug Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 080/123] ata: pmp: add quirk for Marvell 4140 SATA PMP Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 081/123] usb-storage: ignore ZTE MF 823 card reader in mode 0x1225 Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 082/123] Revert "serial: imx: initialized DMA w/o HW flow enabled" Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 083/123] serial: core: Fix crashes while echoing when closing Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 084/123] xhci: Calculate old endpoints correctly on device reset Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 085/123] xhci: report U3 when link is in resume state Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 086/123] xhci: prevent bus_suspend if SS port resuming in phase 1 Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 087/123] xhci: do not report PLC when link is in internal resume state Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 088/123] mei: prevent unloading mei hw modules while the device is opened Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 089/123] x86/mm: Add parenthesis for TLB tracepoint size calculation Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 090/123] efi: Handle memory error structures produced based on old versions of standard Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 091/123] arm64/efi: map the entire UEFI vendor string before reading it Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 092/123] efi: Check for NULL efi kernel parameters Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 093/123] x86/efi: Use all 64 bit of efi_memmap in setup_e820() Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 094/123] ARC: Reduce bitops lines of code using macros Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 095/123] ARC: Make ARC bitops "safer" (add anti-optimization) Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 096/123] rds: rds_ib_device.refcount overflow Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 097/123] n_tty: signal and flush atomically Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 098/123] blk-mq: set default timeout as 30 seconds Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 099/123] perf hists browser: Take the --comm, --dsos, etc filters into account Greg Kroah-Hartman
2015-08-09 18:12   ` Andre Tomt (LKML)
2015-08-10 19:11     ` Greg Kroah-Hartman
2015-08-11  8:52     ` Luis Henriques
2015-08-11 16:35       ` Kamal Mostafa
2015-08-08 22:09 ` [PATCH 4.1 100/123] perf/x86/intel/cqm: Return cached counter value from IRQ context Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 102/123] hwmon: (nct7802) Fix integer overflow seen when writing voltage limits Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 103/123] hwmon: (nct7904) Rename pwm attributes to match hwmon ABI Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 104/123] NFS: Dont revalidate the mapping if both size and change attr are up to date Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 105/123] avr32: handle NULL as a valid clock object Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 106/123] NFSv4: We must set NFS_OPEN_STATE flag in nfs_resync_open_stateid_locked Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 107/123] NFS: Fix a memory leak in nfs_do_recoalesce Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 108/123] IB/ipoib: Fix CONFIG_INFINIBAND_IPOIB_CM Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 109/123] iscsi-target: Fix use-after-free during TPG session shutdown Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 110/123] iscsi-target: Fix iscsit_start_kthreads failure OOPs Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 111/123] iscsi-target: Fix iser explicit logout TX kthread leak Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 112/123] intel_pstate: Add get_scaling cpu_defaults param to Knights Landing Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 113/123] qla2xxx: Fix hardware lock/unlock issue causing kernel panic Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 114/123] qla2xxx: release request queue reservation Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 115/123] qla2xxx: Remove msleep in qlt_send_term_exchange Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 116/123] qla2xxx: fix command initialization in target mode Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 117/123] qla2xxx: kill sessions/log out initiator on RSCN and port down events Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 118/123] drm/nouveau/fbcon/nv11-: correctly account for ring space usage Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 119/123] drm/nouveau/kms/nv50-: guard against enabling cursor on disabled heads Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 120/123] drm/nouveau: hold mutex when calling nouveau_abi16_fini() Greg Kroah-Hartman
2015-08-08 22:09 ` [PATCH 4.1 121/123] drm/nouveau/drm/nv04-nv40/instmem: protect access to priv->heap by mutex Greg Kroah-Hartman
2015-08-08 22:10 ` [PATCH 4.1 122/123] xfs: remote attribute headers contain an invalid LSN Greg Kroah-Hartman
2015-08-08 22:10 ` [PATCH 4.1 123/123] xfs: remote attributes need to be considered data Greg Kroah-Hartman
2015-08-09  3:21 ` [PATCH 4.1 000/123] 4.1.5-stable review Guenter Roeck
2015-08-10 19:09   ` Greg Kroah-Hartman
2015-08-10  5:42 ` Sudip Mukherjee
2015-08-10 19:09   ` Greg Kroah-Hartman
2015-08-10 18:14 ` Shuah Khan
2015-08-10 19:09   ` Greg Kroah-Hartman
     [not found] ` <55c913d2.6ad3b40a.22fe2.0751@mx.google.com>
2015-08-10 21:19   ` Kevin Hilman
2015-08-10 21:34     ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150808220718.009823870@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dave.anglin@bell.net \
    --cc=deller@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).