Patchwork kernel bug with CONFIG_KEYBOARD_ATKBD=y

login
register
mail settings
Submitter David Miller
Date April 7, 2009, 10:24 p.m.
Message ID <20090407.152411.198483029.davem@davemloft.net>
Download mbox | patch
Permalink /patch/25696/
State Accepted
Delegated to: David Miller
Headers show

Comments

David Miller - April 7, 2009, 10:24 p.m.
From: David Miller <davem@davemloft.net>
Date: Tue, 07 Apr 2009 15:16:38 -0700 (PDT)

> From: Dennis Gilmore <dennis@ausil.us>
> Date: Tue, 7 Apr 2009 17:10:08 -0500
> 
>> On Tuesday 07 April 2009 04:57:55 pm David Miller wrote:
>>> From: Dennis Gilmore <dennis@ausil.us>
>>> Date: Tue, 7 Apr 2009 10:01:17 -0500
>>>
>>> > Initalizing network drop monitor service
>>> > kernel BUG at
>>> > /builddir/build/BUILD/kernel-2.6.29/linux-2.6.29.sparc64/arch/sparc/inclu
>>> >de/asm/tlb_64.h:48!
>>>
>>> What kernel is this tree based upon?  2.6.29.1?
>> yeah 2.6.29.1
> 
> A sparc64 fix I put into 2.6.29.1 is likely the cause.  It's possible
> I put in a version without a particular issue cured.

Indeed, here is the fix, I'll push it to -stable.  Thanks for your
report:

sparc64: Fix bug in ("sparc64: Flush TLB before releasing pages.")

[ No upstream commit, this regression was added only to 2.6.29.1 ]

Unfortunately I merged an earlier version of commit
b6816b706138c3870f03115071872cad824f90b4 ("sparc64: Flush TLB before
releasing pages.") than what I actually tested and merged upstream.

Simply diffing asm/tlb_64.h in Linus's tree vs. what ended up in
2.6.29.1 confirms this.

Sync things up to fix BUG() triggers some users are seeing.

Reported-by: Dennis Gilmore <dennis@ausil.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 arch/sparc/include/asm/tlb_64.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Dennis Gilmore - April 8, 2009, 5:29 a.m.
On Tuesday 07 April 2009 05:24:11 pm David Miller wrote:
> From: David Miller <davem@davemloft.net>
> Date: Tue, 07 Apr 2009 15:16:38 -0700 (PDT)
>
> > From: Dennis Gilmore <dennis@ausil.us>
> > Date: Tue, 7 Apr 2009 17:10:08 -0500
> >
> >> On Tuesday 07 April 2009 04:57:55 pm David Miller wrote:
> >>> From: Dennis Gilmore <dennis@ausil.us>
> >>> Date: Tue, 7 Apr 2009 10:01:17 -0500
> >>>
> >>> > Initalizing network drop monitor service
> >>> > kernel BUG at
> >>> > /builddir/build/BUILD/kernel-2.6.29/linux-2.6.29.sparc64/arch/sparc/i
> >>> >nclu de/asm/tlb_64.h:48!
> >>>
> >>> What kernel is this tree based upon?  2.6.29.1?
> >>
> >> yeah 2.6.29.1
> >
> > A sparc64 fix I put into 2.6.29.1 is likely the cause.  It's possible
> > I put in a version without a particular issue cured.
>
> Indeed, here is the fix, I'll push it to -stable.  Thanks for your
> report:
>
> sparc64: Fix bug in ("sparc64: Flush TLB before releasing pages.")
>
> [ No upstream commit, this regression was added only to 2.6.29.1 ]
>
> Unfortunately I merged an earlier version of commit
> b6816b706138c3870f03115071872cad824f90b4 ("sparc64: Flush TLB before
> releasing pages.") than what I actually tested and merged upstream.
>
> Simply diffing asm/tlb_64.h in Linus's tree vs. what ended up in
> 2.6.29.1 confirms this.
>
> Sync things up to fix BUG() triggers some users are seeing.
>
> Reported-by: Dennis Gilmore <dennis@ausil.us>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
>  arch/sparc/include/asm/tlb_64.h |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/sparc/include/asm/tlb_64.h
> b/arch/sparc/include/asm/tlb_64.h index 0aaa086..ee38e73 100644
> --- a/arch/sparc/include/asm/tlb_64.h
> +++ b/arch/sparc/include/asm/tlb_64.h
> @@ -57,9 +57,9 @@ static inline struct mmu_gather *tlb_gather_mmu(struct
> mm_struct *mm, unsigned i
>
>  static inline void tlb_flush_mmu(struct mmu_gather *mp)
>  {
> +	if (!mp->fullmm)
> +		flush_tlb_pending();
>  	if (mp->need_flush) {
> -		if (!mp->fullmm)
> -			flush_tlb_pending();
>  		free_pages_and_swap_cache(mp->pages, mp->pages_nr);
>  		mp->pages_nr = 0;
>  		mp->need_flush = 0;
Thanks Dave,

I can confirm that i can boot a 2.6.29.1 kernel with the patch applied.

Dennis
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/arch/sparc/include/asm/tlb_64.h b/arch/sparc/include/asm/tlb_64.h
index 0aaa086..ee38e73 100644
--- a/arch/sparc/include/asm/tlb_64.h
+++ b/arch/sparc/include/asm/tlb_64.h
@@ -57,9 +57,9 @@  static inline struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm, unsigned i
 
 static inline void tlb_flush_mmu(struct mmu_gather *mp)
 {
+	if (!mp->fullmm)
+		flush_tlb_pending();
 	if (mp->need_flush) {
-		if (!mp->fullmm)
-			flush_tlb_pending();
 		free_pages_and_swap_cache(mp->pages, mp->pages_nr);
 		mp->pages_nr = 0;
 		mp->need_flush = 0;