Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (37 commits) [POWERPC] EEH: Make sure warning message is printed [POWERPC] Make altivec code in swsusp_32.S depend on CONFIG_ALTIVEC [POWERPC] windfarm: Fix windfarm thread freezer interaction [POWERPC] Fix si_addr value on low level hash failures [POWERPC] Refresh ppc64_defconfig and enable pasemi-related options [POWERPC] pasemi: Update defconfig [POWERPC] iSeries: Fix ref counting in vio setup [POWERPC] ] Fix memset size error [POWERPC] Fix link errors for allyesconfig [POWERPC] iSeries_init_IRQ non-PCI tidy [POWERPC] Change fallocate to match unistd.h on powerpc [POWERPC] EEH: Avoid crash on null device [POWERPC] EEH: Drivers that need reset trump others [POWERPC] EEH: Clean up comments [POWERPC] Fix off-by-one error in setting decrementer on Book E/4xx (v2) [POWERPC] Fix switch_slb handling of 1T ESID values [POWERPC] Fix build failure when CONFIG_VIRT_CPU_ACCOUNTING is not defined [POWERPC] Include udbg.h when using udbg_printf [POWERPC] Fix cache line vs. block size confusion [POWERPC] Fix sysctl table check failure on PowerMac ...
This commit is contained in:
@@ -11,6 +11,11 @@
|
||||
extern unsigned long va_to_phys(unsigned long address);
|
||||
extern pte_t *va_to_pte(unsigned long address);
|
||||
extern unsigned long ioremap_bot, ioremap_base;
|
||||
|
||||
#ifdef CONFIG_44x
|
||||
extern int icache_44x_need_flush;
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/*
|
||||
@@ -562,6 +567,10 @@ static inline unsigned long pte_update(pte_t *p, unsigned long clr,
|
||||
: "=&r" (old), "=&r" (tmp), "=m" (*p)
|
||||
: "r" (p), "r" (clr), "r" (set), "m" (*p)
|
||||
: "cc" );
|
||||
#ifdef CONFIG_44x
|
||||
if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC))
|
||||
icache_44x_need_flush = 1;
|
||||
#endif
|
||||
return old;
|
||||
}
|
||||
#else
|
||||
@@ -582,6 +591,10 @@ static inline unsigned long long pte_update(pte_t *p, unsigned long clr,
|
||||
: "=&r" (old), "=&r" (tmp), "=m" (*p)
|
||||
: "r" (p), "r" ((unsigned long)(p) + 4), "r" (clr), "r" (set), "m" (*p)
|
||||
: "cc" );
|
||||
#ifdef CONFIG_44x
|
||||
if ((old & _PAGE_USER) && (old & _PAGE_HWEXEC))
|
||||
icache_44x_need_flush = 1;
|
||||
#endif
|
||||
return old;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -308,8 +308,8 @@ COMPAT_SYS_SPU(move_pages)
|
||||
SYSCALL_SPU(getcpu)
|
||||
COMPAT_SYS(epoll_pwait)
|
||||
COMPAT_SYS_SPU(utimensat)
|
||||
COMPAT_SYS(fallocate)
|
||||
COMPAT_SYS_SPU(signalfd)
|
||||
COMPAT_SYS_SPU(timerfd)
|
||||
SYSCALL_SPU(eventfd)
|
||||
COMPAT_SYS_SPU(sync_file_range2)
|
||||
COMPAT_SYS(fallocate)
|
||||
|
||||
@@ -176,25 +176,31 @@ static inline unsigned int get_dec(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: Book E and 4xx processors differ from other PowerPC processors
|
||||
* in when the decrementer generates its interrupt: on the 1 to 0
|
||||
* transition for Book E/4xx, but on the 0 to -1 transition for others.
|
||||
*/
|
||||
static inline void set_dec(int val)
|
||||
{
|
||||
#if defined(CONFIG_40x)
|
||||
mtspr(SPRN_PIT, val);
|
||||
#elif defined(CONFIG_8xx_CPU6)
|
||||
set_dec_cpu6(val);
|
||||
set_dec_cpu6(val - 1);
|
||||
#else
|
||||
#ifndef CONFIG_BOOKE
|
||||
--val;
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
int cur_dec;
|
||||
|
||||
if (firmware_has_feature(FW_FEATURE_ISERIES) &&
|
||||
get_lppaca()->shared_proc) {
|
||||
get_lppaca()->virtual_decr = val;
|
||||
cur_dec = get_dec();
|
||||
if (cur_dec > val)
|
||||
if (get_dec() > val)
|
||||
HvCall_setVirtualDecr();
|
||||
} else
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
mtspr(SPRN_DEC, val);
|
||||
mtspr(SPRN_DEC, val);
|
||||
#endif /* not 40x or 8xx_CPU6 */
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef _ASM_POWERPC_TLBFLUSH_H
|
||||
#define _ASM_POWERPC_TLBFLUSH_H
|
||||
|
||||
/*
|
||||
* TLB flushing:
|
||||
*
|
||||
@@ -16,9 +17,6 @@
|
||||
*/
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct mm_struct;
|
||||
struct vm_area_struct;
|
||||
|
||||
#if defined(CONFIG_4xx) || defined(CONFIG_8xx) || defined(CONFIG_FSL_BOOKE)
|
||||
/*
|
||||
* TLB flushing for software loaded TLB chips
|
||||
@@ -28,7 +26,9 @@ struct vm_area_struct;
|
||||
* specific tlbie's
|
||||
*/
|
||||
|
||||
extern void _tlbie(unsigned long address);
|
||||
#include <linux/mm.h>
|
||||
|
||||
extern void _tlbie(unsigned long address, unsigned int pid);
|
||||
|
||||
#if defined(CONFIG_40x) || defined(CONFIG_8xx)
|
||||
#define _tlbia() asm volatile ("tlbia; sync" : : : "memory")
|
||||
@@ -44,13 +44,13 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
|
||||
static inline void flush_tlb_page(struct vm_area_struct *vma,
|
||||
unsigned long vmaddr)
|
||||
{
|
||||
_tlbie(vmaddr);
|
||||
_tlbie(vmaddr, vma->vm_mm->context.id);
|
||||
}
|
||||
|
||||
static inline void flush_tlb_page_nohash(struct vm_area_struct *vma,
|
||||
unsigned long vmaddr)
|
||||
{
|
||||
_tlbie(vmaddr);
|
||||
_tlbie(vmaddr, vma->vm_mm->context.id);
|
||||
}
|
||||
|
||||
static inline void flush_tlb_range(struct vm_area_struct *vma,
|
||||
|
||||
Reference in New Issue
Block a user