提交 78a3cc38 编写于 作者: L Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  arch/powerpc: use printk_ratelimited instead of printk_ratelimit
  powerpc/rtas-rtc: remove sideeffects of printk_ratelimit
  powerpc/pseries: remove duplicate SCSI_BNX2_ISCSI in pseries_defconfig
  powerpc/e500: fix breakage with fsl_rio_mcheck_exception
  powerpc/p1022ds: fix audio-related properties in the device tree
  powerpc/85xx: fix NAND_CMD_READID read bytes number
...@@ -209,8 +209,10 @@ ...@@ -209,8 +209,10 @@
wm8776:codec@1a { wm8776:codec@1a {
compatible = "wlf,wm8776"; compatible = "wlf,wm8776";
reg = <0x1a>; reg = <0x1a>;
/* MCLK source is a stand-alone oscillator */ /*
clock-frequency = <12288000>; * clock-frequency will be set by U-Boot if
* the clock is enabled.
*/
}; };
}; };
...@@ -280,7 +282,8 @@ ...@@ -280,7 +282,8 @@
codec-handle = <&wm8776>; codec-handle = <&wm8776>;
fsl,playback-dma = <&dma00>; fsl,playback-dma = <&dma00>;
fsl,capture-dma = <&dma01>; fsl,capture-dma = <&dma01>;
fsl,fifo-depth = <16>; fsl,fifo-depth = <15>;
fsl,ssi-asynchronous;
}; };
dma@c300 { dma@c300 {
......
...@@ -148,7 +148,6 @@ CONFIG_SCSI_SAS_ATTRS=m ...@@ -148,7 +148,6 @@ CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_CXGB3_ISCSI=m CONFIG_SCSI_CXGB3_ISCSI=m
CONFIG_SCSI_CXGB4_ISCSI=m CONFIG_SCSI_CXGB4_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_BE2ISCSI=m CONFIG_BE2ISCSI=m
CONFIG_SCSI_IBMVSCSI=y CONFIG_SCSI_IBMVSCSI=y
CONFIG_SCSI_IBMVFC=m CONFIG_SCSI_IBMVFC=m
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/rtc.h> #include <linux/rtc.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ratelimit.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/rtas.h> #include <asm/rtas.h>
#include <asm/time.h> #include <asm/time.h>
...@@ -29,9 +30,10 @@ unsigned long __init rtas_get_boot_time(void) ...@@ -29,9 +30,10 @@ unsigned long __init rtas_get_boot_time(void)
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) { if (error != 0) {
printk(KERN_WARNING "error: reading the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: reading the clock failed (%d)\n",
error);
return 0; return 0;
} }
...@@ -55,19 +57,21 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) ...@@ -55,19 +57,21 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm)
wait_time = rtas_busy_delay_time(error); wait_time = rtas_busy_delay_time(error);
if (wait_time) { if (wait_time) {
if (in_interrupt() && printk_ratelimit()) { if (in_interrupt()) {
memset(rtc_tm, 0, sizeof(struct rtc_time)); memset(rtc_tm, 0, sizeof(struct rtc_time));
printk(KERN_WARNING "error: reading clock" printk_ratelimited(KERN_WARNING
" would delay interrupt\n"); "error: reading clock "
"would delay interrupt\n");
return; /* delay not allowed */ return; /* delay not allowed */
} }
msleep(wait_time); msleep(wait_time);
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) { if (error != 0) {
printk(KERN_WARNING "error: reading the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: reading the clock failed (%d)\n",
error);
return; return;
} }
...@@ -99,9 +103,10 @@ int rtas_set_rtc_time(struct rtc_time *tm) ...@@ -99,9 +103,10 @@ int rtas_set_rtc_time(struct rtc_time *tm)
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) if (error != 0)
printk(KERN_WARNING "error: setting the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: setting the clock failed (%d)\n",
error);
return 0; return 0;
} }
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/ratelimit.h>
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/compat.h> #include <linux/compat.h>
...@@ -892,11 +893,12 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, ...@@ -892,11 +893,12 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in handle_rt_signal32: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in handle_rt_signal32: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
addr, regs->nip, regs->link); current->comm, current->pid,
addr, regs->nip, regs->link);
force_sigsegv(sig, current); force_sigsegv(sig, current);
return 0; return 0;
...@@ -1058,11 +1060,12 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, ...@@ -1058,11 +1060,12 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
return 0; return 0;
bad: bad:
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in sys_rt_sigreturn: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in sys_rt_sigreturn: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
rt_sf, regs->nip, regs->link); current->comm, current->pid,
rt_sf, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;
...@@ -1149,12 +1152,12 @@ int sys_debug_setcontext(struct ucontext __user *ctx, ...@@ -1149,12 +1152,12 @@ int sys_debug_setcontext(struct ucontext __user *ctx,
* We kill the task with a SIGSEGV in this situation. * We kill the task with a SIGSEGV in this situation.
*/ */
if (do_setcontext(ctx, regs, 1)) { if (do_setcontext(ctx, regs, 1)) {
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in " printk_ratelimited(KERN_INFO "%s[%d]: bad frame in "
"sys_debug_setcontext: %p nip %08lx " "sys_debug_setcontext: %p nip %08lx "
"lr %08lx\n", "lr %08lx\n",
current->comm, current->pid, current->comm, current->pid,
ctx, regs->nip, regs->link); ctx, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
goto out; goto out;
...@@ -1236,11 +1239,12 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, ...@@ -1236,11 +1239,12 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka,
printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in handle_signal32: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in handle_signal32: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
frame, regs->nip, regs->link); current->comm, current->pid,
frame, regs->nip, regs->link);
force_sigsegv(sig, current); force_sigsegv(sig, current);
return 0; return 0;
...@@ -1288,11 +1292,12 @@ long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, ...@@ -1288,11 +1292,12 @@ long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
return 0; return 0;
badframe: badframe:
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in sys_sigreturn: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in sys_sigreturn: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
addr, regs->nip, regs->link); current->comm, current->pid,
addr, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/ratelimit.h>
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
...@@ -380,10 +381,10 @@ int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5, ...@@ -380,10 +381,10 @@ int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n",
regs, uc, &uc->uc_mcontext); regs, uc, &uc->uc_mcontext);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
current->comm, current->pid, "rt_sigreturn", current->comm, current->pid, "rt_sigreturn",
(long)uc, regs->nip, regs->link); (long)uc, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;
...@@ -468,10 +469,10 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, ...@@ -468,10 +469,10 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info,
printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
current->comm, current->pid, "setup_rt_frame", current->comm, current->pid, "setup_rt_frame",
(long)frame, regs->nip, regs->link); (long)frame, regs->nip, regs->link);
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return 0;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/ratelimit.h>
#include <asm/emulated_ops.h> #include <asm/emulated_ops.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
...@@ -197,12 +198,11 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) ...@@ -197,12 +198,11 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
if (die("Exception in kernel mode", regs, signr)) if (die("Exception in kernel mode", regs, signr))
return; return;
} else if (show_unhandled_signals && } else if (show_unhandled_signals &&
unhandled_signal(current, signr) && unhandled_signal(current, signr)) {
printk_ratelimit()) { printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, current->comm, current->pid, signr,
current->comm, current->pid, signr, addr, regs->nip, regs->link, code);
addr, regs->nip, regs->link, code); }
}
memset(&info, 0, sizeof(info)); memset(&info, 0, sizeof(info));
info.si_signo = signr; info.si_signo = signr;
...@@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs) ...@@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs)
unsigned long reason = mcsr; unsigned long reason = mcsr;
int recoverable = 1; int recoverable = 1;
if (reason & MCSR_BUS_RBERR) { if (reason & MCSR_LD) {
recoverable = fsl_rio_mcheck_exception(regs); recoverable = fsl_rio_mcheck_exception(regs);
if (recoverable == 1) if (recoverable == 1)
goto silent_out; goto silent_out;
...@@ -1342,9 +1342,8 @@ void altivec_assist_exception(struct pt_regs *regs) ...@@ -1342,9 +1342,8 @@ void altivec_assist_exception(struct pt_regs *regs)
} else { } else {
/* didn't recognize the instruction */ /* didn't recognize the instruction */
/* XXX quick hack for now: set the non-Java bit in the VSCR */ /* XXX quick hack for now: set the non-Java bit in the VSCR */
if (printk_ratelimit()) printk_ratelimited(KERN_ERR "Unrecognized altivec instruction "
printk(KERN_ERR "Unrecognized altivec instruction " "in %s at %lx\n", current->comm, regs->nip);
"in %s at %lx\n", current->comm, regs->nip);
current->thread.vscr.u[3] |= 0x10000; current->thread.vscr.u[3] |= 0x10000;
} }
} }
...@@ -1548,9 +1547,8 @@ u32 ppc_warn_emulated; ...@@ -1548,9 +1547,8 @@ u32 ppc_warn_emulated;
void ppc_warn_emulated_print(const char *type) void ppc_warn_emulated_print(const char *type)
{ {
if (printk_ratelimit()) pr_warn_ratelimited("%s used emulated %s instruction\n", current->comm,
pr_warning("%s used emulated %s instruction\n", current->comm, type);
type);
} }
static int __init ppc_warn_emulated_init(void) static int __init ppc_warn_emulated_init(void)
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <linux/perf_event.h> #include <linux/perf_event.h>
#include <linux/magic.h> #include <linux/magic.h>
#include <linux/ratelimit.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -346,11 +347,10 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, ...@@ -346,11 +347,10 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
return 0; return 0;
} }
if (is_exec && (error_code & DSISR_PROTFAULT) if (is_exec && (error_code & DSISR_PROTFAULT))
&& printk_ratelimit()) printk_ratelimited(KERN_CRIT "kernel tried to execute NX-protected"
printk(KERN_CRIT "kernel tried to execute NX-protected" " page (%lx) - exploit attempt? (uid: %d)\n",
" page (%lx) - exploit attempt? (uid: %d)\n", address, current_uid());
address, current_uid());
return SIGSEGV; return SIGSEGV;
......
...@@ -283,23 +283,24 @@ static void __iomem *rio_regs_win; ...@@ -283,23 +283,24 @@ static void __iomem *rio_regs_win;
#ifdef CONFIG_E500 #ifdef CONFIG_E500
int fsl_rio_mcheck_exception(struct pt_regs *regs) int fsl_rio_mcheck_exception(struct pt_regs *regs)
{ {
const struct exception_table_entry *entry = NULL; const struct exception_table_entry *entry;
unsigned long reason = mfspr(SPRN_MCSR); unsigned long reason;
if (reason & MCSR_BUS_RBERR) { if (!rio_regs_win)
reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); return 0;
if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) {
/* Check if we are prepared to handle this fault */ reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR));
entry = search_exception_tables(regs->nip); if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) {
if (entry) { /* Check if we are prepared to handle this fault */
pr_debug("RIO: %s - MC Exception handled\n", entry = search_exception_tables(regs->nip);
__func__); if (entry) {
out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), pr_debug("RIO: %s - MC Exception handled\n",
0); __func__);
regs->msr |= MSR_RI; out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR),
regs->nip = entry->fixup; 0);
return 1; regs->msr |= MSR_RI;
} regs->nip = entry->fixup;
return 1;
} }
} }
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/syscore_ops.h> #include <linux/syscore_ops.h>
#include <linux/ratelimit.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/signal.h> #include <asm/signal.h>
...@@ -1648,9 +1649,8 @@ static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg) ...@@ -1648,9 +1649,8 @@ static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg)
return NO_IRQ; return NO_IRQ;
} }
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
if (printk_ratelimit()) printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n",
printk(KERN_WARNING "%s: Got protected source %d !\n", mpic->name, (int)src);
mpic->name, (int)src);
mpic_eoi(mpic); mpic_eoi(mpic);
return NO_IRQ; return NO_IRQ;
} }
...@@ -1688,9 +1688,8 @@ unsigned int mpic_get_coreint_irq(void) ...@@ -1688,9 +1688,8 @@ unsigned int mpic_get_coreint_irq(void)
return NO_IRQ; return NO_IRQ;
} }
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
if (printk_ratelimit()) printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n",
printk(KERN_WARNING "%s: Got protected source %d !\n", mpic->name, (int)src);
mpic->name, (int)src);
return NO_IRQ; return NO_IRQ;
} }
......
...@@ -339,9 +339,9 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command, ...@@ -339,9 +339,9 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
(FIR_OP_UA << FIR_OP1_SHIFT) | (FIR_OP_UA << FIR_OP1_SHIFT) |
(FIR_OP_RBW << FIR_OP2_SHIFT)); (FIR_OP_RBW << FIR_OP2_SHIFT));
out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT); out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT);
/* 5 bytes for manuf, device and exts */ /* nand_get_flash_type() reads 8 bytes of entire ID string */
out_be32(&lbc->fbcr, 5); out_be32(&lbc->fbcr, 8);
elbc_fcm_ctrl->read_bytes = 5; elbc_fcm_ctrl->read_bytes = 8;
elbc_fcm_ctrl->use_mdr = 1; elbc_fcm_ctrl->use_mdr = 1;
elbc_fcm_ctrl->mdr = 0; elbc_fcm_ctrl->mdr = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册