Message ID | 51D5EEAD.9010103@caramail.com |
---|---|
State | New |
Headers | show |
On 04/07/13 22:52, Olivier Danet wrote: > The bug was introduced in Linux 3.8 > > Here is a patch for swift, there are also issues in hypersparc.S, > viking.S, tsunami.S ...: > > ========================================================================== > diff -up linux_prev/arch/sparc/mm/swift.S linux/arch/sparc/mm/swift.S > --- linux_prev/arch/sparc/mm/swift.S 2013-07-04 23:16:37.785273225 +0200 > +++ linux/arch/sparc/mm/swift.S 2013-07-04 23:30:50.445310001 +0200 > @@ -105,7 +105,7 @@ swift_flush_cache_mm_out: > > .globl swift_flush_cache_range > swift_flush_cache_range: > - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ > + ld [%o0 + 0x20], %o0 /* XXX vma->vm_mm, GROSS XXX */ > sub %o2, %o1, %o2 > sethi %hi(4096), %o3 > cmp %o2, %o3 > @@ -116,7 +116,7 @@ swift_flush_cache_range: > > .globl swift_flush_cache_page > swift_flush_cache_page: > - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ > + ld [%o0 + 0x20], %o0 /* XXX vma->vm_mm, GROSS XXX */ > 70: > ld [%o0 + AOFF_mm_context], %g2 > cmp %g2, -1 > @@ -219,7 +219,7 @@ swift_flush_sig_insns: > .globl swift_flush_tlb_range > .globl swift_flush_tlb_all > swift_flush_tlb_range: > - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ > + ld [%o0 + 0x20], %o0 /* XXX vma->vm_mm GROSS XXX */ > swift_flush_tlb_mm: > ld [%o0 + AOFF_mm_context], %g2 > cmp %g2, -1 > @@ -233,7 +233,7 @@ swift_flush_tlb_all_out: > > .globl swift_flush_tlb_page > swift_flush_tlb_page: > - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ > + ld [%o0 + 0x20], %o0 /* XXX vma->vm_mm GROSS XXX */ > mov SRMMU_CTX_REG, %g1 > ld [%o0 + AOFF_mm_context], %o3 > andn %o1, (PAGE_SIZE - 1), %o1 > ========================================================================== > > For a cleaner fix, arch/sparc/kernel/asm_offsets.c should be modified. > > Cool ! > Olivier > [temlib.org] Hi Olivier, Thanks for this - this is great work! Are either you or Rob able to chase this upstream on the LKML? Many thanks, Mark.
========================================================================== diff -up linux_prev/arch/sparc/mm/swift.S linux/arch/sparc/mm/swift.S --- linux_prev/arch/sparc/mm/swift.S 2013-07-04 23:16:37.785273225 +0200 +++ linux/arch/sparc/mm/swift.S 2013-07-04 23:30:50.445310001 +0200 @@ -105,7 +105,7 @@ swift_flush_cache_mm_out: .globl swift_flush_cache_range swift_flush_cache_range: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + 0x20], %o0 /* XXX vma->vm_mm, GROSS XXX */ sub %o2, %o1, %o2