powerpc fixes for 4.5 #4
- cxl: Fix PSL timebase synchronization detection from Frederic Barrat - Fix oops when destroying hw_breakpoint event from Ravi Bangoria - Avoid lbarx on e5500 from Scott Wood -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIbBAABAgAGBQJW21wIAAoJEFHr6jzI4aWAiTQP+PWe24xwWmC/9FWBhT5rmHbs CO82Wy2X3gjMsQoXGqe48ohfToJAWEt5yXS+H/PKpoTYJ/yFcih2ufRw55Y6xzHs M98c4Rt4mAbGwkmwWTBjSc1zP+ReWeMNwRE69j6N6Xl+fDqGg6tMKrcysh6wdDLB ZhLeHZbVEGhIlXuxMjGyPrMxSrvcEZMMVrxp8eTycC6+wBHB4w4WzOpFx87WM0fn 3g1Q5WWzRjW2iCeWa6tJLwIIzEACrFs8nfJU08mJU1n33YYVbpu+2klG+5ppfGAL JiuKt9/ZoWSAMwNU7yEwFdgjtnOzywTnt6kAUWFdMKLV7DktJ+sf0ucZF9oBg87e ermsXt+Jy591NXgoif5gFMELWouC+Ti9pnqxdOTawYC8TKFm0OGExJFZQMGmzBw1 9ZpO/2pl0bsuNZyClspuFyVRrNb1sxddisSyKlxW+0Vnz1P432fRZZSz2gHLvClG RjQ+nsKZYj6vH0wfA+eG9+/a5iYjbfBKRNSjrO1g8pbc3ELeG5C2kXDePKnkt8+J jpvTLHxaRp44wNPcizPrEthrdlKxE8uvTUosRuSMSJu74SK7t8+9kCvgDnHYne51 f/2Ko7CzAV2SfdKB+nWI2oJxfYpPlxqORZkYGkQZIOD5uQ8pvJ4yCNzy43XqFHFE DyJOYeTxVQmfMT6jkrg= =ZcDj -----END PGP SIGNATURE----- Merge tag 'powerpc-4.5-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc fixes from Michael Ellerman: - cxl: Fix PSL timebase synchronization detection from Frederic Barrat - Fix oops when destroying hw_breakpoint event from Ravi Bangoria - Avoid lbarx on e5500 from Scott Wood * tag 'powerpc-4.5-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/fsl-book3e: Avoid lbarx on e5500 powerpc/hw_breakpoint: Fix oops when destroying hw_breakpoint event cxl: Fix PSL timebase synchronization detection
This commit is contained in:
commit
b8155fe1b2
|
@ -109,8 +109,9 @@ void arch_unregister_hw_breakpoint(struct perf_event *bp)
|
|||
* If the breakpoint is unregistered between a hw_breakpoint_handler()
|
||||
* and the single_step_dabr_instruction(), then cleanup the breakpoint
|
||||
* restoration variables to prevent dangling pointers.
|
||||
* FIXME, this should not be using bp->ctx at all! Sayeth peterz.
|
||||
*/
|
||||
if (bp->ctx && bp->ctx->task)
|
||||
if (bp->ctx && bp->ctx->task && bp->ctx->task != ((void *)-1L))
|
||||
bp->ctx->task->thread.last_hit_ubp = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include <linux/mm.h>
|
||||
#include <linux/hugetlb.h>
|
||||
|
||||
#include <asm/mmu.h>
|
||||
|
||||
#ifdef CONFIG_PPC_FSL_BOOK3E
|
||||
#ifdef CONFIG_PPC64
|
||||
static inline int tlb1_next(void)
|
||||
|
@ -60,6 +62,14 @@ static inline void book3e_tlb_lock(void)
|
|||
unsigned long tmp;
|
||||
int token = smp_processor_id() + 1;
|
||||
|
||||
/*
|
||||
* Besides being unnecessary in the absence of SMT, this
|
||||
* check prevents trying to do lbarx/stbcx. on e5500 which
|
||||
* doesn't implement either feature.
|
||||
*/
|
||||
if (!cpu_has_feature(CPU_FTR_SMT))
|
||||
return;
|
||||
|
||||
asm volatile("1: lbarx %0, 0, %1;"
|
||||
"cmpwi %0, 0;"
|
||||
"bne 2f;"
|
||||
|
@ -80,6 +90,9 @@ static inline void book3e_tlb_unlock(void)
|
|||
{
|
||||
struct paca_struct *paca = get_paca();
|
||||
|
||||
if (!cpu_has_feature(CPU_FTR_SMT))
|
||||
return;
|
||||
|
||||
isync();
|
||||
paca->tcd_ptr->lock = 0;
|
||||
}
|
||||
|
|
|
@ -415,7 +415,7 @@ static int cxl_setup_psl_timebase(struct cxl *adapter, struct pci_dev *dev)
|
|||
delta = mftb() - psl_tb;
|
||||
if (delta < 0)
|
||||
delta = -delta;
|
||||
} while (cputime_to_usecs(delta) > 16);
|
||||
} while (tb_to_ns(delta) > 16000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue