diff options
100 files changed, 1129 insertions, 805 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 2bbe40ea4d1..3002cc811c1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2598,13 +2598,6 @@ L: https://tango.0pointer.de/mailman/listinfo/s270-linux W: http://0pointer.de/lennart/tchibo.html S: Maintained -MTRR AND SIMILAR SUPPORT [i386] -P: Richard Gooch -M: rgooch@atnf.csiro.au -L: linux-kernel@vger.kernel.org -W: http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html -S: Maintained - MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM P: Pierre Ossman M: drzeus-mmc@drzeus.cx diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 455bd1f560a..c6fc405a6c8 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -714,6 +714,10 @@ config ARCH_HAS_ILOG2_U64 bool default n +config ARCH_SUPPORTS_OPROFILE + bool + default y if !MIPS_MT_SMTC + config GENERIC_FIND_NEXT_BIT bool default y diff --git a/arch/mips/au1000/common/dbdma.c b/arch/mips/au1000/common/dbdma.c index 9d6ad43fded..edf91f41a78 100644 --- a/arch/mips/au1000/common/dbdma.c +++ b/arch/mips/au1000/common/dbdma.c @@ -859,7 +859,7 @@ dbdma_interrupt(int irq, void *dev_id) intstat = dbdma_gptr->ddma_intstat; au_sync(); - chan_index = ffs(intstat); + chan_index = __ffs(intstat); ctp = chan_tab_ptr[chan_index]; cp = ctp->chan_ptr; diff --git a/arch/mips/au1000/common/irq.c b/arch/mips/au1000/common/irq.c index ddfb7f0a17a..3c7714f057a 100644 --- a/arch/mips/au1000/common/irq.c +++ b/arch/mips/au1000/common/irq.c @@ -462,9 +462,9 @@ static void intc0_req0_irqdispatch(void) return; } #endif - bit = ffs(intc0_req0); + bit = __ffs(intc0_req0); intc0_req0 &= ~(1 << bit); - do_IRQ(MIPS_CPU_IRQ_BASE + bit); + do_IRQ(AU1000_INTC0_INT_BASE + bit); } @@ -478,9 +478,9 @@ static void intc0_req1_irqdispatch(void) if (!intc0_req1) return; - bit = ffs(intc0_req1); + bit = __ffs(intc0_req1); intc0_req1 &= ~(1 << bit); - do_IRQ(bit); + do_IRQ(AU1000_INTC0_INT_BASE + bit); } @@ -498,9 +498,9 @@ static void intc1_req0_irqdispatch(void) if (!intc1_req0) return; - bit = ffs(intc1_req0); + bit = __ffs(intc1_req0); intc1_req0 &= ~(1 << bit); - do_IRQ(MIPS_CPU_IRQ_BASE + 32 + bit); + do_IRQ(AU1000_INTC1_INT_BASE + bit); } @@ -514,9 +514,9 @@ static void intc1_req1_irqdispatch(void) if (!intc1_req1) return; - bit = ffs(intc1_req1); + bit = __ffs(intc1_req1); intc1_req1 &= ~(1 << bit); - do_IRQ(MIPS_CPU_IRQ_BASE + 32 + bit); + do_IRQ(AU1000_INTC1_INT_BASE + bit); } asmlinkage void plat_irq_dispatch(void) diff --git a/arch/mips/au1000/pb1200/irqmap.c b/arch/mips/au1000/pb1200/irqmap.c index c096be4ed4e..8fcd0df86f9 100644 --- a/arch/mips/au1000/pb1200/irqmap.c +++ b/arch/mips/au1000/pb1200/irqmap.c @@ -74,7 +74,7 @@ irqreturn_t pb1200_cascade_handler( int irq, void *dev_id) bcsr->int_status = bisr; for( ; bisr; bisr &= (bisr-1) ) { - extirq_nr = PB1200_INT_BEGIN + ffs(bisr); + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); /* Ack and dispatch IRQ */ do_IRQ(extirq_nr); } diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c index 423bc2c473d..bdfa07aecd9 100644 --- a/arch/mips/oprofile/op_model_mipsxx.c +++ b/arch/mips/oprofile/op_model_mipsxx.c @@ -6,6 +6,7 @@ * Copyright (C) 2004, 05, 06 by Ralf Baechle * Copyright (C) 2005 by MIPS Technologies, Inc. */ +#include <linux/cpumask.h> #include <linux/oprofile.h> #include <linux/interrupt.h> #include <linux/smp.h> @@ -33,11 +34,45 @@ #ifdef CONFIG_MIPS_MT_SMP #define WHAT (M_TC_EN_VPE | M_PERFCTL_VPEID(smp_processor_id())) #define vpe_id() smp_processor_id() + +/* + * The number of bits to shift to convert between counters per core and + * counters per VPE. There is no reasonable interface atm to obtain the + * number of VPEs used by Linux and in the 34K this number is fixed to two + * anyways so we hardcore a few things here for the moment. The way it's + * done here will ensure that oprofile VSMP kernel will run right on a lesser + * core like a 24K also or with maxcpus=1. + */ +static inline unsigned int vpe_shift(void) +{ + if (num_possible_cpus() > 1) + return 1; + + return 0; +} + #else + #define WHAT 0 #define vpe_id() 0 + +static inline unsigned int vpe_shift(void) +{ + return 0; +} + #endif +static inline unsigned int counters_total_to_per_cpu(unsigned int counters) +{ + return counters >> vpe_shift(); +} + +static inline unsigned int counters_per_cpu_to_total(unsigned int counters) +{ + return counters << vpe_shift(); +} + #define __define_perf_accessors(r, n, np) \ \ static inline unsigned int r_c0_ ## r ## n(void) \ @@ -269,9 +304,7 @@ static int __init mipsxx_init(void) reset_counters(counters); -#ifdef CONFIG_MIPS_MT_SMP - counters >>= 1; -#endif + counters = counters_total_to_per_cpu(counters); op_model_mipsxx_ops.num_counters = counters; switch (current_cpu_type()) { @@ -330,9 +363,8 @@ static int __init mipsxx_init(void) static void mipsxx_exit(void) { int counters = op_model_mipsxx_ops.num_counters; -#ifdef CONFIG_MIPS_MT_SMP - counters <<= 1; -#endif + + counters = counters_per_cpu_to_total(counters); reset_counters(counters); perf_irq = null_perf_irq; diff --git a/arch/mips/pci/pci-bcm1480.c b/arch/mips/pci/pci-bcm1480.c index bc647cb7729..47f316c86ab 100644 --- a/arch/mips/pci/pci-bcm1480.c +++ b/arch/mips/pci/pci-bcm1480.c @@ -76,7 +76,10 @@ static inline void WRITECFG32(u32 addr, u32 data) int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { - return K_BCM1480_INT_PCI_INTA + pin; + if (pin == 0) + return -1; + + return K_BCM1480_INT_PCI_INTA - 1 + pin; } /* Do platform specific device initialization at pci_enable_device() time */ diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index b2b2edc40eb..1a6dac8df6f 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -1079,8 +1079,10 @@ cleanup_io_leave_insn: .Lexecve_tail: .long execve_tail .Ljump_table: .long pgm_check_table .Lschedule: .long schedule +#ifdef CONFIG_PREEMPT .Lpreempt_schedule_irq: .long preempt_schedule_irq +#endif .Ltrace: .long syscall_trace .Lschedtail: .long schedule_tail .Lsysc_table: .long sys_call_table diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 50f8f1e3760..577aa7dd660 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -486,9 +486,7 @@ static void setup_addressing_mode(void) if (s390_noexec) { printk("S390 execute protection active, "); set_amode_and_uaccess(PSW_ASC_SECONDARY, PSW32_ASC_SECONDARY); - return; - } - if (switch_amode) { + } else if (switch_amode) { printk("S390 address spaces switched, "); set_amode_and_uaccess(PSW_ASC_PRIMARY, PSW32_ASC_PRIMARY); } diff --git a/arch/sparc/kernel/devices.c b/arch/sparc/kernel/devices.c index af90a5f9ab5..b240b8863fd 100644 --- a/arch/sparc/kernel/devices.c +++ b/arch/sparc/kernel/devices.c @@ -62,8 +62,10 @@ static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg, int err = check_cpu_node(dp->node, &cur_inst, compare, compare_arg, prom_node, mid); - if (!err) + if (!err) { + of_node_put(dp); return 0; + } } return -ENODEV; diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index f2d432edc92..4cd5d7818dc 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c @@ -329,7 +329,7 @@ int __init pcic_probe(void) pcic->pcic_res_cfg_addr.name = "pcic_cfg_addr"; if ((pcic->pcic_config_space_addr = ioremap(regs[2].phys_addr, regs[2].reg_size * 2)) == 0) { - prom_printf("PCIC: Error, cannot map" + prom_printf("PCIC: Error, cannot map " "PCI Configuration Space Address.\n"); prom_halt(); } @@ -341,7 +341,7 @@ int __init pcic_probe(void) pcic->pcic_res_cfg_data.name = "pcic_cfg_data"; if ((pcic->pcic_config_space_data = ioremap(regs[3].phys_addr, regs[3].reg_size * 2)) == 0) { - prom_printf("PCIC: Error, cannot map" + prom_printf("PCIC: Error, cannot map " "PCI Configuration Space Data.\n"); prom_halt(); } |