From d4fc915d1d7c4cd2e6d8ec2caeabf01aaffb11b8 Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Tue, 1 Mar 2011 17:50:00 +0000 Subject: [PATCH] --- yaml --- r: 233808 b: refs/heads/master c: af24ee9ea8d532e16883251a6684dfa1be8eec29 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/alpha/Kconfig | 1 - trunk/arch/alpha/kernel/irq.c | 13 +- trunk/arch/alpha/kernel/irq_alpha.c | 11 +- trunk/arch/alpha/kernel/irq_i8259.c | 18 ++- trunk/arch/alpha/kernel/irq_impl.h | 8 +- trunk/arch/alpha/kernel/irq_pyxis.c | 20 ++-- trunk/arch/alpha/kernel/irq_srm.c | 16 +-- trunk/arch/alpha/kernel/sys_alcor.c | 28 ++--- trunk/arch/alpha/kernel/sys_cabriolet.c | 16 +-- trunk/arch/alpha/kernel/sys_dp264.c | 52 ++++---- trunk/arch/alpha/kernel/sys_eb64p.c | 18 +-- trunk/arch/alpha/kernel/sys_eiger.c | 14 +-- trunk/arch/alpha/kernel/sys_jensen.c | 24 ++-- trunk/arch/alpha/kernel/sys_marvel.c | 42 ++++--- trunk/arch/alpha/kernel/sys_mikasa.c | 16 +-- trunk/arch/alpha/kernel/sys_noritake.c | 16 +-- trunk/arch/alpha/kernel/sys_rawhide.c | 17 ++- trunk/arch/alpha/kernel/sys_rx164.c | 16 +-- trunk/arch/alpha/kernel/sys_sable.c | 20 ++-- trunk/arch/alpha/kernel/sys_takara.c | 14 +-- trunk/arch/alpha/kernel/sys_titan.c | 21 ++-- trunk/arch/alpha/kernel/sys_wildfire.c | 32 ++--- trunk/arch/powerpc/include/asm/machdep.h | 6 - trunk/arch/powerpc/kernel/machine_kexec.c | 5 +- trunk/arch/powerpc/kernel/process.c | 8 +- trunk/arch/powerpc/mm/tlb_hash64.c | 6 +- trunk/arch/x86/include/asm/msr-index.h | 5 - .../arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | 6 +- .../arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 13 +- trunk/arch/x86/platform/olpc/olpc_dt.c | 3 +- trunk/drivers/acpi/acpica/aclocal.h | 7 +- trunk/drivers/acpi/acpica/evgpe.c | 17 +-- trunk/drivers/acpi/acpica/evxfgpe.c | 42 ++----- trunk/drivers/acpi/debugfs.c | 20 +--- trunk/drivers/cpufreq/cpufreq.c | 27 ++--- trunk/drivers/gpu/drm/i915/i915_dma.c | 11 -- trunk/drivers/idle/intel_idle.c | 24 ---- trunk/drivers/mfd/asic3.c | 4 +- trunk/drivers/mfd/davinci_voicecodec.c | 4 +- trunk/drivers/mfd/tps6586x.c | 10 +- trunk/drivers/mfd/ucb1x00-ts.c | 12 +- trunk/drivers/mfd/wm8994-core.c | 18 --- trunk/drivers/of/pdt.c | 112 +++++++++++------- trunk/drivers/usb/host/ehci-xilinx-of.c | 1 - trunk/fs/ext2/namei.c | 9 +- trunk/fs/nilfs2/segment.c | 3 +- trunk/fs/proc/proc_devtree.c | 2 +- trunk/fs/xfs/linux-2.6/xfs_ioctl.c | 11 +- trunk/include/linux/mfd/wm8994/core.h | 1 - 50 files changed, 356 insertions(+), 466 deletions(-) diff --git a/[refs] b/[refs] index f5298c0b5d3d..b0bc184bce81 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c640e13f8efeb38daa4c0b0891a46d32b01e51ac +refs/heads/master: af24ee9ea8d532e16883251a6684dfa1be8eec29 diff --git a/trunk/arch/alpha/Kconfig b/trunk/arch/alpha/Kconfig index cc31bec2e316..47f63d480141 100644 --- a/trunk/arch/alpha/Kconfig +++ b/trunk/arch/alpha/Kconfig @@ -11,7 +11,6 @@ config ALPHA select HAVE_GENERIC_HARDIRQS select GENERIC_IRQ_PROBE select AUTO_IRQ_AFFINITY if SMP - select GENERIC_HARDIRQS_NO_DEPRECATED help The Alpha is a 64-bit general-purpose processor designed and marketed by the Digital Equipment Corporation of blessed memory, diff --git a/trunk/arch/alpha/kernel/irq.c b/trunk/arch/alpha/kernel/irq.c index a19d60082299..9ab234f48dd8 100644 --- a/trunk/arch/alpha/kernel/irq.c +++ b/trunk/arch/alpha/kernel/irq.c @@ -44,16 +44,11 @@ static char irq_user_affinity[NR_IRQS]; int irq_select_affinity(unsigned int irq) { - struct irq_data *data = irq_get_irq_data(irq); - struct irq_chip *chip; + struct irq_desc *desc = irq_to_desc[irq]; static int last_cpu; int cpu = last_cpu + 1; - if (!data) - return 1; - chip = irq_data_get_irq_chip(data); - - if (!chip->irq_set_affinity || irq_user_affinity[irq]) + if (!desc || !get_irq_desc_chip(desc)->set_affinity || irq_user_affinity[irq]) return 1; while (!cpu_possible(cpu) || @@ -61,8 +56,8 @@ int irq_select_affinity(unsigned int irq) cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0); last_cpu = cpu; - cpumask_copy(data->affinity, cpumask_of(cpu)); - chip->irq_set_affinity(data, cpumask_of(cpu), false); + cpumask_copy(desc->affinity, cpumask_of(cpu)); + get_irq_desc_chip(desc)->set_affinity(irq, cpumask_of(cpu)); return 0; } #endif /* CONFIG_SMP */ diff --git a/trunk/arch/alpha/kernel/irq_alpha.c b/trunk/arch/alpha/kernel/irq_alpha.c index 411ca11d0a18..2d0679b60939 100644 --- a/trunk/arch/alpha/kernel/irq_alpha.c +++ b/trunk/arch/alpha/kernel/irq_alpha.c @@ -228,9 +228,14 @@ struct irqaction timer_irqaction = { void __init init_rtc_irq(void) { - set_irq_chip_and_handler_name(RTC_IRQ, &no_irq_chip, - handle_simple_irq, "RTC"); - setup_irq(RTC_IRQ, &timer_irqaction); + struct irq_desc *desc = irq_to_desc(RTC_IRQ); + + if (desc) { + desc->status |= IRQ_DISABLED; + set_irq_chip_and_handler_name(RTC_IRQ, &no_irq_chip, + handle_simple_irq, "RTC"); + setup_irq(RTC_IRQ, &timer_irqaction); + } } /* Dummy irqactions. */ diff --git a/trunk/arch/alpha/kernel/irq_i8259.c b/trunk/arch/alpha/kernel/irq_i8259.c index c7cc9813e45f..956ea0ed1694 100644 --- a/trunk/arch/alpha/kernel/irq_i8259.c +++ b/trunk/arch/alpha/kernel/irq_i8259.c @@ -33,10 +33,10 @@ i8259_update_irq_hw(unsigned int irq, unsigned long mask) } inline void -i8259a_enable_irq(struct irq_data *d) +i8259a_enable_irq(unsigned int irq) { spin_lock(&i8259_irq_lock); - i8259_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); + i8259_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); spin_unlock(&i8259_irq_lock); } @@ -47,18 +47,16 @@ __i8259a_disable_irq(unsigned int irq) } void -i8259a_disable_irq(struct irq_data *d) +i8259a_disable_irq(unsigned int irq) { spin_lock(&i8259_irq_lock); - __i8259a_disable_irq(d->irq); + __i8259a_disable_irq(irq); spin_unlock(&i8259_irq_lock); } void -i8259a_mask_and_ack_irq(struct irq_data *d) +i8259a_mask_and_ack_irq(unsigned int irq) { - unsigned int irq = d->irq; - spin_lock(&i8259_irq_lock); __i8259a_disable_irq(irq); @@ -73,9 +71,9 @@ i8259a_mask_and_ack_irq(struct irq_data *d) struct irq_chip i8259a_irq_type = { .name = "XT-PIC", - .irq_unmask = i8259a_enable_irq, - .irq_mask = i8259a_disable_irq, - .irq_mask_ack = i8259a_mask_and_ack_irq, + .unmask = i8259a_enable_irq, + .mask = i8259a_disable_irq, + .mask_ack = i8259a_mask_and_ack_irq, }; void __init diff --git a/trunk/arch/alpha/kernel/irq_impl.h b/trunk/arch/alpha/kernel/irq_impl.h index d507a234b05d..b63ccd7386f1 100644 --- a/trunk/arch/alpha/kernel/irq_impl.h +++ b/trunk/arch/alpha/kernel/irq_impl.h @@ -31,9 +31,11 @@ extern void init_rtc_irq(void); extern void common_init_isa_dma(void); -extern void i8259a_enable_irq(struct irq_data *d); -extern void i8259a_disable_irq(struct irq_data *d); -extern void i8259a_mask_and_ack_irq(struct irq_data *d); +extern void i8259a_enable_irq(unsigned int); +extern void i8259a_disable_irq(unsigned int); +extern void i8259a_mask_and_ack_irq(unsigned int); +extern unsigned int i8259a_startup_irq(unsigned int); +extern void i8259a_end_irq(unsigned int); extern struct irq_chip i8259a_irq_type; extern void init_i8259a_irqs(void); diff --git a/trunk/arch/alpha/kernel/irq_pyxis.c b/trunk/arch/alpha/kernel/irq_pyxis.c index b30227fa7f5f..2863458c853e 100644 --- a/trunk/arch/alpha/kernel/irq_pyxis.c +++ b/trunk/arch/alpha/kernel/irq_pyxis.c @@ -29,21 +29,21 @@ pyxis_update_irq_hw(unsigned long mask) } static inline void -pyxis_enable_irq(struct irq_data *d) +pyxis_enable_irq(unsigned int irq) { - pyxis_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); + pyxis_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); } static void -pyxis_disable_irq(struct irq_data *d) +pyxis_disable_irq(unsigned int irq) { - pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); + pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); } static void -pyxis_mask_and_ack_irq(struct irq_data *d) +pyxis_mask_and_ack_irq(unsigned int irq) { - unsigned long bit = 1UL << (d->irq - 16); + unsigned long bit = 1UL << (irq - 16); unsigned long mask = cached_irq_mask &= ~bit; /* Disable the interrupt. */ @@ -58,9 +58,9 @@ pyxis_mask_and_ack_irq(struct irq_data *d) static struct irq_chip pyxis_irq_type = { .name = "PYXIS", - .irq_mask_ack = pyxis_mask_and_ack_irq, - .irq_mask = pyxis_disable_irq, - .irq_unmask = pyxis_enable_irq, + .mask_ack = pyxis_mask_and_ack_irq, + .mask = pyxis_disable_irq, + .unmask = pyxis_enable_irq, }; void @@ -103,7 +103,7 @@ init_pyxis_irqs(unsigned long ignore_mask) if ((ignore_mask >> i) & 1) continue; set_irq_chip_and_handler(i, &pyxis_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); + irq_to_desc(i)->status |= IRQ_LEVEL; } setup_irq(16+7, &isa_cascade_irqaction); diff --git a/trunk/arch/alpha/kernel/irq_srm.c b/trunk/arch/alpha/kernel/irq_srm.c index 82a47bba41c4..0e57e828b413 100644 --- a/trunk/arch/alpha/kernel/irq_srm.c +++ b/trunk/arch/alpha/kernel/irq_srm.c @@ -18,27 +18,27 @@ DEFINE_SPINLOCK(srm_irq_lock); static inline void -srm_enable_irq(struct irq_data *d) +srm_enable_irq(unsigned int irq) { spin_lock(&srm_irq_lock); - cserve_ena(d->irq - 16); + cserve_ena(irq - 16); spin_unlock(&srm_irq_lock); } static void -srm_disable_irq(struct irq_data *d) +srm_disable_irq(unsigned int irq) { spin_lock(&srm_irq_lock); - cserve_dis(d->irq - 16); + cserve_dis(irq - 16); spin_unlock(&srm_irq_lock); } /* Handle interrupts from the SRM, assuming no additional weirdness. */ static struct irq_chip srm_irq_type = { .name = "SRM", - .irq_unmask = srm_enable_irq, - .irq_mask = srm_disable_irq, - .irq_mask_ack = srm_disable_irq, + .unmask = srm_enable_irq, + .mask = srm_disable_irq, + .mask_ack = srm_disable_irq, }; void __init @@ -52,7 +52,7 @@ init_srm_irqs(long max, unsigned long ignore_mask) if (i < 64 && ((ignore_mask >> i) & 1)) continue; set_irq_chip_and_handler(i, &srm_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); + irq_to_desc(i)->status |= IRQ_LEVEL; } } diff --git a/trunk/arch/alpha/kernel/sys_alcor.c b/trunk/arch/alpha/kernel/sys_alcor.c index 88d95e872f55..7bef61768236 100644 --- a/trunk/arch/alpha/kernel/sys_alcor.c +++ b/trunk/arch/alpha/kernel/sys_alcor.c @@ -44,31 +44,31 @@ alcor_update_irq_hw(unsigned long mask) } static inline void -alcor_enable_irq(struct irq_data *d) +alcor_enable_irq(unsigned int irq) { - alcor_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); + alcor_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); } static void -alcor_disable_irq(struct irq_data *d) +alcor_disable_irq(unsigned int irq) { - alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); + alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); } static void -alcor_mask_and_ack_irq(struct irq_data *d) +alcor_mask_and_ack_irq(unsigned int irq) { - alcor_disable_irq(d); + alcor_disable_irq(irq); /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ - *(vuip)GRU_INT_CLEAR = 1 << (d->irq - 16); mb(); + *(vuip)GRU_INT_CLEAR = 1 << (irq - 16); mb(); *(vuip)GRU_INT_CLEAR = 0; mb(); } static void -alcor_isa_mask_and_ack_irq(struct irq_data *d) +alcor_isa_mask_and_ack_irq(unsigned int irq) { - i8259a_mask_and_ack_irq(d); + i8259a_mask_and_ack_irq(irq); /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); @@ -77,9 +77,9 @@ alcor_isa_mask_and_ack_irq(struct irq_data *d) static struct irq_chip alcor_irq_type = { .name = "ALCOR", - .irq_unmask = alcor_enable_irq, - .irq_mask = alcor_disable_irq, - .irq_mask_ack = alcor_mask_and_ack_irq, + .unmask = alcor_enable_irq, + .mask = alcor_disable_irq, + .mask_ack = alcor_mask_and_ack_irq, }; static void @@ -126,9 +126,9 @@ alcor_init_irq(void) if (i >= 16+20 && i <= 16+30) continue; set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); + irq_to_desc(i)->status |= IRQ_LEVEL; } - i8259a_irq_type.irq_ack = alcor_isa_mask_and_ack_irq; + i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq; init_i8259a_irqs(); common_init_isa_dma(); diff --git a/trunk/arch/alpha/kernel/sys_cabriolet.c b/trunk/arch/alpha/kernel/sys_cabriolet.c index 57eb6307bc27..b0c916493aea 100644 --- a/trunk/arch/alpha/kernel/sys_cabriolet.c +++ b/trunk/arch/alpha/kernel/sys_cabriolet.c @@ -46,22 +46,22 @@ cabriolet_update_irq_hw(unsigned int irq, unsigned long mask) } static inline void -cabriolet_enable_irq(struct irq_data *d) +cabriolet_enable_irq(unsigned int irq) { - cabriolet_update_irq_hw(d->irq, cached_irq_mask &= ~(1UL << d->irq)); + cabriolet_update_irq_hw(irq, cached_irq_mask &= ~(1UL << irq)); } static void -cabriolet_disable_irq(struct irq_data *d) +cabriolet_disable_irq(unsigned int irq) { - cabriolet_update_irq_hw(d->irq, cached_irq_mask |= 1UL << d->irq); + cabriolet_update_irq_hw(irq, cached_irq_mask |= 1UL << irq); } static struct irq_chip cabriolet_irq_type = { .name = "CABRIOLET", - .irq_unmask = cabriolet_enable_irq, - .irq_mask = cabriolet_disable_irq, - .irq_mask_ack = cabriolet_disable_irq, + .unmask = cabriolet_enable_irq, + .mask = cabriolet_disable_irq, + .mask_ack = cabriolet_disable_irq, }; static void @@ -107,7 +107,7 @@ common_init_irq(void (*srm_dev_int)(unsigned long v)) for (i = 16; i < 35; ++i) { set_irq_chip_and_handler(i, &cabriolet_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); + irq_to_desc(i)->status |= IRQ_LEVEL; } } diff --git a/trunk/arch/alpha/kernel/sys_dp264.c b/trunk/arch/alpha/kernel/sys_dp264.c index 481df4ecb651..edad5f759ccd 100644 --- a/trunk/arch/alpha/kernel/sys_dp264.c +++ b/trunk/arch/alpha/kernel/sys_dp264.c @@ -98,37 +98,37 @@ tsunami_update_irq_hw(unsigned long mask) } static void -dp264_enable_irq(struct irq_data *d) +dp264_enable_irq(unsigned int irq) { spin_lock(&dp264_irq_lock); - cached_irq_mask |= 1UL << d->irq; + cached_irq_mask |= 1UL << irq; tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); } static void -dp264_disable_irq(struct irq_data *d) +dp264_disable_irq(unsigned int irq) { spin_lock(&dp264_irq_lock); - cached_irq_mask &= ~(1UL << d->irq); + cached_irq_mask &= ~(1UL << irq); tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); } static void -clipper_enable_irq(struct irq_data *d) +clipper_enable_irq(unsigned int irq) { spin_lock(&dp264_irq_lock); - cached_irq_mask |= 1UL << (d->irq - 16); + cached_irq_mask |= 1UL << (irq - 16); tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); } static void -clipper_disable_irq(struct irq_data *d) +clipper_disable_irq(unsigned int irq) { spin_lock(&dp264_irq_lock); - cached_irq_mask &= ~(1UL << (d->irq - 16)); + cached_irq_mask &= ~(1UL << (irq - 16)); tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); } @@ -149,11 +149,10 @@ cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) } static int -dp264_set_affinity(struct irq_data *d, const struct cpumask *affinity, - bool force) -{ +dp264_set_affinity(unsigned int irq, const struct cpumask *affinity) +{ spin_lock(&dp264_irq_lock); - cpu_set_irq_affinity(d->irq, *affinity); + cpu_set_irq_affinity(irq, *affinity); tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); @@ -161,11 +160,10 @@ dp264_set_affinity(struct irq_data *d, const struct cpumask *affinity, } static int -clipper_set_affinity(struct irq_data *d, const struct cpumask *affinity, - bool force) -{ +clipper_set_affinity(unsigned int irq, const struct cpumask *affinity) +{ spin_lock(&dp264_irq_lock); - cpu_set_irq_affinity(d->irq - 16, *affinity); + cpu_set_irq_affinity(irq - 16, *affinity); tsunami_update_irq_hw(cached_irq_mask); spin_unlock(&dp264_irq_lock); @@ -173,19 +171,19 @@ clipper_set_affinity(struct irq_data *d, const struct cpumask *affinity, } static struct irq_chip dp264_irq_type = { - .name = "DP264", - .irq_unmask = dp264_enable_irq, - .irq_mask = dp264_disable_irq, - .irq_mask_ack = dp264_disable_irq, - .irq_set_affinity = dp264_set_affinity, + .name = "DP264", + .unmask = dp264_enable_irq, + .mask = dp264_disable_irq, + .mask_ack = dp264_disable_irq, + .set_affinity = dp264_set_affinity, }; static struct irq_chip clipper_irq_type = { - .name = "CLIPPER", - .irq_unmask = clipper_enable_irq, - .irq_mask = clipper_disable_irq, - .irq_mask_ack = clipper_disable_irq, - .irq_set_affinity = clipper_set_affinity, + .name = "CLIPPER", + .unmask = clipper_enable_irq, + .mask = clipper_disable_irq, + .mask_ack = clipper_disable_irq, + .set_affinity = clipper_set_affinity, }; static void @@ -270,8 +268,8 @@ init_tsunami_irqs(struct irq_chip * ops, int imin, int imax) { long i; for (i = imin; i <= imax; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, ops, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } } diff --git a/trunk/arch/alpha/kernel/sys_eb64p.c b/trunk/arch/alpha/kernel/sys_eb64p.c index 402e908ffb3e..ae5f29d127b0 100644 --- a/trunk/arch/alpha/kernel/sys_eb64p.c +++ b/trunk/arch/alpha/kernel/sys_eb64p.c @@ -44,22 +44,22 @@ eb64p_update_irq_hw(unsigned int irq, unsigned long mask) } static inline void -eb64p_enable_irq(struct irq_data *d) +eb64p_enable_irq(unsigned int irq) { - eb64p_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); + eb64p_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); } static void -eb64p_disable_irq(struct irq_data *d) +eb64p_disable_irq(unsigned int irq) { - eb64p_update_irq_hw(d->irq, cached_irq_mask |= 1 << d->irq); + eb64p_update_irq_hw(irq, cached_irq_mask |= 1 << irq); } static struct irq_chip eb64p_irq_type = { .name = "EB64P", - .irq_unmask = eb64p_enable_irq, - .irq_mask = eb64p_disable_irq, - .irq_mask_ack = eb64p_disable_irq, + .unmask = eb64p_enable_irq, + .mask = eb64p_disable_irq, + .mask_ack = eb64p_disable_irq, }; static void @@ -118,9 +118,9 @@ eb64p_init_irq(void) init_i8259a_irqs(); for (i = 16; i < 32; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &eb64p_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); - } + } common_init_isa_dma(); setup_irq(16+5, &isa_cascade_irqaction); diff --git a/trunk/arch/alpha/kernel/sys_eiger.c b/trunk/arch/alpha/kernel/sys_eiger.c index 0b44a54c1522..1121bc5c6c6c 100644 --- a/trunk/arch/alpha/kernel/sys_eiger.c +++ b/trunk/arch/alpha/kernel/sys_eiger.c @@ -51,18 +51,16 @@ eiger_update_irq_hw(unsigned long irq, unsigned long mask) } static inline void -eiger_enable_irq(struct irq_data *d) +eiger_enable_irq(unsigned int irq) { - unsigned int irq = d->irq; unsigned long mask; mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); eiger_update_irq_hw(irq, mask); } static void -eiger_disable_irq(struct irq_data *d) +eiger_disable_irq(unsigned int irq) { - unsigned int irq = d->irq; unsigned long mask; mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); eiger_update_irq_hw(irq, mask); @@ -70,9 +68,9 @@ eiger_disable_irq(struct irq_data *d) static struct irq_chip eiger_irq_type = { .name = "EIGER", - .irq_unmask = eiger_enable_irq, - .irq_mask = eiger_disable_irq, - .irq_mask_ack = eiger_disable_irq, + .unmask = eiger_enable_irq, + .mask = eiger_disable_irq, + .mask_ack = eiger_disable_irq, }; static void @@ -138,8 +136,8 @@ eiger_init_irq(void) init_i8259a_irqs(); for (i = 16; i < 128; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &eiger_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } } diff --git a/trunk/arch/alpha/kernel/sys_jensen.c b/trunk/arch/alpha/kernel/sys_jensen.c index 00341b75c8b2..34f55e03d331 100644 --- a/trunk/arch/alpha/kernel/sys_jensen.c +++ b/trunk/arch/alpha/kernel/sys_jensen.c @@ -63,34 +63,34 @@ */ static void -jensen_local_enable(struct irq_data *d) +jensen_local_enable(unsigned int irq) { /* the parport is really hw IRQ 1, silly Jensen. */ - if (d->irq == 7) - i8259a_enable_irq(d); + if (irq == 7) + i8259a_enable_irq(1); } static void -jensen_local_disable(struct irq_data *d) +jensen_local_disable(unsigned int irq) { /* the parport is really hw IRQ 1, silly Jensen. */ - if (d->irq == 7) - i8259a_disable_irq(d); + if (irq == 7) + i8259a_disable_irq(1); } static void -jensen_local_mask_ack(struct irq_data *d) +jensen_local_mask_ack(unsigned int irq) { /* the parport is really hw IRQ 1, silly Jensen. */ - if (d->irq == 7) - i8259a_mask_and_ack_irq(d); + if (irq == 7) + i8259a_mask_and_ack_irq(1); } static struct irq_chip jensen_local_irq_type = { .name = "LOCAL", - .irq_unmask = jensen_local_enable, - .irq_mask = jensen_local_disable, - .irq_mask_ack = jensen_local_mask_ack, + .unmask = jensen_local_enable, + .mask = jensen_local_disable, + .mask_ack = jensen_local_mask_ack, }; static void diff --git a/trunk/arch/alpha/kernel/sys_marvel.c b/trunk/arch/alpha/kernel/sys_marvel.c index e61910734e41..2bfc9f1b1ddc 100644 --- a/trunk/arch/alpha/kernel/sys_marvel.c +++ b/trunk/arch/alpha/kernel/sys_marvel.c @@ -104,10 +104,9 @@ io7_get_irq_ctl(unsigned int irq, struct io7 **pio7) } static void -io7_enable_irq(struct irq_data *d) +io7_enable_irq(unsigned int irq) { volatile unsigned long *ctl; - unsigned int irq = d->irq; struct io7 *io7; ctl = io7_get_irq_ctl(irq, &io7); @@ -116,7 +115,7 @@ io7_enable_irq(struct irq_data *d) __func__, irq); return; } - + spin_lock(&io7->irq_lock); *ctl |= 1UL << 24; mb(); @@ -125,10 +124,9 @@ io7_enable_irq(struct irq_data *d) } static void -io7_disable_irq(struct irq_data *d) +io7_disable_irq(unsigned int irq) { volatile unsigned long *ctl; - unsigned int irq = d->irq; struct io7 *io7; ctl = io7_get_irq_ctl(irq, &io7); @@ -137,7 +135,7 @@ io7_disable_irq(struct irq_data *d) __func__, irq); return; } - + spin_lock(&io7->irq_lock); *ctl &= ~(1UL << 24); mb(); @@ -146,29 +144,35 @@ io7_disable_irq(struct irq_data *d) } static void -marvel_irq_noop(struct irq_data *d) -{ - return; +marvel_irq_noop(unsigned int irq) +{ + return; +} + +static unsigned int +marvel_irq_noop_return(unsigned int irq) +{ + return 0; } static struct irq_chip marvel_legacy_irq_type = { .name = "LEGACY", - .irq_mask = marvel_irq_noop, - .irq_unmask = marvel_irq_noop, + .mask = marvel_irq_noop, + .unmask = marvel_irq_noop, }; static struct irq_chip io7_lsi_irq_type = { .name = "LSI", - .irq_unmask = io7_enable_irq, - .irq_mask = io7_disable_irq, - .irq_mask_ack = io7_disable_irq, + .unmask = io7_enable_irq, + .mask = io7_disable_irq, + .mask_ack = io7_disable_irq, }; static struct irq_chip io7_msi_irq_type = { .name = "MSI", - .irq_unmask = io7_enable_irq, - .irq_mask = io7_disable_irq, - .irq_ack = marvel_irq_noop, + .unmask = io7_enable_irq, + .mask = io7_disable_irq, + .ack = marvel_irq_noop, }; static void @@ -276,8 +280,8 @@ init_io7_irqs(struct io7 *io7, /* Set up the lsi irqs. */ for (i = 0; i < 128; ++i) { + irq_to_desc(base + i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(base + i, lsi_ops, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } /* Disable the implemented irqs in hardware. */ @@ -290,8 +294,8 @@ init_io7_irqs(struct io7 *io7, /* Set up the msi irqs. */ for (i = 128; i < (128 + 512); ++i) { + irq_to_desc(base + i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(base + i, msi_ops, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } for (i = 0; i < 16; ++i) diff --git a/trunk/arch/alpha/kernel/sys_mikasa.c b/trunk/arch/alpha/kernel/sys_mikasa.c index cf7f43dd3147..bcc1639e8efb 100644 --- a/trunk/arch/alpha/kernel/sys_mikasa.c +++ b/trunk/arch/alpha/kernel/sys_mikasa.c @@ -43,22 +43,22 @@ mikasa_update_irq_hw(int mask) } static inline void -mikasa_enable_irq(struct irq_data *d) +mikasa_enable_irq(unsigned int irq) { - mikasa_update_irq_hw(cached_irq_mask |= 1 << (d->irq - 16)); + mikasa_update_irq_hw(cached_irq_mask |= 1 << (irq - 16)); } static void -mikasa_disable_irq(struct irq_data *d) +mikasa_disable_irq(unsigned int irq) { - mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (d->irq - 16))); + mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (irq - 16))); } static struct irq_chip mikasa_irq_type = { .name = "MIKASA", - .irq_unmask = mikasa_enable_irq, - .irq_mask = mikasa_disable_irq, - .irq_mask_ack = mikasa_disable_irq, + .unmask = mikasa_enable_irq, + .mask = mikasa_disable_irq, + .mask_ack = mikasa_disable_irq, }; static void @@ -98,8 +98,8 @@ mikasa_init_irq(void) mikasa_update_irq_hw(0); for (i = 16; i < 32; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &mikasa_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } init_i8259a_irqs(); diff --git a/trunk/arch/alpha/kernel/sys_noritake.c b/trunk/arch/alpha/kernel/sys_noritake.c index 92bc188e94a9..e88f4ae1260e 100644 --- a/trunk/arch/alpha/kernel/sys_noritake.c +++ b/trunk/arch/alpha/kernel/sys_noritake.c @@ -48,22 +48,22 @@ noritake_update_irq_hw(int irq, int mask) } static void -noritake_enable_irq(struct irq_data *d) +noritake_enable_irq(unsigned int irq) { - noritake_update_irq_hw(d->irq, cached_irq_mask |= 1 << (d->irq - 16)); + noritake_update_irq_hw(irq, cached_irq_mask |= 1 << (irq - 16)); } static void -noritake_disable_irq(struct irq_data *d) +noritake_disable_irq(unsigned int irq) { - noritake_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << (d->irq - 16))); + noritake_update_irq_hw(irq, cached_irq_mask &= ~(1 << (irq - 16))); } static struct irq_chip noritake_irq_type = { .name = "NORITAKE", - .irq_unmask = noritake_enable_irq, - .irq_mask = noritake_disable_irq, - .irq_mask_ack = noritake_disable_irq, + .unmask = noritake_enable_irq, + .mask = noritake_disable_irq, + .mask_ack = noritake_disable_irq, }; static void @@ -127,8 +127,8 @@ noritake_init_irq(void) outw(0, 0x54c); for (i = 16; i < 48; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &noritake_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } init_i8259a_irqs(); diff --git a/trunk/arch/alpha/kernel/sys_rawhide.c b/trunk/arch/alpha/kernel/sys_rawhide.c index 936d4140ed5f..6a51364dd1cc 100644 --- a/trunk/arch/alpha/kernel/sys_rawhide.c +++ b/trunk/arch/alpha/kernel/sys_rawhide.c @@ -56,10 +56,9 @@ rawhide_update_irq_hw(int hose, int mask) (((h) < MCPCIA_MAX_HOSES) && (cached_irq_masks[(h)] != 0)) static inline void -rawhide_enable_irq(struct irq_data *d) +rawhide_enable_irq(unsigned int irq) { unsigned int mask, hose; - unsigned int irq = d->irq; irq -= 16; hose = irq / 24; @@ -77,10 +76,9 @@ rawhide_enable_irq(struct irq_data *d) } static void -rawhide_disable_irq(struct irq_data *d) +rawhide_disable_irq(unsigned int irq) { unsigned int mask, hose; - unsigned int irq = d->irq; irq -= 16; hose = irq / 24; @@ -98,10 +96,9 @@ rawhide_disable_irq(struct irq_data *d) } static void -rawhide_mask_and_ack_irq(struct irq_data *d) +rawhide_mask_and_ack_irq(unsigned int irq) { unsigned int mask, mask1, hose; - unsigned int irq = d->irq; irq -= 16; hose = irq / 24; @@ -126,9 +123,9 @@ rawhide_mask_and_ack_irq(struct irq_data *d) static struct irq_chip rawhide_irq_type = { .name = "RAWHIDE", - .irq_unmask = rawhide_enable_irq, - .irq_mask = rawhide_disable_irq, - .irq_mask_ack = rawhide_mask_and_ack_irq, + .unmask = rawhide_enable_irq, + .mask = rawhide_disable_irq, + .mask_ack = rawhide_mask_and_ack_irq, }; static void @@ -180,8 +177,8 @@ rawhide_init_irq(void) } for (i = 16; i < 128; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &rawhide_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } init_i8259a_irqs(); diff --git a/trunk/arch/alpha/kernel/sys_rx164.c b/trunk/arch/alpha/kernel/sys_rx164.c index cea22a62913b..89e7e37ec84c 100644 --- a/trunk/arch/alpha/kernel/sys_rx164.c +++ b/trunk/arch/alpha/kernel/sys_rx164.c @@ -47,22 +47,22 @@ rx164_update_irq_hw(unsigned long mask) } static inline void -rx164_enable_irq(struct irq_data *d) +rx164_enable_irq(unsigned int irq) { - rx164_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); + rx164_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); } static void -rx164_disable_irq(struct irq_data *d) +rx164_disable_irq(unsigned int irq) { - rx164_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); + rx164_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); } static struct irq_chip rx164_irq_type = { .name = "RX164", - .irq_unmask = rx164_enable_irq, - .irq_mask = rx164_disable_irq, - .irq_mask_ack = rx164_disable_irq, + .unmask = rx164_enable_irq, + .mask = rx164_disable_irq, + .mask_ack = rx164_disable_irq, }; static void @@ -99,8 +99,8 @@ rx164_init_irq(void) rx164_update_irq_hw(0); for (i = 16; i < 40; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &rx164_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } init_i8259a_irqs(); diff --git a/trunk/arch/alpha/kernel/sys_sable.c b/trunk/arch/alpha/kernel/sys_sable.c index a349538aabc9..5c4423d1b06c 100644 --- a/trunk/arch/alpha/kernel/sys_sable.c +++ b/trunk/arch/alpha/kernel/sys_sable.c @@ -443,11 +443,11 @@ lynx_swizzle(struct pci_dev *dev, u8 *pinp) /* GENERIC irq routines */ static inline void -sable_lynx_enable_irq(struct irq_data *d) +sable_lynx_enable_irq(unsigned int irq) { unsigned long bit, mask; - bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; spin_lock(&sable_lynx_irq_lock); mask = sable_lynx_irq_swizzle->shadow_mask &= ~(1UL << bit); sable_lynx_irq_swizzle->update_irq_hw(bit, mask); @@ -459,11 +459,11 @@ sable_lynx_enable_irq(struct irq_data *d) } static void -sable_lynx_disable_irq(struct irq_data *d) +sable_lynx_disable_irq(unsigned int irq) { unsigned long bit, mask; - bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; spin_lock(&sable_lynx_irq_lock); mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; sable_lynx_irq_swizzle->update_irq_hw(bit, mask); @@ -475,11 +475,11 @@ sable_lynx_disable_irq(struct irq_data *d) } static void -sable_lynx_mask_and_ack_irq(struct irq_data *d) +sable_lynx_mask_and_ack_irq(unsigned int irq) { unsigned long bit, mask; - bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; spin_lock(&sable_lynx_irq_lock); mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; sable_lynx_irq_swizzle->update_irq_hw(bit, mask); @@ -489,9 +489,9 @@ sable_lynx_mask_and_ack_irq(struct irq_data *d) static struct irq_chip sable_lynx_irq_type = { .name = "SABLE/LYNX", - .irq_unmask = sable_lynx_enable_irq, - .irq_mask = sable_lynx_disable_irq, - .irq_mask_ack = sable_lynx_mask_and_ack_irq, + .unmask = sable_lynx_enable_irq, + .mask = sable_lynx_disable_irq, + .mask_ack = sable_lynx_mask_and_ack_irq, }; static void @@ -518,9 +518,9 @@ sable_lynx_init_irq(int nr_of_irqs) long i; for (i = 0; i < nr_of_irqs; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &sable_lynx_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } common_init_isa_dma(); diff --git a/trunk/arch/alpha/kernel/sys_takara.c b/trunk/arch/alpha/kernel/sys_takara.c index 42a5331f13c4..f8a1e8a862fb 100644 --- a/trunk/arch/alpha/kernel/sys_takara.c +++ b/trunk/arch/alpha/kernel/sys_takara.c @@ -45,18 +45,16 @@ takara_update_irq_hw(unsigned long irq, unsigned long mask) } static inline void -takara_enable_irq(struct irq_data *d) +takara_enable_irq(unsigned int irq) { - unsigned int irq = d->irq; unsigned long mask; mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); takara_update_irq_hw(irq, mask); } static void -takara_disable_irq(struct irq_data *d) +takara_disable_irq(unsigned int irq) { - unsigned int irq = d->irq; unsigned long mask; mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); takara_update_irq_hw(irq, mask); @@ -64,9 +62,9 @@ takara_disable_irq(struct irq_data *d) static struct irq_chip takara_irq_type = { .name = "TAKARA", - .irq_unmask = takara_enable_irq, - .irq_mask = takara_disable_irq, - .irq_mask_ack = takara_disable_irq, + .unmask = takara_enable_irq, + .mask = takara_disable_irq, + .mask_ack = takara_disable_irq, }; static void @@ -138,8 +136,8 @@ takara_init_irq(void) takara_update_irq_hw(i, -1); for (i = 16; i < 128; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, &takara_irq_type, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } common_init_isa_dma(); diff --git a/trunk/arch/alpha/kernel/sys_titan.c b/trunk/arch/alpha/kernel/sys_titan.c index f6c108a3d673..e02494bf5ef3 100644 --- a/trunk/arch/alpha/kernel/sys_titan.c +++ b/trunk/arch/alpha/kernel/sys_titan.c @@ -112,9 +112,8 @@ titan_update_irq_hw(unsigned long mask) } static inline void -titan_enable_irq(struct irq_data *d) +titan_enable_irq(unsigned int irq) { - unsigned int irq = d->irq; spin_lock(&titan_irq_lock); titan_cached_irq_mask |= 1UL << (irq - 16); titan_update_irq_hw(titan_cached_irq_mask); @@ -122,9 +121,8 @@ titan_enable_irq(struct irq_data *d) } static inline void -titan_disable_irq(struct irq_data *d) +titan_disable_irq(unsigned int irq) { - unsigned int irq = d->irq; spin_lock(&titan_irq_lock); titan_cached_irq_mask &= ~(1UL << (irq - 16)); titan_update_irq_hw(titan_cached_irq_mask); @@ -146,8 +144,7 @@ titan_cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) } static int -titan_set_irq_affinity(struct irq_data *d, const struct cpumask *affinity, - bool force) +titan_set_irq_affinity(unsigned int irq, const struct cpumask *affinity) { spin_lock(&titan_irq_lock); titan_cpu_set_irq_affinity(irq - 16, *affinity); @@ -178,17 +175,17 @@ init_titan_irqs(struct irq_chip * ops, int imin, int imax) { long i; for (i = imin; i <= imax; ++i) { + irq_to_desc(i)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i, ops, handle_level_irq); - irq_set_status_flags(i, IRQ_LEVEL); } } static struct irq_chip titan_irq_type = { - .name = "TITAN", - .irq_unmask = titan_enable_irq, - .irq_mask = titan_disable_irq, - .irq_mask_ack = titan_disable_irq, - .irq_set_affinity = titan_set_irq_affinity, + .name = "TITAN", + .unmask = titan_enable_irq, + .mask = titan_disable_irq, + .mask_ack = titan_disable_irq, + .set_affinity = titan_set_irq_affinity, }; static irqreturn_t diff --git a/trunk/arch/alpha/kernel/sys_wildfire.c b/trunk/arch/alpha/kernel/sys_wildfire.c index ca60a387ef0a..eec52594d410 100644 --- a/trunk/arch/alpha/kernel/sys_wildfire.c +++ b/trunk/arch/alpha/kernel/sys_wildfire.c @@ -104,12 +104,10 @@ wildfire_init_irq_hw(void) } static void -wildfire_enable_irq(struct irq_data *d) +wildfire_enable_irq(unsigned int irq) { - unsigned int irq = d->irq; - if (irq < 16) - i8259a_enable_irq(d); + i8259a_enable_irq(irq); spin_lock(&wildfire_irq_lock); set_bit(irq, &cached_irq_mask); @@ -118,12 +116,10 @@ wildfire_enable_irq(struct irq_data *d) } static void -wildfire_disable_irq(struct irq_data *d) +wildfire_disable_irq(unsigned int irq) { - unsigned int irq = d->irq; - if (irq < 16) - i8259a_disable_irq(d); + i8259a_disable_irq(irq); spin_lock(&wildfire_irq_lock); clear_bit(irq, &cached_irq_mask); @@ -132,12 +128,10 @@ wildfire_disable_irq(struct irq_data *d) } static void -wildfire_mask_and_ack_irq(struct irq_data *d) +wildfire_mask_and_ack_irq(unsigned int irq) { - unsigned int irq = d->irq; - if (irq < 16) - i8259a_mask_and_ack_irq(d); + i8259a_mask_and_ack_irq(irq); spin_lock(&wildfire_irq_lock); clear_bit(irq, &cached_irq_mask); @@ -147,9 +141,9 @@ wildfire_mask_and_ack_irq(struct irq_data *d) static struct irq_chip wildfire_irq_type = { .name = "WILDFIRE", - .irq_unmask = wildfire_enable_irq, - .irq_mask = wildfire_disable_irq, - .irq_mask_ack = wildfire_mask_and_ack_irq, + .unmask = wildfire_enable_irq, + .mask = wildfire_disable_irq, + .mask_ack = wildfire_mask_and_ack_irq, }; static void __init @@ -183,21 +177,21 @@ wildfire_init_irq_per_pca(int qbbno, int pcano) for (i = 0; i < 16; ++i) { if (i == 2) continue; + irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, handle_level_irq); - irq_set_status_flags(i + irq_bias, IRQ_LEVEL); } + irq_to_desc(36+irq_bias)->status |= IRQ_LEVEL; set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, handle_level_irq); - irq_set_status_flags(36 + irq_bias, IRQ_LEVEL); for (i = 40; i < 64; ++i) { + irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, handle_level_irq); - irq_set_status_flags(i + irq_bias, IRQ_LEVEL); } - setup_irq(32+irq_bias, &isa_enable); + setup_irq(32+irq_bias, &isa_enable); } static void __init diff --git a/trunk/arch/powerpc/include/asm/machdep.h b/trunk/arch/powerpc/include/asm/machdep.h index fe56a23e1ff0..991d5998d6be 100644 --- a/trunk/arch/powerpc/include/asm/machdep.h +++ b/trunk/arch/powerpc/include/asm/machdep.h @@ -240,12 +240,6 @@ struct machdep_calls { * claims to support kexec. */ int (*machine_kexec_prepare)(struct kimage *image); - - /* Called to perform the _real_ kexec. - * Do NOT allocate memory or fail here. We are past the point of - * no return. - */ - void (*machine_kexec)(struct kimage *image); #endif /* CONFIG_KEXEC */ #ifdef CONFIG_SUSPEND diff --git a/trunk/arch/powerpc/kernel/machine_kexec.c b/trunk/arch/powerpc/kernel/machine_kexec.c index a5f8672eeff3..49a170af8145 100644 --- a/trunk/arch/powerpc/kernel/machine_kexec.c +++ b/trunk/arch/powerpc/kernel/machine_kexec.c @@ -87,10 +87,7 @@ void machine_kexec(struct kimage *image) save_ftrace_enabled = __ftrace_enabled_save(); - if (ppc_md.machine_kexec) - ppc_md.machine_kexec(image); - else - default_machine_kexec(image); + default_machine_kexec(image); __ftrace_enabled_restore(save_ftrace_enabled); diff --git a/trunk/arch/powerpc/kernel/process.c b/trunk/arch/powerpc/kernel/process.c index 8303a6c65ef7..7a1d5cb76932 100644 --- a/trunk/arch/powerpc/kernel/process.c +++ b/trunk/arch/powerpc/kernel/process.c @@ -353,7 +353,6 @@ static void switch_booke_debug_regs(struct thread_struct *new_thread) prime_debug_regs(new_thread); } #else /* !CONFIG_PPC_ADV_DEBUG_REGS */ -#ifndef CONFIG_HAVE_HW_BREAKPOINT static void set_debug_reg_defaults(struct thread_struct *thread) { if (thread->dabr) { @@ -361,7 +360,6 @@ static void set_debug_reg_defaults(struct thread_struct *thread) set_dabr(0); } } -#endif /* !CONFIG_HAVE_HW_BREAKPOINT */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */ int set_dabr(unsigned long dabr) @@ -672,11 +670,11 @@ void flush_thread(void) { discard_lazy_cpu_state(); -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HAVE_HW_BREAKPOINTS flush_ptrace_hw_breakpoint(current); -#else /* CONFIG_HAVE_HW_BREAKPOINT */ +#else /* CONFIG_HAVE_HW_BREAKPOINTS */ set_debug_reg_defaults(¤t->thread); -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HAVE_HW_BREAKPOINTS */ } void diff --git a/trunk/arch/powerpc/mm/tlb_hash64.c b/trunk/arch/powerpc/mm/tlb_hash64.c index c14d09f614f3..1ec06576f619 100644 --- a/trunk/arch/powerpc/mm/tlb_hash64.c +++ b/trunk/arch/powerpc/mm/tlb_hash64.c @@ -38,11 +38,13 @@ DEFINE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch); * neesd to be flushed. This function will either perform the flush * immediately or will batch it up if the current CPU has an active * batch on it. + * + * Must be called from within some kind of spinlock/non-preempt region... */ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, pte_t *ptep, unsigned long pte, int huge) { - struct ppc64_tlb_batch *batch = &get_cpu_var(ppc64_tlb_batch); + struct ppc64_tlb_batch *batch = &__get_cpu_var(ppc64_tlb_batch); unsigned long vsid, vaddr; unsigned int psize; int ssize; @@ -97,7 +99,6 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, */ if (!batch->active) { flush_hash_page(vaddr, rpte, psize, ssize, 0); - put_cpu_var(ppc64_tlb_batch); return; } @@ -126,7 +127,6 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, batch->index = ++i; if (i >= PPC64_TLB_BATCH_NR) __flush_tlb_pending(batch); - put_cpu_var(ppc64_tlb_batch); } /* diff --git a/trunk/arch/x86/include/asm/msr-index.h b/trunk/arch/x86/include/asm/msr-index.h index 43a18c77676d..4d0dfa0d998e 100644 --- a/trunk/arch/x86/include/asm/msr-index.h +++ b/trunk/arch/x86/include/asm/msr-index.h @@ -36,11 +36,6 @@ #define MSR_IA32_PERFCTR1 0x000000c2 #define MSR_FSB_FREQ 0x000000cd -#define MSR_NHM_SNB_PKG_CST_CFG_CTL 0x000000e2 -#define NHM_C3_AUTO_DEMOTE (1UL << 25) -#define NHM_C1_AUTO_DEMOTE (1UL << 26) -#define ATM_LNC_C6_AUTO_DEMOTE (1UL << 25) - #define MSR_MTRRcap 0x000000fe #define MSR_IA32_BBL_CR_CTL 0x00000119 diff --git a/trunk/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/trunk/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c index 52c93648e492..bd1cac747f67 100644 --- a/trunk/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c +++ b/trunk/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c @@ -158,9 +158,9 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c) { if (c->x86 == 0x06) { if (cpu_has(c, X86_FEATURE_EST)) - printk_once(KERN_WARNING PFX "Warning: EST-capable " - "CPU detected. The acpi-cpufreq module offers " - "voltage scaling in addition to frequency " + printk(KERN_WARNING PFX "Warning: EST-capable CPU " + "detected. The acpi-cpufreq module offers " + "voltage scaling in addition of frequency " "scaling. You should use that instead of " "p4-clockmod, if possible.\n"); switch (c->x86_model) { diff --git a/trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index c567dec854f6..35c7e65e59be 100644 --- a/trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.c @@ -1537,7 +1537,6 @@ static struct notifier_block cpb_nb = { static int __cpuinit powernowk8_init(void) { unsigned int i, supported_cpus = 0, cpu; - int rv; for_each_online_cpu(i) { int rc; @@ -1556,14 +1555,14 @@ static int __cpuinit powernowk8_init(void) cpb_capable = true; + register_cpu_notifier(&cpb_nb); + msrs = msrs_alloc(); if (!msrs) { printk(KERN_ERR "%s: Error allocating msrs!\n", __func__); return -ENOMEM; } - register_cpu_notifier(&cpb_nb); - rdmsr_on_cpus(cpu_online_mask, MSR_K7_HWCR, msrs); for_each_cpu(cpu, cpu_online_mask) { @@ -1575,13 +1574,7 @@ static int __cpuinit powernowk8_init(void) (cpb_enabled ? "on" : "off")); } - rv = cpufreq_register_driver(&cpufreq_amd64_driver); - if (rv < 0 && boot_cpu_has(X86_FEATURE_CPB)) { - unregister_cpu_notifier(&cpb_nb); - msrs_free(msrs); - msrs = NULL; - } - return rv; + return cpufreq_register_driver(&cpufreq_amd64_driver); } /* driver entry point for term */ diff --git a/trunk/arch/x86/platform/olpc/olpc_dt.c b/trunk/arch/x86/platform/olpc/olpc_dt.c index 044bda5b3174..dab874647530 100644 --- a/trunk/arch/x86/platform/olpc/olpc_dt.c +++ b/trunk/arch/x86/platform/olpc/olpc_dt.c @@ -140,7 +140,8 @@ void * __init prom_early_alloc(unsigned long size) * wasted bootmem) and hand off chunks of it to callers. */ res = alloc_bootmem(chunk_size); - BUG_ON(!res); + if (!res) + return NULL; prom_early_allocated += chunk_size; memset(res, 0, chunk_size); free_mem = chunk_size; diff --git a/trunk/drivers/acpi/acpica/aclocal.h b/trunk/drivers/acpi/acpica/aclocal.h index edc25867ad9d..54784bb42cec 100644 --- a/trunk/drivers/acpi/acpica/aclocal.h +++ b/trunk/drivers/acpi/acpica/aclocal.h @@ -416,15 +416,10 @@ struct acpi_gpe_handler_info { u8 originally_enabled; /* True if GPE was originally enabled */ }; -struct acpi_gpe_notify_object { - struct acpi_namespace_node *node; - struct acpi_gpe_notify_object *next; -}; - union acpi_gpe_dispatch_info { struct acpi_namespace_node *method_node; /* Method node for this GPE level */ struct acpi_gpe_handler_info *handler; /* Installed GPE handler */ - struct acpi_gpe_notify_object device; /* List of _PRW devices for implicit notify */ + struct acpi_namespace_node *device_node; /* Parent _PRW device for implicit notify */ }; /* diff --git a/trunk/drivers/acpi/acpica/evgpe.c b/trunk/drivers/acpi/acpica/evgpe.c index f4725212eb48..14988a86066f 100644 --- a/trunk/drivers/acpi/acpica/evgpe.c +++ b/trunk/drivers/acpi/acpica/evgpe.c @@ -457,7 +457,6 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) acpi_status status; struct acpi_gpe_event_info *local_gpe_event_info; struct acpi_evaluate_info *info; - struct acpi_gpe_notify_object *notify_object; ACPI_FUNCTION_TRACE(ev_asynch_execute_gpe_method); @@ -509,18 +508,10 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) * from this thread -- because handlers may in turn run other * control methods. */ - status = acpi_ev_queue_notify_request( - local_gpe_event_info->dispatch.device.node, - ACPI_NOTIFY_DEVICE_WAKE); - - notify_object = local_gpe_event_info->dispatch.device.next; - while (ACPI_SUCCESS(status) && notify_object) { - status = acpi_ev_queue_notify_request( - notify_object->node, - ACPI_NOTIFY_DEVICE_WAKE); - notify_object = notify_object->next; - } - + status = + acpi_ev_queue_notify_request(local_gpe_event_info->dispatch. + device_node, + ACPI_NOTIFY_DEVICE_WAKE); break; case ACPI_GPE_DISPATCH_METHOD: diff --git a/trunk/drivers/acpi/acpica/evxfgpe.c b/trunk/drivers/acpi/acpica/evxfgpe.c index 52aaff3df562..3b20a3401b64 100644 --- a/trunk/drivers/acpi/acpica/evxfgpe.c +++ b/trunk/drivers/acpi/acpica/evxfgpe.c @@ -198,9 +198,7 @@ acpi_setup_gpe_for_wake(acpi_handle wake_device, acpi_status status = AE_BAD_PARAMETER; struct acpi_gpe_event_info *gpe_event_info; struct acpi_namespace_node *device_node; - struct acpi_gpe_notify_object *notify_object; acpi_cpu_flags flags; - u8 gpe_dispatch_mask; ACPI_FUNCTION_TRACE(acpi_setup_gpe_for_wake); @@ -223,49 +221,27 @@ acpi_setup_gpe_for_wake(acpi_handle wake_device, goto unlock_and_exit; } - if (wake_device == ACPI_ROOT_OBJECT) { - goto out; - } - /* * If there is no method or handler for this GPE, then the * wake_device will be notified whenever this GPE fires (aka * "implicit notify") Note: The GPE is assumed to be * level-triggered (for windows compatibility). */ - gpe_dispatch_mask = gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK; - if (gpe_dispatch_mask != ACPI_GPE_DISPATCH_NONE - && gpe_dispatch_mask != ACPI_GPE_DISPATCH_NOTIFY) { - goto out; - } + if (((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == + ACPI_GPE_DISPATCH_NONE) && (wake_device != ACPI_ROOT_OBJECT)) { - /* Validate wake_device is of type Device */ + /* Validate wake_device is of type Device */ - device_node = ACPI_CAST_PTR(struct acpi_namespace_node, wake_device); - if (device_node->type != ACPI_TYPE_DEVICE) { - goto unlock_and_exit; - } - - if (gpe_dispatch_mask == ACPI_GPE_DISPATCH_NONE) { - gpe_event_info->flags = (ACPI_GPE_DISPATCH_NOTIFY | - ACPI_GPE_LEVEL_TRIGGERED); - gpe_event_info->dispatch.device.node = device_node; - gpe_event_info->dispatch.device.next = NULL; - } else { - /* There are multiple devices to notify implicitly. */ - - notify_object = ACPI_ALLOCATE_ZEROED(sizeof(*notify_object)); - if (!notify_object) { - status = AE_NO_MEMORY; + device_node = ACPI_CAST_PTR(struct acpi_namespace_node, + wake_device); + if (device_node->type != ACPI_TYPE_DEVICE) { goto unlock_and_exit; } - - notify_object->node = device_node; - notify_object->next = gpe_event_info->dispatch.device.next; - gpe_event_info->dispatch.device.next = notify_object; + gpe_event_info->flags = (ACPI_GPE_DISPATCH_NOTIFY | + ACPI_GPE_LEVEL_TRIGGERED); + gpe_event_info->dispatch.device_node = device_node; } - out: gpe_event_info->flags |= ACPI_GPE_CAN_WAKE; status = AE_OK; diff --git a/trunk/drivers/acpi/debugfs.c b/trunk/drivers/acpi/debugfs.c index 384f7abcff77..5df67f1d6c61 100644 --- a/trunk/drivers/acpi/debugfs.c +++ b/trunk/drivers/acpi/debugfs.c @@ -26,9 +26,7 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, size_t count, loff_t *ppos) { static char *buf; - static u32 max_size; - static u32 uncopied_bytes; - + static int uncopied_bytes; struct acpi_table_header table; acpi_status status; @@ -39,24 +37,19 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, if (copy_from_user(&table, user_buf, sizeof(struct acpi_table_header))) return -EFAULT; - uncopied_bytes = max_size = table.length; - buf = kzalloc(max_size, GFP_KERNEL); + uncopied_bytes = table.length; + buf = kzalloc(uncopied_bytes, GFP_KERNEL); if (!buf) return -ENOMEM; } - if (buf == NULL) - return -EINVAL; - - if ((*ppos > max_size) || - (*ppos + count > max_size) || - (*ppos + count < count) || - (count > uncopied_bytes)) + if (uncopied_bytes < count) { + kfree(buf); return -EINVAL; + } if (copy_from_user(buf + (*ppos), user_buf, count)) { kfree(buf); - buf = NULL; return -EFAULT; } @@ -66,7 +59,6 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, if (!uncopied_bytes) { status = acpi_install_method(buf); kfree(buf); - buf = NULL; if (ACPI_FAILURE(status)) return -EINVAL; add_taint(TAINT_OVERRIDDEN_ACPI_TABLE); diff --git a/trunk/drivers/cpufreq/cpufreq.c b/trunk/drivers/cpufreq/cpufreq.c index 5cb4d09919d6..1109f6848a43 100644 --- a/trunk/drivers/cpufreq/cpufreq.c +++ b/trunk/drivers/cpufreq/cpufreq.c @@ -1919,10 +1919,8 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) ret = sysdev_driver_register(&cpu_sysdev_class, &cpufreq_sysdev_driver); - if (ret) - goto err_null_driver; - if (!(cpufreq_driver->flags & CPUFREQ_STICKY)) { + if ((!ret) && !(cpufreq_driver->flags & CPUFREQ_STICKY)) { int i; ret = -ENODEV; @@ -1937,22 +1935,21 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) if (ret) { dprintk("no CPU initialized for driver %s\n", driver_data->name); - goto err_sysdev_unreg; + sysdev_driver_unregister(&cpu_sysdev_class, + &cpufreq_sysdev_driver); + + spin_lock_irqsave(&cpufreq_driver_lock, flags); + cpufreq_driver = NULL; + spin_unlock_irqrestore(&cpufreq_driver_lock, flags); } } - register_hotcpu_notifier(&cpufreq_cpu_notifier); - dprintk("driver %s up and running\n", driver_data->name); - cpufreq_debug_enable_ratelimit(); + if (!ret) { + register_hotcpu_notifier(&cpufreq_cpu_notifier); + dprintk("driver %s up and running\n", driver_data->name); + cpufreq_debug_enable_ratelimit(); + } - return 0; -err_sysdev_unreg: - sysdev_driver_unregister(&cpu_sysdev_class, - &cpufreq_sysdev_driver); -err_null_driver: - spin_lock_irqsave(&cpufreq_driver_lock, flags); - cpufreq_driver = NULL; - spin_unlock_irqrestore(&cpufreq_driver_lock, flags); return ret; } EXPORT_SYMBOL_GPL(cpufreq_register_driver); diff --git a/trunk/drivers/gpu/drm/i915/i915_dma.c b/trunk/drivers/gpu/drm/i915/i915_dma.c index e33d9be7df3b..17bd766f2081 100644 --- a/trunk/drivers/gpu/drm/i915/i915_dma.c +++ b/trunk/drivers/gpu/drm/i915/i915_dma.c @@ -1895,17 +1895,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) if (IS_GEN2(dev)) dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(30)); - /* 965GM sometimes incorrectly writes to hardware status page (HWS) - * using 32bit addressing, overwriting memory if HWS is located - * above 4GB. - * - * The documentation also mentions an issue with undefined - * behaviour if any general state is accessed within a page above 4GB, - * which also needs to be handled carefully. - */ - if (IS_BROADWATER(dev) || IS_CRESTLINE(dev)) - dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(32)); - mmio_bar = IS_GEN2(dev) ? 1 : 0; dev_priv->regs = pci_iomap(dev->pdev, mmio_bar, 0); if (!dev_priv->regs) { diff --git a/trunk/drivers/idle/intel_idle.c b/trunk/drivers/idle/intel_idle.c index 4a5c4a44ffb1..1fa091e05690 100644 --- a/trunk/drivers/idle/intel_idle.c +++ b/trunk/drivers/idle/intel_idle.c @@ -62,7 +62,6 @@ #include #include #include -#include #define INTEL_IDLE_VERSION "0.4" #define PREFIX "intel_idle: " @@ -85,12 +84,6 @@ static int intel_idle(struct cpuidle_device *dev, struct cpuidle_state *state); static struct cpuidle_state *cpuidle_state_table; -/* - * Hardware C-state auto-demotion may not always be optimal. - * Indicate which enable bits to clear here. - */ -static unsigned long long auto_demotion_disable_flags; - /* * Set this flag for states where the HW flushes the TLB for us * and so we don't need cross-calls to keep it consistent. @@ -288,15 +281,6 @@ static struct notifier_block setup_broadcast_notifier = { .notifier_call = setup_broadcast_cpuhp_notify, }; -static void auto_demotion_disable(void *dummy) -{ - unsigned long long msr_bits; - - rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); - msr_bits &= ~auto_demotion_disable_flags; - wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); -} - /* * intel_idle_probe() */ @@ -340,17 +324,11 @@ static int intel_idle_probe(void) case 0x25: /* Westmere */ case 0x2C: /* Westmere */ cpuidle_state_table = nehalem_cstates; - auto_demotion_disable_flags = - (NHM_C1_AUTO_DEMOTE | NHM_C3_AUTO_DEMOTE); break; case 0x1C: /* 28 - Atom Processor */ - cpuidle_state_table = atom_cstates; - break; - case 0x26: /* 38 - Lincroft Atom Processor */ cpuidle_state_table = atom_cstates; - auto_demotion_disable_flags = ATM_LNC_C6_AUTO_DEMOTE; break; case 0x2A: /* SNB */ @@ -458,8 +436,6 @@ static int intel_idle_cpuidle_devices_init(void) return -EIO; } } - if (auto_demotion_disable_flags) - smp_call_function(auto_demotion_disable, NULL, 1); return 0; } diff --git a/trunk/drivers/mfd/asic3.c b/trunk/drivers/mfd/asic3.c index c45e6305b26f..6a1f94042612 100644 --- a/trunk/drivers/mfd/asic3.c +++ b/trunk/drivers/mfd/asic3.c @@ -143,9 +143,9 @@ static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc) unsigned long flags; struct asic3 *asic; - desc->irq_data.chip->irq_ack(&desc->irq_data); + desc->chip->ack(irq); - asic = get_irq_data(irq); + asic = desc->handler_data; for (iter = 0 ; iter < MAX_ASIC_ISR_LOOPS; iter++) { u32 status; diff --git a/trunk/drivers/mfd/davinci_voicecodec.c b/trunk/drivers/mfd/davinci_voicecodec.c index fdd8a1b8bc67..33c923d215c7 100644 --- a/trunk/drivers/mfd/davinci_voicecodec.c +++ b/trunk/drivers/mfd/davinci_voicecodec.c @@ -118,12 +118,12 @@ static int __init davinci_vc_probe(struct platform_device *pdev) /* Voice codec interface client */ cell = &davinci_vc->cells[DAVINCI_VC_VCIF_CELL]; - cell->name = "davinci-vcif"; + cell->name = "davinci_vcif"; cell->driver_data = davinci_vc; /* Voice codec CQ93VC client */ cell = &davinci_vc->cells[DAVINCI_VC_CQ93VC_CELL]; - cell->name = "cq93vc-codec"; + cell->name = "cq93vc"; cell->driver_data = davinci_vc; ret = mfd_add_devices(&pdev->dev, pdev->id, davinci_vc->cells, diff --git a/trunk/drivers/mfd/tps6586x.c b/trunk/drivers/mfd/tps6586x.c index e9018d1394ee..627cf577b16d 100644 --- a/trunk/drivers/mfd/tps6586x.c +++ b/trunk/drivers/mfd/tps6586x.c @@ -150,12 +150,12 @@ static inline int __tps6586x_write(struct i2c_client *client, static inline int __tps6586x_writes(struct i2c_client *client, int reg, int len, uint8_t *val) { - int ret, i; + int ret; - for (i = 0; i < len; i++) { - ret = __tps6586x_write(client, reg + i, *(val + i)); - if (ret < 0) - return ret; + ret = i2c_smbus_write_i2c_block_data(client, reg, len, val); + if (ret < 0) { + dev_err(&client->dev, "failed writings to 0x%02x\n", reg); + return ret; } return 0; diff --git a/trunk/drivers/mfd/ucb1x00-ts.c b/trunk/drivers/mfd/ucb1x00-ts.c index 92b85e28a15e..000cb414a78a 100644 --- a/trunk/drivers/mfd/ucb1x00-ts.c +++ b/trunk/drivers/mfd/ucb1x00-ts.c @@ -385,18 +385,12 @@ static int ucb1x00_ts_add(struct ucb1x00_dev *dev) idev->close = ucb1x00_ts_close; __set_bit(EV_ABS, idev->evbit); + __set_bit(ABS_X, idev->absbit); + __set_bit(ABS_Y, idev->absbit); + __set_bit(ABS_PRESSURE, idev->absbit); input_set_drvdata(idev, ts); - ucb1x00_adc_enable(ts->ucb); - ts->x_res = ucb1x00_ts_read_xres(ts); - ts->y_res = ucb1x00_ts_read_yres(ts); - ucb1x00_adc_disable(ts->ucb); - - input_set_abs_params(idev, ABS_X, 0, ts->x_res, 0, 0); - input_set_abs_params(idev, ABS_Y, 0, ts->y_res, 0, 0); - input_set_abs_params(idev, ABS_PRESSURE, 0, 0, 0, 0); - err = input_register_device(idev); if (err) goto fail; diff --git a/trunk/drivers/mfd/wm8994-core.c b/trunk/drivers/mfd/wm8994-core.c index f4016a075fd6..41233c7fa581 100644 --- a/trunk/drivers/mfd/wm8994-core.c +++ b/trunk/drivers/mfd/wm8994-core.c @@ -246,16 +246,6 @@ static int wm8994_suspend(struct device *dev) struct wm8994 *wm8994 = dev_get_drvdata(dev); int ret; - /* Don't actually go through with the suspend if the CODEC is - * still active (eg, for audio passthrough from CP. */ - ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_1); - if (ret < 0) { - dev_err(dev, "Failed to read power status: %d\n", ret); - } else if (ret & WM8994_VMID_SEL_MASK) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); - return 0; - } - /* GPIO configuration state is saved here since we may be configuring * the GPIO alternate functions even if we're not using the gpiolib * driver for them. @@ -271,8 +261,6 @@ static int wm8994_suspend(struct device *dev) if (ret < 0) dev_err(dev, "Failed to save LDO registers: %d\n", ret); - wm8994->suspended = true; - ret = regulator_bulk_disable(wm8994->num_supplies, wm8994->supplies); if (ret != 0) { @@ -288,10 +276,6 @@ static int wm8994_resume(struct device *dev) struct wm8994 *wm8994 = dev_get_drvdata(dev); int ret; - /* We may have lied to the PM core about suspending */ - if (!wm8994->suspended) - return 0; - ret = regulator_bulk_enable(wm8994->num_supplies, wm8994->supplies); if (ret != 0) { @@ -314,8 +298,6 @@ static int wm8994_resume(struct device *dev) if (ret < 0) dev_err(dev, "Failed to restore GPIO registers: %d\n", ret); - wm8994->suspended = false; - return 0; } #endif diff --git a/trunk/drivers/of/pdt.c b/trunk/drivers/of/pdt.c index 4d87b5dc9284..28295d0a50f6 100644 --- a/trunk/drivers/of/pdt.c +++ b/trunk/drivers/of/pdt.c @@ -36,55 +36,19 @@ unsigned int of_pdt_unique_id __initdata; (p)->unique_id = of_pdt_unique_id++; \ } while (0) -static char * __init of_pdt_build_full_name(struct device_node *dp) +static inline const char *of_pdt_node_name(struct device_node *dp) { - int len, ourlen, plen; - char *n; - - dp->path_component_name = build_path_component(dp); - - plen = strlen(dp->parent->full_name); - ourlen = strlen(dp->path_component_name); - len = ourlen + plen + 2; - - n = prom_early_alloc(len); - strcpy(n, dp->parent->full_name); - if (!of_node_is_root(dp->parent)) { - strcpy(n + plen, "/"); - plen++; - } - strcpy(n + plen, dp->path_component_name); - - return n; + return dp->path_component_name; } -#else /* CONFIG_SPARC */ +#else static inline void of_pdt_incr_unique_id(void *p) { } static inline void irq_trans_init(struct device_node *dp) { } -static char * __init of_pdt_build_full_name(struct device_node *dp) +static inline const char *of_pdt_node_name(struct device_node *dp) { - static int failsafe_id = 0; /* for generating unique names on failure */ - char *buf; - int len; - - if (of_pdt_prom_ops->pkg2path(dp->phandle, NULL, 0, &len)) - goto failsafe; - - buf = prom_early_alloc(len + 1); - if (of_pdt_prom_ops->pkg2path(dp->phandle, buf, len, &len)) - goto failsafe; - return buf; - - failsafe: - buf = prom_early_alloc(strlen(dp->parent->full_name) + - strlen(dp->name) + 16); - sprintf(buf, "%s/%s@unknown%i", - of_node_is_root(dp->parent) ? "" : dp->parent->full_name, - dp->name, failsafe_id++); - pr_err("%s: pkg2path failed; assigning %s\n", __func__, buf); - return buf; + return dp->name; } #endif /* !CONFIG_SPARC */ @@ -168,6 +132,47 @@ static char * __init of_pdt_get_one_property(phandle node, const char *name) return buf; } +static char * __init of_pdt_try_pkg2path(phandle node) +{ + char *res, *buf = NULL; + int len; + + if (!of_pdt_prom_ops->pkg2path) + return NULL; + + if (of_pdt_prom_ops->pkg2path(node, buf, 0, &len)) + return NULL; + buf = prom_early_alloc(len + 1); + if (of_pdt_prom_ops->pkg2path(node, buf, len, &len)) { + pr_err("%s: package-to-path failed\n", __func__); + return NULL; + } + + res = strrchr(buf, '/'); + if (!res) { + pr_err("%s: couldn't find / in %s\n", __func__, buf); + return NULL; + } + return res+1; +} + +/* + * When fetching the node's name, first try using package-to-path; if + * that fails (either because the arch hasn't supplied a PROM callback, + * or some other random failure), fall back to just looking at the node's + * 'name' property. + */ +static char * __init of_pdt_build_name(phandle node) +{ + char *buf; + + buf = of_pdt_try_pkg2path(node); + if (!buf) + buf = of_pdt_get_one_property(node, "name"); + + return buf; +} + static struct device_node * __init of_pdt_create_node(phandle node, struct device_node *parent) { @@ -182,7 +187,7 @@ static struct device_node * __init of_pdt_create_node(phandle node, kref_init(&dp->kref); - dp->name = of_pdt_get_one_property(node, "name"); + dp->name = of_pdt_build_name(node); dp->type = of_pdt_get_one_property(node, "device_type"); dp->phandle = node; @@ -193,6 +198,26 @@ static struct device_node * __init of_pdt_create_node(phandle node, return dp; } +static char * __init of_pdt_build_full_name(struct device_node *dp) +{ + int len, ourlen, plen; + char *n; + + plen = strlen(dp->parent->full_name); + ourlen = strlen(of_pdt_node_name(dp)); + len = ourlen + plen + 2; + + n = prom_early_alloc(len); + strcpy(n, dp->parent->full_name); + if (!of_node_is_root(dp->parent)) { + strcpy(n + plen, "/"); + plen++; + } + strcpy(n + plen, of_pdt_node_name(dp)); + + return n; +} + static struct device_node * __init of_pdt_build_tree(struct device_node *parent, phandle node, struct device_node ***nextp) @@ -215,6 +240,9 @@ static struct device_node * __init of_pdt_build_tree(struct device_node *parent, *(*nextp) = dp; *nextp = &dp->allnext; +#if defined(CONFIG_SPARC) + dp->path_component_name = build_path_component(dp); +#endif dp->full_name = of_pdt_build_full_name(dp); dp->child = of_pdt_build_tree(dp, diff --git a/trunk/drivers/usb/host/ehci-xilinx-of.c b/trunk/drivers/usb/host/ehci-xilinx-of.c index a6f21b891f68..e8f4f36fdf0b 100644 --- a/trunk/drivers/usb/host/ehci-xilinx-of.c +++ b/trunk/drivers/usb/host/ehci-xilinx-of.c @@ -29,7 +29,6 @@ #include #include -#include /** * ehci_xilinx_of_setup - Initialize the device for ehci_reset() diff --git a/trunk/fs/ext2/namei.c b/trunk/fs/ext2/namei.c index adb91855ccd0..2e1d8341d827 100644 --- a/trunk/fs/ext2/namei.c +++ b/trunk/fs/ext2/namei.c @@ -344,6 +344,7 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, new_de = ext2_find_entry (new_dir, &new_dentry->d_name, &new_page); if (!new_de) goto out_dir; + inode_inc_link_count(old_inode); ext2_set_link(new_dir, new_de, new_page, old_inode, 1); new_inode->i_ctime = CURRENT_TIME_SEC; if (dir_de) @@ -355,9 +356,12 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, if (new_dir->i_nlink >= EXT2_LINK_MAX) goto out_dir; } + inode_inc_link_count(old_inode); err = ext2_add_link(new_dentry, old_inode); - if (err) + if (err) { + inode_dec_link_count(old_inode); goto out_dir; + } if (dir_de) inode_inc_link_count(new_dir); } @@ -365,11 +369,12 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, /* * Like most other Unix systems, set the ctime for inodes on a * rename. + * inode_dec_link_count() will mark the inode dirty. */ old_inode->i_ctime = CURRENT_TIME_SEC; - mark_inode_dirty(old_inode); ext2_delete_entry (old_de, old_page); + inode_dec_link_count(old_inode); if (dir_de) { if (old_dir != new_dir) diff --git a/trunk/fs/nilfs2/segment.c b/trunk/fs/nilfs2/segment.c index 2de9f636792a..55ebae5c7f39 100644 --- a/trunk/fs/nilfs2/segment.c +++ b/trunk/fs/nilfs2/segment.c @@ -430,8 +430,7 @@ static void nilfs_segctor_begin_finfo(struct nilfs_sc_info *sci, nilfs_segctor_map_segsum_entry( sci, &sci->sc_binfo_ptr, sizeof(struct nilfs_finfo)); - if (NILFS_I(inode)->i_root && - !test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) + if (inode->i_sb && !test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) set_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags); /* skip finfo */ } diff --git a/trunk/fs/proc/proc_devtree.c b/trunk/fs/proc/proc_devtree.c index 927cbd115e53..d9396a4fc7ff 100644 --- a/trunk/fs/proc/proc_devtree.c +++ b/trunk/fs/proc/proc_devtree.c @@ -233,7 +233,7 @@ void __init proc_device_tree_init(void) return; root = of_find_node_by_path("/"); if (root == NULL) { - pr_debug("/proc/device-tree: can't find root\n"); + printk(KERN_ERR "/proc/device-tree: can't find root\n"); return; } proc_device_tree_add_node(root, proc_device_tree); diff --git a/trunk/fs/xfs/linux-2.6/xfs_ioctl.c b/trunk/fs/xfs/linux-2.6/xfs_ioctl.c index f5e2a19e0f8e..0ca0e3c024d7 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/trunk/fs/xfs/linux-2.6/xfs_ioctl.c @@ -695,14 +695,19 @@ xfs_ioc_fsgeometry_v1( xfs_mount_t *mp, void __user *arg) { - xfs_fsop_geom_v1_t fsgeo; + xfs_fsop_geom_t fsgeo; int error; - error = xfs_fs_geometry(mp, (xfs_fsop_geom_t *)&fsgeo, 3); + error = xfs_fs_geometry(mp, &fsgeo, 3); if (error) return -error; - if (copy_to_user(arg, &fsgeo, sizeof(fsgeo))) + /* + * Caller should have passed an argument of type + * xfs_fsop_geom_v1_t. This is a proper subset of the + * xfs_fsop_geom_t that xfs_fs_geometry() fills in. + */ + if (copy_to_user(arg, &fsgeo, sizeof(xfs_fsop_geom_v1_t))) return -XFS_ERROR(EFAULT); return 0; } diff --git a/trunk/include/linux/mfd/wm8994/core.h b/trunk/include/linux/mfd/wm8994/core.h index ef4f0b6083a3..3fd36845ca45 100644 --- a/trunk/include/linux/mfd/wm8994/core.h +++ b/trunk/include/linux/mfd/wm8994/core.h @@ -71,7 +71,6 @@ struct wm8994 { u16 irq_masks_cache[WM8994_NUM_IRQ_REGS]; /* Used over suspend/resume */ - bool suspended; u16 ldo_regs[WM8994_NUM_LDO_REGS]; u16 gpio_regs[WM8994_NUM_GPIO_REGS];