提交 a24d025a 编写于 作者: L Linus Torvalds

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus

* 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus: (29 commits)
  MIPS: Call oops_enter, oops_exit in die
  staging/octeon: Software should check the checksum of no tcp/udp packets
  MIPS: Octeon: Enable C0_UserLocal probing.
  MIPS: No branches in delay slots for huge pages in handle_tlbl
  MIPS: Don't clobber CP0_STATUS value for CONFIG_MIPS_MT_SMTC
  MIPS: Octeon: Select CONFIG_HOLES_IN_ZONE
  MIPS: PM: Use struct syscore_ops instead of sysdevs for PM (v2)
  MIPS: Compat: Use 32-bit wrapper for compat_sys_futex.
  MIPS: Do not use EXTRA_CFLAGS
  MIPS: Alchemy: DB1200: Disable cascade IRQ in handler
  SERIAL: Lantiq: Set timeout in uart_port
  MIPS: Lantiq: Fix setting the PCI bus speed on AR9
  MIPS: Lantiq: Fix external interrupt sources
  MIPS: tlbex: Fix build error in R3000 code.
  MIPS: Alchemy: Include Au1100 in PM code.
  MIPS: Alchemy: Fix typo in MAC0 registration
  MIPS: MSP71xx: Fix build error.
  MIPS: Handle __put_user() sleeping.
  MIPS: Allow forced irq threading
  MIPS: i8259: Mark cascade interrupt non-threaded
  ...
...@@ -24,6 +24,7 @@ config MIPS ...@@ -24,6 +24,7 @@ config MIPS
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select HAVE_ARCH_JUMP_LABEL select HAVE_ARCH_JUMP_LABEL
select IRQ_FORCED_THREADING
menu "Machine selection" menu "Machine selection"
...@@ -722,6 +723,7 @@ config CAVIUM_OCTEON_SIMULATOR ...@@ -722,6 +723,7 @@ config CAVIUM_OCTEON_SIMULATOR
select SYS_SUPPORTS_HIGHMEM select SYS_SUPPORTS_HIGHMEM
select SYS_SUPPORTS_HOTPLUG_CPU select SYS_SUPPORTS_HOTPLUG_CPU
select SYS_HAS_CPU_CAVIUM_OCTEON select SYS_HAS_CPU_CAVIUM_OCTEON
select HOLES_IN_ZONE
help help
The Octeon simulator is software performance model of the Cavium The Octeon simulator is software performance model of the Cavium
Octeon Processor. It supports simulating Octeon processors on x86 Octeon Processor. It supports simulating Octeon processors on x86
...@@ -744,6 +746,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD ...@@ -744,6 +746,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
select ZONE_DMA32 select ZONE_DMA32
select USB_ARCH_HAS_OHCI select USB_ARCH_HAS_OHCI
select USB_ARCH_HAS_EHCI select USB_ARCH_HAS_EHCI
select HOLES_IN_ZONE
help help
This option supports all of the Octeon reference boards from Cavium This option supports all of the Octeon reference boards from Cavium
Networks. It builds a kernel that dynamically determines the Octeon Networks. It builds a kernel that dynamically determines the Octeon
...@@ -973,6 +976,9 @@ config ISA_DMA_API ...@@ -973,6 +976,9 @@ config ISA_DMA_API
config GENERIC_GPIO config GENERIC_GPIO
bool bool
config HOLES_IN_ZONE
bool
# #
# Endianess selection. Sufficiently obscure so many users don't know what to # Endianess selection. Sufficiently obscure so many users don't know what to
# answer,so we try hard to limit the available choices. Also the use of a # answer,so we try hard to limit the available choices. Also the use of a
......
...@@ -492,7 +492,7 @@ static void __init alchemy_setup_macs(int ctype) ...@@ -492,7 +492,7 @@ static void __init alchemy_setup_macs(int ctype)
memcpy(au1xxx_eth0_platform_data.mac, ethaddr, 6); memcpy(au1xxx_eth0_platform_data.mac, ethaddr, 6);
ret = platform_device_register(&au1xxx_eth0_device); ret = platform_device_register(&au1xxx_eth0_device);
if (!ret) if (ret)
printk(KERN_INFO "Alchemy: failed to register MAC0\n"); printk(KERN_INFO "Alchemy: failed to register MAC0\n");
......
...@@ -158,15 +158,21 @@ static void restore_core_regs(void) ...@@ -158,15 +158,21 @@ static void restore_core_regs(void)
void au_sleep(void) void au_sleep(void)
{ {
int cpuid = alchemy_get_cputype(); save_core_regs();
if (cpuid != ALCHEMY_CPU_UNKNOWN) {
save_core_regs(); switch (alchemy_get_cputype()) {
if (cpuid <= ALCHEMY_CPU_AU1500) case ALCHEMY_CPU_AU1000:
alchemy_sleep_au1000(); case ALCHEMY_CPU_AU1500:
else if (cpuid <= ALCHEMY_CPU_AU1200) case ALCHEMY_CPU_AU1100:
alchemy_sleep_au1550(); alchemy_sleep_au1000();
restore_core_regs(); break;
case ALCHEMY_CPU_AU1550:
case ALCHEMY_CPU_AU1200:
alchemy_sleep_au1550();
break;
} }
restore_core_regs();
} }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
...@@ -89,8 +89,12 @@ static void bcsr_csc_handler(unsigned int irq, struct irq_desc *d) ...@@ -89,8 +89,12 @@ static void bcsr_csc_handler(unsigned int irq, struct irq_desc *d)
{ {
unsigned short bisr = __raw_readw(bcsr_virt + BCSR_REG_INTSTAT); unsigned short bisr = __raw_readw(bcsr_virt + BCSR_REG_INTSTAT);
disable_irq_nosync(irq);
for ( ; bisr; bisr &= bisr - 1) for ( ; bisr; bisr &= bisr - 1)
generic_handle_irq(bcsr_csc_base + __ffs(bisr)); generic_handle_irq(bcsr_csc_base + __ffs(bisr));
enable_irq(irq);
} }
/* NOTE: both the enable and mask bits must be cleared, otherwise the /* NOTE: both the enable and mask bits must be cleared, otherwise the
......
...@@ -23,13 +23,6 @@ void __init board_setup(void) ...@@ -23,13 +23,6 @@ void __init board_setup(void)
unsigned long freq0, clksrc, div, pfc; unsigned long freq0, clksrc, div, pfc;
unsigned short whoami; unsigned short whoami;
/* Set Config[OD] (disable overlapping bus transaction):
* This gets rid of a _lot_ of spurious interrupts (especially
* wrt. IDE); but incurs ~10% performance hit in some
* cpu-bound applications.
*/
set_c0_config(1 << 19);
bcsr_init(DB1200_BCSR_PHYS_ADDR, bcsr_init(DB1200_BCSR_PHYS_ADDR,
DB1200_BCSR_PHYS_ADDR + DB1200_BCSR_HEXLED_OFS); DB1200_BCSR_PHYS_ADDR + DB1200_BCSR_HEXLED_OFS);
......
...@@ -98,7 +98,8 @@ static struct irq_chip ar7_sec_irq_type = { ...@@ -98,7 +98,8 @@ static struct irq_chip ar7_sec_irq_type = {
static struct irqaction ar7_cascade_action = { static struct irqaction ar7_cascade_action = {
.handler = no_action, .handler = no_action,
.name = "AR7 cascade interrupt" .name = "AR7 cascade interrupt",
.flags = IRQF_NO_THREAD,
}; };
static void __init ar7_irq_init(int base) static void __init ar7_irq_init(int base)
......
...@@ -222,6 +222,7 @@ static struct irq_chip bcm63xx_external_irq_chip = { ...@@ -222,6 +222,7 @@ static struct irq_chip bcm63xx_external_irq_chip = {
static struct irqaction cpu_ip2_cascade_action = { static struct irqaction cpu_ip2_cascade_action = {
.handler = no_action, .handler = no_action,
.name = "cascade_ip2", .name = "cascade_ip2",
.flags = IRQF_NO_THREAD,
}; };
void __init arch_init_irq(void) void __init arch_init_irq(void)
......
...@@ -48,6 +48,7 @@ asmlinkage void plat_irq_dispatch(void) ...@@ -48,6 +48,7 @@ asmlinkage void plat_irq_dispatch(void)
static struct irqaction cascade = { static struct irqaction cascade = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
void __init arch_init_irq(void) void __init arch_init_irq(void)
......
...@@ -101,20 +101,24 @@ int cpu_fpu_mask = DEC_CPU_IRQ_MASK(DEC_CPU_INR_FPU); ...@@ -101,20 +101,24 @@ int cpu_fpu_mask = DEC_CPU_IRQ_MASK(DEC_CPU_INR_FPU);
static struct irqaction ioirq = { static struct irqaction ioirq = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
static struct irqaction fpuirq = { static struct irqaction fpuirq = {
.handler = no_action, .handler = no_action,
.name = "fpu", .name = "fpu",
.flags = IRQF_NO_THREAD,
}; };
static struct irqaction busirq = { static struct irqaction busirq = {
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED,
.name = "bus error", .name = "bus error",
.flags = IRQF_NO_THREAD,
}; };
static struct irqaction haltirq = { static struct irqaction haltirq = {
.handler = dec_intr_halt, .handler = dec_intr_halt,
.name = "halt", .name = "halt",
.flags = IRQF_NO_THREAD,
}; };
......
...@@ -169,7 +169,7 @@ void emma2rh_gpio_irq_init(void) ...@@ -169,7 +169,7 @@ void emma2rh_gpio_irq_init(void)
static struct irqaction irq_cascade = { static struct irqaction irq_cascade = {
.handler = no_action, .handler = no_action,
.flags = 0, .flags = IRQF_NO_THREAD,
.name = "cascade", .name = "cascade",
.dev_id = NULL, .dev_id = NULL,
.next = NULL, .next = NULL,
......
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
#define cpu_has_mips_r2_exec_hazard 0 #define cpu_has_mips_r2_exec_hazard 0
#define cpu_has_dsp 0 #define cpu_has_dsp 0
#define cpu_has_mipsmt 0 #define cpu_has_mipsmt 0
#define cpu_has_userlocal 0
#define cpu_has_vint 0 #define cpu_has_vint 0
#define cpu_has_veic 0 #define cpu_has_veic 0
#define cpu_hwrena_impl_bits 0xc0000000 #define cpu_hwrena_impl_bits 0xc0000000
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#define __ASM_MACH_POWERTV_DMA_COHERENCE_H #define __ASM_MACH_POWERTV_DMA_COHERENCE_H
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/version.h>
#include <linux/device.h> #include <linux/device.h>
#include <asm/mach-powertv/asic.h> #include <asm/mach-powertv/asic.h>
......
...@@ -195,9 +195,9 @@ ...@@ -195,9 +195,9 @@
* to cover the pipeline delay. * to cover the pipeline delay.
*/ */
.set mips32 .set mips32
mfc0 v1, CP0_TCSTATUS mfc0 k0, CP0_TCSTATUS
.set mips0 .set mips0
LONG_S v1, PT_TCSTATUS(sp) LONG_S k0, PT_TCSTATUS(sp)
#endif /* CONFIG_MIPS_MT_SMTC */ #endif /* CONFIG_MIPS_MT_SMTC */
LONG_S $4, PT_R4(sp) LONG_S $4, PT_R4(sp)
LONG_S $5, PT_R5(sp) LONG_S $5, PT_R5(sp)
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/sysdev.h> #include <linux/syscore_ops.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/delay.h> #include <linux/delay.h>
...@@ -86,7 +86,6 @@ struct jz_gpio_chip { ...@@ -86,7 +86,6 @@ struct jz_gpio_chip {
spinlock_t lock; spinlock_t lock;
struct gpio_chip gpio_chip; struct gpio_chip gpio_chip;
struct sys_device sysdev;
}; };
static struct jz_gpio_chip jz4740_gpio_chips[]; static struct jz_gpio_chip jz4740_gpio_chips[];
...@@ -459,49 +458,47 @@ static struct jz_gpio_chip jz4740_gpio_chips[] = { ...@@ -459,49 +458,47 @@ static struct jz_gpio_chip jz4740_gpio_chips[] = {
JZ4740_GPIO_CHIP(D), JZ4740_GPIO_CHIP(D),
}; };
static inline struct jz_gpio_chip *sysdev_to_chip(struct sys_device *dev) static void jz4740_gpio_suspend_chip(struct jz_gpio_chip *chip)
{ {
return container_of(dev, struct jz_gpio_chip, sysdev); chip->suspend_mask = readl(chip->base + JZ_REG_GPIO_MASK);
writel(~(chip->wakeup), chip->base + JZ_REG_GPIO_MASK_SET);
writel(chip->wakeup, chip->base + JZ_REG_GPIO_MASK_CLEAR);
} }
static int jz4740_gpio_suspend(struct sys_device *dev, pm_message_t state) static int jz4740_gpio_suspend(void)
{ {
struct jz_gpio_chip *chip = sysdev_to_chip(dev); int i;
chip->suspend_mask = readl(chip->base + JZ_REG_GPIO_MASK); for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); i++)
writel(~(chip->wakeup), chip->base + JZ_REG_GPIO_MASK_SET); jz4740_gpio_suspend_chip(&jz4740_gpio_chips[i]);
writel(chip->wakeup, chip->base + JZ_REG_GPIO_MASK_CLEAR);
return 0; return 0;
} }
static int jz4740_gpio_resume(struct sys_device *dev) static void jz4740_gpio_resume_chip(struct jz_gpio_chip *chip)
{ {
struct jz_gpio_chip *chip = sysdev_to_chip(dev);
uint32_t mask = chip->suspend_mask; uint32_t mask = chip->suspend_mask;
writel(~mask, chip->base + JZ_REG_GPIO_MASK_CLEAR); writel(~mask, chip->base + JZ_REG_GPIO_MASK_CLEAR);
writel(mask, chip->base + JZ_REG_GPIO_MASK_SET); writel(mask, chip->base + JZ_REG_GPIO_MASK_SET);
}
return 0; static void jz4740_gpio_resume(void)
{
int i;
for (i = ARRAY_SIZE(jz4740_gpio_chips) - 1; i >= 0 ; i--)
jz4740_gpio_resume_chip(&jz4740_gpio_chips[i]);
} }
static struct sysdev_class jz4740_gpio_sysdev_class = { static struct syscore_ops jz4740_gpio_syscore_ops = {
.name = "gpio",
.suspend = jz4740_gpio_suspend, .suspend = jz4740_gpio_suspend,
.resume = jz4740_gpio_resume, .resume = jz4740_gpio_resume,
}; };
static int jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id) static void jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id)
{ {
int ret, irq; int irq;
chip->sysdev.id = id;
chip->sysdev.cls = &jz4740_gpio_sysdev_class;
ret = sysdev_register(&chip->sysdev);
if (ret)
return ret;
spin_lock_init(&chip->lock); spin_lock_init(&chip->lock);
...@@ -519,22 +516,17 @@ static int jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id) ...@@ -519,22 +516,17 @@ static int jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id)
irq_set_chip_and_handler(irq, &jz_gpio_irq_chip, irq_set_chip_and_handler(irq, &jz_gpio_irq_chip,
handle_level_irq); handle_level_irq);
} }
return 0;
} }
static int __init jz4740_gpio_init(void) static int __init jz4740_gpio_init(void)
{ {
unsigned int i; unsigned int i;
int ret;
ret = sysdev_class_register(&jz4740_gpio_sysdev_class);
if (ret)
return ret;
for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); ++i) for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); ++i)
jz4740_gpio_chip_init(&jz4740_gpio_chips[i], i); jz4740_gpio_chip_init(&jz4740_gpio_chips[i], i);
register_syscore_ops(&jz4740_gpio_syscore_ops);
printk(KERN_INFO "JZ4740 GPIO initialized\n"); printk(KERN_INFO "JZ4740 GPIO initialized\n");
return 0; return 0;
......
...@@ -19,6 +19,26 @@ ...@@ -19,6 +19,26 @@
#include <asm-generic/sections.h> #include <asm-generic/sections.h>
#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
#define MCOUNT_OFFSET_INSNS 5
#else
#define MCOUNT_OFFSET_INSNS 4
#endif
/*
* Check if the address is in kernel space
*
* Clone core_kernel_text() from kernel/extable.c, but doesn't call
* init_kernel_text() for Ftrace doesn't trace functions in init sections.
*/
static inline int in_kernel_space(unsigned long ip)
{
if (ip >= (unsigned long)_stext &&
ip <= (unsigned long)_etext)
return 1;
return 0;
}
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ #define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */
...@@ -54,20 +74,6 @@ static inline void ftrace_dyn_arch_init_insns(void) ...@@ -54,20 +74,6 @@ static inline void ftrace_dyn_arch_init_insns(void)
#endif #endif
} }
/*
* Check if the address is in kernel space
*
* Clone core_kernel_text() from kernel/extable.c, but doesn't call
* init_kernel_text() for Ftrace doesn't trace functions in init sections.
*/
static inline int in_kernel_space(unsigned long ip)
{
if (ip >= (unsigned long)_stext &&
ip <= (unsigned long)_etext)
return 1;
return 0;
}
static int ftrace_modify_code(unsigned long ip, unsigned int new_code) static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
{ {
int faulted; int faulted;
...@@ -112,11 +118,6 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code) ...@@ -112,11 +118,6 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
* 1: offset = 4 instructions * 1: offset = 4 instructions
*/ */
#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
#define MCOUNT_OFFSET_INSNS 5
#else
#define MCOUNT_OFFSET_INSNS 4
#endif
#define INSN_B_1F (0x10000000 | MCOUNT_OFFSET_INSNS) #define INSN_B_1F (0x10000000 | MCOUNT_OFFSET_INSNS)
int ftrace_make_nop(struct module *mod, int ftrace_make_nop(struct module *mod,
......
...@@ -229,7 +229,7 @@ static void i8259A_shutdown(void) ...@@ -229,7 +229,7 @@ static void i8259A_shutdown(void)
*/ */
if (i8259A_auto_eoi >= 0) { if (i8259A_auto_eoi >= 0) {
outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */
outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-1 */ outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */
} }
} }
...@@ -295,6 +295,7 @@ static void init_8259A(int auto_eoi) ...@@ -295,6 +295,7 @@ static void init_8259A(int auto_eoi)
static struct irqaction irq2 = { static struct irqaction irq2 = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
static struct resource pic1_io_resource = { static struct resource pic1_io_resource = {
......
...@@ -349,3 +349,10 @@ SYSCALL_DEFINE6(32_fanotify_mark, int, fanotify_fd, unsigned int, flags, ...@@ -349,3 +349,10 @@ SYSCALL_DEFINE6(32_fanotify_mark, int, fanotify_fd, unsigned int, flags,
return sys_fanotify_mark(fanotify_fd, flags, merge_64(a3, a4), return sys_fanotify_mark(fanotify_fd, flags, merge_64(a3, a4),
dfd, pathname); dfd, pathname);
} }
SYSCALL_DEFINE6(32_futex, u32 __user *, uaddr, int, op, u32, val,
struct compat_timespec __user *, utime, u32 __user *, uaddr2,
u32, val3)
{
return compat_sys_futex(uaddr, op, val, utime, uaddr2, val3);
}
...@@ -315,7 +315,7 @@ EXPORT(sysn32_call_table) ...@@ -315,7 +315,7 @@ EXPORT(sysn32_call_table)
PTR sys_fremovexattr PTR sys_fremovexattr
PTR sys_tkill PTR sys_tkill
PTR sys_ni_syscall PTR sys_ni_syscall
PTR compat_sys_futex PTR sys_32_futex
PTR compat_sys_sched_setaffinity /* 6195 */ PTR compat_sys_sched_setaffinity /* 6195 */
PTR compat_sys_sched_getaffinity PTR compat_sys_sched_getaffinity
PTR sys_cacheflush PTR sys_cacheflush
......
...@@ -441,7 +441,7 @@ sys_call_table: ...@@ -441,7 +441,7 @@ sys_call_table:
PTR sys_fremovexattr /* 4235 */ PTR sys_fremovexattr /* 4235 */
PTR sys_tkill PTR sys_tkill
PTR sys_sendfile64 PTR sys_sendfile64
PTR compat_sys_futex PTR sys_32_futex
PTR compat_sys_sched_setaffinity PTR compat_sys_sched_setaffinity
PTR compat_sys_sched_getaffinity /* 4240 */ PTR compat_sys_sched_getaffinity /* 4240 */
PTR compat_sys_io_setup PTR compat_sys_io_setup
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
*/ */
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/irqflags.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/personality.h> #include <linux/personality.h>
...@@ -658,6 +659,8 @@ static void do_signal(struct pt_regs *regs) ...@@ -658,6 +659,8 @@ static void do_signal(struct pt_regs *regs)
asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused,
__u32 thread_info_flags) __u32 thread_info_flags)
{ {
local_irq_enable();
/* deal with pending signal delivery */ /* deal with pending signal delivery */
if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
do_signal(regs); do_signal(regs);
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -364,21 +365,26 @@ static int regs_to_trapnr(struct pt_regs *regs) ...@@ -364,21 +365,26 @@ static int regs_to_trapnr(struct pt_regs *regs)
return (regs->cp0_cause >> 2) & 0x1f; return (regs->cp0_cause >> 2) & 0x1f;
} }
static DEFINE_SPINLOCK(die_lock); static DEFINE_RAW_SPINLOCK(die_lock);
void __noreturn die(const char *str, struct pt_regs *regs) void __noreturn die(const char *str, struct pt_regs *regs)
{ {
static int die_counter; static int die_counter;
int sig = SIGSEGV; int sig = SIGSEGV;
#ifdef CONFIG_MIPS_MT_SMTC #ifdef CONFIG_MIPS_MT_SMTC
unsigned long dvpret = dvpe(); unsigned long dvpret;
#endif /* CONFIG_MIPS_MT_SMTC */ #endif /* CONFIG_MIPS_MT_SMTC */
oops_enter();
if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV) == NOTIFY_STOP) if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV) == NOTIFY_STOP)
sig = 0; sig = 0;
console_verbose(); console_verbose();
spin_lock_irq(&die_lock); raw_spin_lock_irq(&die_lock);
#ifdef CONFIG_MIPS_MT_SMTC
dvpret = dvpe();
#endif /* CONFIG_MIPS_MT_SMTC */
bust_spinlocks(1); bust_spinlocks(1);
#ifdef CONFIG_MIPS_MT_SMTC #ifdef CONFIG_MIPS_MT_SMTC
mips_mt_regdump(dvpret); mips_mt_regdump(dvpret);
...@@ -387,7 +393,9 @@ void __noreturn die(const char *str, struct pt_regs *regs) ...@@ -387,7 +393,9 @@ void __noreturn die(const char *str, struct pt_regs *regs)
printk("%s[#%d]:\n", str, ++die_counter); printk("%s[#%d]:\n", str, ++die_counter);
show_registers(regs); show_registers(regs);
add_taint(TAINT_DIE); add_taint(TAINT_DIE);
spin_unlock_irq(&die_lock); raw_spin_unlock_irq(&die_lock);
oops_exit();
if (in_interrupt()) if (in_interrupt())
panic("Fatal exception in interrupt"); panic("Fatal exception in interrupt");
......
...@@ -192,7 +192,7 @@ static struct tc *get_tc(int index) ...@@ -192,7 +192,7 @@ static struct tc *get_tc(int index)
} }
spin_unlock(&vpecontrol.tc_list_lock); spin_unlock(&vpecontrol.tc_list_lock);
return NULL; return res;
} }
/* allocate a vpe and associate it with this minor (or index) */ /* allocate a vpe and associate it with this minor (or index) */
......
...@@ -123,11 +123,10 @@ void ltq_enable_irq(struct irq_data *d) ...@@ -123,11 +123,10 @@ void ltq_enable_irq(struct irq_data *d)
static unsigned int ltq_startup_eiu_irq(struct irq_data *d) static unsigned int ltq_startup_eiu_irq(struct irq_data *d)
{ {
int i; int i;
int irq_nr = d->irq - INT_NUM_IRQ0;
ltq_enable_irq(d); ltq_enable_irq(d);
for (i = 0; i < MAX_EIU; i++) { for (i = 0; i < MAX_EIU; i++) {
if (irq_nr == ltq_eiu_irq[i]) { if (d->irq == ltq_eiu_irq[i]) {
/* low level - we should really handle set_type */ /* low level - we should really handle set_type */
ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_C) | ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_C) |
(0x6 << (i * 4)), LTQ_EIU_EXIN_C); (0x6 << (i * 4)), LTQ_EIU_EXIN_C);
...@@ -147,11 +146,10 @@ static unsigned int ltq_startup_eiu_irq(struct irq_data *d) ...@@ -147,11 +146,10 @@ static unsigned int ltq_startup_eiu_irq(struct irq_data *d)
static void ltq_shutdown_eiu_irq(struct irq_data *d) static void ltq_shutdown_eiu_irq(struct irq_data *d)
{ {
int i; int i;
int irq_nr = d->irq - INT_NUM_IRQ0;
ltq_disable_irq(d); ltq_disable_irq(d);
for (i = 0; i < MAX_EIU; i++) { for (i = 0; i < MAX_EIU; i++) {
if (irq_nr == ltq_eiu_irq[i]) { if (d->irq == ltq_eiu_irq[i]) {
/* disable */ /* disable */
ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_INEN) & ~(1 << i), ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_INEN) & ~(1 << i),
LTQ_EIU_EXIN_INEN); LTQ_EIU_EXIN_INEN);
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/version.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <lantiq_soc.h> #include <lantiq_soc.h>
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/version.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <lantiq_soc.h> #include <lantiq_soc.h>
......
...@@ -105,6 +105,7 @@ asmlinkage void plat_irq_dispatch(void) ...@@ -105,6 +105,7 @@ asmlinkage void plat_irq_dispatch(void)
static struct irqaction cascade = { static struct irqaction cascade = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
void __init arch_init_irq(void) void __init arch_init_irq(void)
......
...@@ -42,6 +42,7 @@ asmlinkage void mach_irq_dispatch(unsigned int pending) ...@@ -42,6 +42,7 @@ asmlinkage void mach_irq_dispatch(unsigned int pending)
static struct irqaction cascade_irqaction = { static struct irqaction cascade_irqaction = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
void __init mach_init_irq(void) void __init mach_init_irq(void)
......
...@@ -96,12 +96,13 @@ static irqreturn_t ip6_action(int cpl, void *dev_id) ...@@ -96,12 +96,13 @@ static irqreturn_t ip6_action(int cpl, void *dev_id)
struct irqaction ip6_irqaction = { struct irqaction ip6_irqaction = {
.handler = ip6_action, .handler = ip6_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_SHARED, .flags = IRQF_SHARED | IRQF_NO_THREAD,
}; };
struct irqaction cascade_irqaction = { struct irqaction cascade_irqaction = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
void __init mach_init_irq(void) void __init mach_init_irq(void)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
* Copyright (C) 2011 Wind River Systems, * Copyright (C) 2011 Wind River Systems,
* written by Ralf Baechle <ralf@linux-mips.org> * written by Ralf Baechle <ralf@linux-mips.org>
*/ */
#include <linux/compiler.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/mman.h> #include <linux/mman.h>
...@@ -15,12 +16,11 @@ ...@@ -15,12 +16,11 @@
#include <linux/sched.h> #include <linux/sched.h>
unsigned long shm_align_mask = PAGE_SIZE - 1; /* Sane caches */ unsigned long shm_align_mask = PAGE_SIZE - 1; /* Sane caches */
EXPORT_SYMBOL(shm_align_mask); EXPORT_SYMBOL(shm_align_mask);
/* gap between mmap and stack */ /* gap between mmap and stack */
#define MIN_GAP (128*1024*1024UL) #define MIN_GAP (128*1024*1024UL)
#define MAX_GAP ((TASK_SIZE)/6*5) #define MAX_GAP ((TASK_SIZE)/6*5)
static int mmap_is_legacy(void) static int mmap_is_legacy(void)
{ {
...@@ -57,13 +57,13 @@ static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, ...@@ -57,13 +57,13 @@ static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr,
return base - off; return base - off;
} }
#define COLOUR_ALIGN(addr,pgoff) \ #define COLOUR_ALIGN(addr, pgoff) \
((((addr) + shm_align_mask) & ~shm_align_mask) + \ ((((addr) + shm_align_mask) & ~shm_align_mask) + \
(((pgoff) << PAGE_SHIFT) & shm_align_mask)) (((pgoff) << PAGE_SHIFT) & shm_align_mask))
enum mmap_allocation_direction {UP, DOWN}; enum mmap_allocation_direction {UP, DOWN};
static unsigned long arch_get_unmapped_area_foo(struct file *filp, static unsigned long arch_get_unmapped_area_common(struct file *filp,
unsigned long addr0, unsigned long len, unsigned long pgoff, unsigned long addr0, unsigned long len, unsigned long pgoff,
unsigned long flags, enum mmap_allocation_direction dir) unsigned long flags, enum mmap_allocation_direction dir)
{ {
...@@ -103,16 +103,16 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp, ...@@ -103,16 +103,16 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp,
vma = find_vma(mm, addr); vma = find_vma(mm, addr);
if (TASK_SIZE - len >= addr && if (TASK_SIZE - len >= addr &&
(!vma || addr + len <= vma->vm_start)) (!vma || addr + len <= vma->vm_start))
return addr; return addr;
} }
if (dir == UP) { if (dir == UP) {
addr = mm->mmap_base; addr = mm->mmap_base;
if (do_color_align) if (do_color_align)
addr = COLOUR_ALIGN(addr, pgoff); addr = COLOUR_ALIGN(addr, pgoff);
else else
addr = PAGE_ALIGN(addr); addr = PAGE_ALIGN(addr);
for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) {
/* At this point: (!vma || addr < vma->vm_end). */ /* At this point: (!vma || addr < vma->vm_end). */
...@@ -131,28 +131,30 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp, ...@@ -131,28 +131,30 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp,
mm->free_area_cache = mm->mmap_base; mm->free_area_cache = mm->mmap_base;
} }
/* either no address requested or can't fit in requested address hole */ /*
* either no address requested, or the mapping can't fit into
* the requested address hole
*/
addr = mm->free_area_cache; addr = mm->free_area_cache;
if (do_color_align) { if (do_color_align) {
unsigned long base = unsigned long base =
COLOUR_ALIGN_DOWN(addr - len, pgoff); COLOUR_ALIGN_DOWN(addr - len, pgoff);
addr = base + len; addr = base + len;
} }
/* make sure it can fit in the remaining address space */ /* make sure it can fit in the remaining address space */
if (likely(addr > len)) { if (likely(addr > len)) {
vma = find_vma(mm, addr - len); vma = find_vma(mm, addr - len);
if (!vma || addr <= vma->vm_start) { if (!vma || addr <= vma->vm_start) {
/* remember the address as a hint for next time */ /* cache the address as a hint for next time */
return mm->free_area_cache = addr-len; return mm->free_area_cache = addr - len;
} }
} }
if (unlikely(mm->mmap_base < len)) if (unlikely(mm->mmap_base < len))
goto bottomup; goto bottomup;
addr = mm->mmap_base-len; addr = mm->mmap_base - len;
if (do_color_align) if (do_color_align)
addr = COLOUR_ALIGN_DOWN(addr, pgoff); addr = COLOUR_ALIGN_DOWN(addr, pgoff);
...@@ -163,8 +165,8 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp, ...@@ -163,8 +165,8 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp,
* return with success: * return with success:
*/ */
vma = find_vma(mm, addr); vma = find_vma(mm, addr);
if (likely(!vma || addr+len <= vma->vm_start)) { if (likely(!vma || addr + len <= vma->vm_start)) {
/* remember the address as a hint for next time */ /* cache the address as a hint for next time */
return mm->free_area_cache = addr; return mm->free_area_cache = addr;
} }
...@@ -173,7 +175,7 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp, ...@@ -173,7 +175,7 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp,
mm->cached_hole_size = vma->vm_start - addr; mm->cached_hole_size = vma->vm_start - addr;
/* try just below the current vma->vm_start */ /* try just below the current vma->vm_start */
addr = vma->vm_start-len; addr = vma->vm_start - len;
if (do_color_align) if (do_color_align)
addr = COLOUR_ALIGN_DOWN(addr, pgoff); addr = COLOUR_ALIGN_DOWN(addr, pgoff);
} while (likely(len < vma->vm_start)); } while (likely(len < vma->vm_start));
...@@ -201,7 +203,7 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp, ...@@ -201,7 +203,7 @@ static unsigned long arch_get_unmapped_area_foo(struct file *filp,
unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr0, unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr0,
unsigned long len, unsigned long pgoff, unsigned long flags) unsigned long len, unsigned long pgoff, unsigned long flags)
{ {
return arch_get_unmapped_area_foo(filp, return arch_get_unmapped_area_common(filp,
addr0, len, pgoff, flags, UP); addr0, len, pgoff, flags, UP);
} }
...@@ -213,7 +215,7 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp, ...@@ -213,7 +215,7 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp,
unsigned long addr0, unsigned long len, unsigned long pgoff, unsigned long addr0, unsigned long len, unsigned long pgoff,
unsigned long flags) unsigned long flags)
{ {
return arch_get_unmapped_area_foo(filp, return arch_get_unmapped_area_common(filp,
addr0, len, pgoff, flags, DOWN); addr0, len, pgoff, flags, DOWN);
} }
......
...@@ -1759,14 +1759,13 @@ static void __cpuinit build_r3000_tlb_modify_handler(void) ...@@ -1759,14 +1759,13 @@ static void __cpuinit build_r3000_tlb_modify_handler(void)
u32 *p = handle_tlbm; u32 *p = handle_tlbm;
struct uasm_label *l = labels; struct uasm_label *l = labels;
struct uasm_reloc *r = relocs; struct uasm_reloc *r = relocs;
struct work_registers wr;
memset(handle_tlbm, 0, sizeof(handle_tlbm)); memset(handle_tlbm, 0, sizeof(handle_tlbm));
memset(labels, 0, sizeof(labels)); memset(labels, 0, sizeof(labels));
memset(relocs, 0, sizeof(relocs)); memset(relocs, 0, sizeof(relocs));
build_r3000_tlbchange_handler_head(&p, K0, K1); build_r3000_tlbchange_handler_head(&p, K0, K1);
build_pte_modifiable(&p, &r, wr.r1, wr.r2, wr.r3, label_nopage_tlbm); build_pte_modifiable(&p, &r, K0, K1, -1, label_nopage_tlbm);
uasm_i_nop(&p); /* load delay */ uasm_i_nop(&p); /* load delay */
build_make_write(&p, &r, K0, K1); build_make_write(&p, &r, K0, K1);
build_r3000_pte_reload_tlbwi(&p, K0, K1); build_r3000_pte_reload_tlbwi(&p, K0, K1);
...@@ -1963,7 +1962,8 @@ static void __cpuinit build_r4000_tlb_load_handler(void) ...@@ -1963,7 +1962,8 @@ static void __cpuinit build_r4000_tlb_load_handler(void)
uasm_i_andi(&p, wr.r3, wr.r3, 2); uasm_i_andi(&p, wr.r3, wr.r3, 2);
uasm_il_beqz(&p, &r, wr.r3, label_tlbl_goaround2); uasm_il_beqz(&p, &r, wr.r3, label_tlbl_goaround2);
} }
if (PM_DEFAULT_MASK == 0)
uasm_i_nop(&p);
/* /*
* We clobbered C0_PAGEMASK, restore it. On the other branch * We clobbered C0_PAGEMASK, restore it. On the other branch
* it is restored in build_huge_tlb_write_entry. * it is restored in build_huge_tlb_write_entry.
......
...@@ -350,12 +350,14 @@ unsigned int plat_ipi_resched_int_xlate(unsigned int cpu) ...@@ -350,12 +350,14 @@ unsigned int plat_ipi_resched_int_xlate(unsigned int cpu)
static struct irqaction i8259irq = { static struct irqaction i8259irq = {
.handler = no_action, .handler = no_action,
.name = "XT-PIC cascade" .name = "XT-PIC cascade",
.flags = IRQF_NO_THREAD,
}; };
static struct irqaction corehi_irqaction = { static struct irqaction corehi_irqaction = {
.handler = no_action, .handler = no_action,
.name = "CoreHi" .name = "CoreHi",
.flags = IRQF_NO_THREAD,
}; };
static msc_irqmap_t __initdata msc_irqmap[] = { static msc_irqmap_t __initdata msc_irqmap[] = {
......
...@@ -2,4 +2,4 @@ obj-y += setup.o platform.o irq.o setup.o time.o ...@@ -2,4 +2,4 @@ obj-y += setup.o platform.o irq.o setup.o time.o
obj-$(CONFIG_SMP) += smp.o smpboot.o obj-$(CONFIG_SMP) += smp.o smpboot.o
obj-$(CONFIG_EARLY_PRINTK) += xlr_console.o obj-$(CONFIG_EARLY_PRINTK) += xlr_console.o
EXTRA_CFLAGS += -Werror ccflags-y += -Werror
...@@ -171,8 +171,13 @@ static int __devinit ltq_pci_startup(struct ltq_pci_data *conf) ...@@ -171,8 +171,13 @@ static int __devinit ltq_pci_startup(struct ltq_pci_data *conf)
u32 temp_buffer; u32 temp_buffer;
/* set clock to 33Mhz */ /* set clock to 33Mhz */
ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) & ~0xf00000, LTQ_CGU_IFCCR); if (ltq_is_ar9()) {
ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) | 0x800000, LTQ_CGU_IFCCR); ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) & ~0x1f00000, LTQ_CGU_IFCCR);
ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) | 0xe00000, LTQ_CGU_IFCCR);
} else {
ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) & ~0xf00000, LTQ_CGU_IFCCR);
ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) | 0x800000, LTQ_CGU_IFCCR);
}
/* external or internal clock ? */ /* external or internal clock ? */
if (conf->clock) { if (conf->clock) {
......
...@@ -215,7 +215,7 @@ static int __init rc32434_pci_init(void) ...@@ -215,7 +215,7 @@ static int __init rc32434_pci_init(void)
rc32434_pcibridge_init(); rc32434_pcibridge_init();
io_map_base = ioremap(rc32434_res_pci_io1.start, io_map_base = ioremap(rc32434_res_pci_io1.start,
resource_size(&rcrc32434_res_pci_io1)); resource_size(&rc32434_res_pci_io1));
if (!io_map_base) if (!io_map_base)
return -ENOMEM; return -ENOMEM;
......
...@@ -108,12 +108,14 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) ...@@ -108,12 +108,14 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
static struct irqaction cic_cascade_msp = { static struct irqaction cic_cascade_msp = {
.handler = no_action, .handler = no_action,
.name = "MSP CIC cascade" .name = "MSP CIC cascade",
.flags = IRQF_NO_THREAD,
}; };
static struct irqaction per_cascade_msp = { static struct irqaction per_cascade_msp = {
.handler = no_action, .handler = no_action,
.name = "MSP PER cascade" .name = "MSP PER cascade",
.flags = IRQF_NO_THREAD,
}; };
void __init arch_init_irq(void) void __init arch_init_irq(void)
......
...@@ -167,7 +167,7 @@ static struct irq_chip level_irq_type = { ...@@ -167,7 +167,7 @@ static struct irq_chip level_irq_type = {
static struct irqaction gic_action = { static struct irqaction gic_action = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "GIC", .name = "GIC",
}; };
......
...@@ -155,32 +155,32 @@ static void __irq_entry indy_buserror_irq(void) ...@@ -155,32 +155,32 @@ static void __irq_entry indy_buserror_irq(void)
static struct irqaction local0_cascade = { static struct irqaction local0_cascade = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "local0 cascade", .name = "local0 cascade",
}; };
static struct irqaction local1_cascade = { static struct irqaction local1_cascade = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "local1 cascade", .name = "local1 cascade",
}; };
static struct irqaction buserr = { static struct irqaction buserr = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "Bus Error", .name = "Bus Error",
}; };
static struct irqaction map0_cascade = { static struct irqaction map0_cascade = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "mapable0 cascade", .name = "mapable0 cascade",
}; };
#ifdef USE_LIO3_IRQ #ifdef USE_LIO3_IRQ
static struct irqaction map1_cascade = { static struct irqaction map1_cascade = {
.handler = no_action, .handler = no_action,
.flags = IRQF_DISABLED, .flags = IRQF_DISABLED | IRQF_NO_THREAD,
.name = "mapable1 cascade", .name = "mapable1 cascade",
}; };
#define SGI_INTERRUPTS SGINT_END #define SGI_INTERRUPTS SGINT_END
......
...@@ -359,6 +359,7 @@ void sni_rm200_init_8259A(void) ...@@ -359,6 +359,7 @@ void sni_rm200_init_8259A(void)
static struct irqaction sni_rm200_irq2 = { static struct irqaction sni_rm200_irq2 = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
static struct resource sni_rm200_pic1_resource = { static struct resource sni_rm200_pic1_resource = {
......
...@@ -34,6 +34,7 @@ static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned; ...@@ -34,6 +34,7 @@ static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned;
static struct irqaction cascade_irqaction = { static struct irqaction cascade_irqaction = {
.handler = no_action, .handler = no_action,
.name = "cascade", .name = "cascade",
.flags = IRQF_NO_THREAD,
}; };
int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int)) int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int))
......
...@@ -411,7 +411,8 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) ...@@ -411,7 +411,8 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
skb->dev = dev; skb->dev = dev;
if (unlikely(work->word2.s.not_IP || work->word2.s.IP_exc || work->word2.s.L4_error)) if (unlikely(work->word2.s.not_IP || work->word2.s.IP_exc ||
work->word2.s.L4_error || !work->word2.s.tcp_or_udp))
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
else else
skb->ip_summed = CHECKSUM_UNNECESSARY; skb->ip_summed = CHECKSUM_UNNECESSARY;
......
...@@ -478,8 +478,10 @@ lqasc_set_termios(struct uart_port *port, ...@@ -478,8 +478,10 @@ lqasc_set_termios(struct uart_port *port,
spin_unlock_irqrestore(&ltq_asc_lock, flags); spin_unlock_irqrestore(&ltq_asc_lock, flags);
/* Don't rewrite B0 */ /* Don't rewrite B0 */
if (tty_termios_baud_rate(new)) if (tty_termios_baud_rate(new))
tty_termios_encode_baud_rate(new, baud, baud); tty_termios_encode_baud_rate(new, baud, baud);
uart_update_timeout(port, cflag, baud);
} }
static const char* static const char*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册