diff options
Diffstat (limited to 'arch/sparc')
| -rw-r--r-- | arch/sparc/Kconfig | 2 | ||||
| -rw-r--r-- | arch/sparc/include/asm/bug.h | 6 | ||||
| -rw-r--r-- | arch/sparc/mm/tlb.c | 19 | 
3 files changed, 20 insertions, 7 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 6bf594ace663..8767e45f1b2b 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -430,6 +430,8 @@ config SPARC_LEON  	depends on SPARC32  	select USB_EHCI_BIG_ENDIAN_MMIO  	select USB_EHCI_BIG_ENDIAN_DESC +	select USB_UHCI_BIG_ENDIAN_MMIO +	select USB_UHCI_BIG_ENDIAN_DESC  	---help---  	  If you say Y here if you are running on a SPARC-LEON processor.  	  The LEON processor is a synthesizable VHDL model of the diff --git a/arch/sparc/include/asm/bug.h b/arch/sparc/include/asm/bug.h index 6f17528356b2..ea53e418f6c0 100644 --- a/arch/sparc/include/asm/bug.h +++ b/arch/sparc/include/asm/bug.h @@ -9,10 +9,14 @@  void do_BUG(const char *file, int line);  #define BUG() do {					\  	do_BUG(__FILE__, __LINE__);			\ +	barrier_before_unreachable();			\  	__builtin_trap();				\  } while (0)  #else -#define BUG()		__builtin_trap() +#define BUG() do {					\ +	barrier_before_unreachable();			\ +	__builtin_trap();				\ +} while (0)  #endif  #define HAVE_ARCH_BUG diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c index 847ddffbf38a..b5cfab711651 100644 --- a/arch/sparc/mm/tlb.c +++ b/arch/sparc/mm/tlb.c @@ -163,13 +163,10 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr,  	pte_unmap(pte);  } -void set_pmd_at(struct mm_struct *mm, unsigned long addr, -		pmd_t *pmdp, pmd_t pmd) -{ -	pmd_t orig = *pmdp; - -	*pmdp = pmd; +static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr, +			   pmd_t orig, pmd_t pmd) +{  	if (mm == &init_mm)  		return; @@ -219,6 +216,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,  	}  } +void set_pmd_at(struct mm_struct *mm, unsigned long addr, +		pmd_t *pmdp, pmd_t pmd) +{ +	pmd_t orig = *pmdp; + +	*pmdp = pmd; +	__set_pmd_acct(mm, addr, orig, pmd); +} +  static inline pmd_t pmdp_establish(struct vm_area_struct *vma,  		unsigned long address, pmd_t *pmdp, pmd_t pmd)  { @@ -227,6 +233,7 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,  	do {  		old = *pmdp;  	} while (cmpxchg64(&pmdp->pmd, old.pmd, pmd.pmd) != old.pmd); +	__set_pmd_acct(vma->vm_mm, address, old, pmd);  	return old;  }  | 

