* [patch 01/19] genirq: Cleanup access to irq_data
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-09-27 12:44 ` [patch 02/19] genirq: Create irq_data Thomas Gleixner
` (17 subsequent siblings)
18 siblings, 0 replies; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-cleanup-access-to-irq-data.patch --]
[-- Type: text/plain, Size: 23266 bytes --]
Fixup the open coded access to
irq_desc->[handler_data|chip_data|msi-desc]
Use the macros and inline functions for it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/arm/plat-samsung/irq-uart.c | 5 -
arch/arm/plat-samsung/irq-vic-timer.c | 7 --
arch/avr32/mach-at32ap/extint.c | 2
arch/powerpc/include/asm/qe_ic.h | 10 +--
arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | 2
arch/powerpc/platforms/cell/interrupt.c | 4 +
arch/powerpc/platforms/cell/setup.c | 2
arch/powerpc/platforms/cell/spider-pic.c | 2
arch/powerpc/platforms/powermac/pic.c | 2
arch/powerpc/platforms/pseries/xics.c | 2
arch/powerpc/sysdev/mpic.c | 6 +-
arch/powerpc/sysdev/qe_lib/qe_ic.c | 2
arch/x86/kernel/apic/io_apic.c | 71 +++++++++++++--------------
arch/x86/kernel/uv_irq.c | 2
drivers/parisc/dino.c | 6 --
drivers/parisc/gsc.c | 12 +---
drivers/parisc/iosapic.c | 4 -
include/linux/irq.h | 5 +
18 files changed, 71 insertions(+), 75 deletions(-)
Index: linux-2.6-tip/arch/arm/plat-samsung/irq-uart.c
===================================================================
--- linux-2.6-tip.orig/arch/arm/plat-samsung/irq-uart.c
+++ linux-2.6-tip/arch/arm/plat-samsung/irq-uart.c
@@ -83,7 +83,7 @@ static void s3c_irq_uart_ack(unsigned in
static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc)
{
- struct s3c_uart_irq *uirq = desc->handler_data;
+ struct s3c_uart_irq *uirq = get_irq_desc_data(desc);
u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP);
int base = uirq->base_irq;
@@ -107,7 +107,6 @@ static struct irq_chip s3c_irq_uart = {
static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq)
{
- struct irq_desc *desc = irq_to_desc(uirq->parent_irq);
void __iomem *reg_base = uirq->regs;
unsigned int irq;
int offs;
@@ -124,7 +123,7 @@ static void __init s3c_init_uart_irq(str
set_irq_flags(irq, IRQF_VALID);
}
- desc->handler_data = uirq;
+ set_irq_data(uirq->parent_irq, uirq);
set_irq_chained_handler(uirq->parent_irq, s3c_irq_demux_uart);
}
Index: linux-2.6-tip/arch/arm/plat-samsung/irq-vic-timer.c
===================================================================
--- linux-2.6-tip.orig/arch/arm/plat-samsung/irq-vic-timer.c
+++ linux-2.6-tip/arch/arm/plat-samsung/irq-vic-timer.c
@@ -24,7 +24,7 @@
static void s3c_irq_demux_vic_timer(unsigned int irq, struct irq_desc *desc)
{
- generic_handle_irq((int)desc->handler_data);
+ generic_handle_irq((int)get_irq_desc_data(desc));
}
/* We assume the IRQ_TIMER0..IRQ_TIMER4 range is continuous. */
@@ -74,13 +74,10 @@ static struct irq_chip s3c_irq_timer = {
void __init s3c_init_vic_timer_irq(unsigned int parent_irq,
unsigned int timer_irq)
{
- struct irq_desc *desc = irq_to_desc(parent_irq);
-
set_irq_chained_handler(parent_irq, s3c_irq_demux_vic_timer);
set_irq_chip(timer_irq, &s3c_irq_timer);
set_irq_handler(timer_irq, handle_level_irq);
set_irq_flags(timer_irq, IRQF_VALID);
-
- desc->handler_data = (void *)timer_irq;
+ set_irq_data(timer_irq, (void *)timer_irq;
}
Index: linux-2.6-tip/arch/avr32/mach-at32ap/extint.c
===================================================================
--- linux-2.6-tip.orig/arch/avr32/mach-at32ap/extint.c
+++ linux-2.6-tip/arch/avr32/mach-at32ap/extint.c
@@ -154,7 +154,7 @@ static struct irq_chip eic_chip = {
static void demux_eic_irq(unsigned int irq, struct irq_desc *desc)
{
- struct eic *eic = desc->handler_data;
+ struct eic *eic = get_irq_desc_data(desc);
unsigned long status, pending;
unsigned int i;
Index: linux-2.6-tip/arch/powerpc/include/asm/qe_ic.h
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/include/asm/qe_ic.h
+++ linux-2.6-tip/arch/powerpc/include/asm/qe_ic.h
@@ -81,7 +81,7 @@ int qe_ic_set_high_priority(unsigned int
static inline void qe_ic_cascade_low_ipic(unsigned int irq,
struct irq_desc *desc)
{
- struct qe_ic *qe_ic = desc->handler_data;
+ struct qe_ic *qe_ic = get_irq_desc_data(desc);
unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
if (cascade_irq != NO_IRQ)
@@ -91,7 +91,7 @@ static inline void qe_ic_cascade_low_ipi
static inline void qe_ic_cascade_high_ipic(unsigned int irq,
struct irq_desc *desc)
{
- struct qe_ic *qe_ic = desc->handler_data;
+ struct qe_ic *qe_ic = get_irq_desc_data(desc);
unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
if (cascade_irq != NO_IRQ)
@@ -101,7 +101,7 @@ static inline void qe_ic_cascade_high_ip
static inline void qe_ic_cascade_low_mpic(unsigned int irq,
struct irq_desc *desc)
{
- struct qe_ic *qe_ic = desc->handler_data;
+ struct qe_ic *qe_ic = get_irq_desc_data(desc);
unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
if (cascade_irq != NO_IRQ)
@@ -113,7 +113,7 @@ static inline void qe_ic_cascade_low_mpi
static inline void qe_ic_cascade_high_mpic(unsigned int irq,
struct irq_desc *desc)
{
- struct qe_ic *qe_ic = desc->handler_data;
+ struct qe_ic *qe_ic = get_irq_desc_data(desc);
unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
if (cascade_irq != NO_IRQ)
@@ -125,7 +125,7 @@ static inline void qe_ic_cascade_high_mp
static inline void qe_ic_cascade_muxed_mpic(unsigned int irq,
struct irq_desc *desc)
{
- struct qe_ic *qe_ic = desc->handler_data;
+ struct qe_ic *qe_ic = get_irq_desc_data(desc);
unsigned int cascade_irq;
cascade_irq = qe_ic_get_high_irq(qe_ic);
Index: linux-2.6-tip/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
+++ linux-2.6-tip/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
@@ -82,7 +82,7 @@ static struct irq_chip pq2ads_pci_ic = {
static void pq2ads_pci_irq_demux(unsigned int irq, struct irq_desc *desc)
{
- struct pq2ads_pci_pic *priv = desc->handler_data;
+ struct pq2ads_pci_pic *priv = get_irq_desc_data(desc);
u32 stat, mask, pend;
int bit;
Index: linux-2.6-tip/arch/powerpc/platforms/cell/interrupt.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/cell/interrupt.c
+++ linux-2.6-tip/arch/powerpc/platforms/cell/interrupt.c
@@ -101,11 +101,13 @@ static void iic_ioexc_eoi(unsigned int i
static void iic_ioexc_cascade(unsigned int irq, struct irq_desc *desc)
{
- struct cbe_iic_regs __iomem *node_iic = (void __iomem *)desc->handler_data;
+ struct cbe_iic_regs __iomem *node_iic;
unsigned int base = (irq & 0xffffff00) | IIC_IRQ_TYPE_IOEXC;
unsigned long bits, ack;
int cascade;
+ node_iic = (void __iomem *)get_irq_desc_data(desc);
+
for (;;) {
bits = in_be64(&node_iic->iic_is);
if (bits == 0)
Index: linux-2.6-tip/arch/powerpc/platforms/cell/setup.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/cell/setup.c
+++ linux-2.6-tip/arch/powerpc/platforms/cell/setup.c
@@ -187,7 +187,7 @@ machine_subsys_initcall(cell, cell_publi
static void cell_mpic_cascade(unsigned int irq, struct irq_desc *desc)
{
- struct mpic *mpic = desc->handler_data;
+ struct mpic *mpic = get_irq_desc_data(desc);
unsigned int virq;
virq = mpic_get_one_irq(mpic);
Index: linux-2.6-tip/arch/powerpc/platforms/cell/spider-pic.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/cell/spider-pic.c
+++ linux-2.6-tip/arch/powerpc/platforms/cell/spider-pic.c
@@ -207,7 +207,7 @@ static struct irq_host_ops spider_host_o
static void spider_irq_cascade(unsigned int irq, struct irq_desc *desc)
{
- struct spider_pic *pic = desc->handler_data;
+ struct spider_pic *pic = get_irq_desc_data(desc);
unsigned int cs, virq;
cs = in_be32(pic->regs + TIR_CS) >> 24;
Index: linux-2.6-tip/arch/powerpc/platforms/powermac/pic.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/powermac/pic.c
+++ linux-2.6-tip/arch/powerpc/platforms/powermac/pic.c
@@ -472,7 +472,7 @@ int of_irq_map_oldworld(struct device_no
static void pmac_u3_cascade(unsigned int irq, struct irq_desc *desc)
{
- struct mpic *mpic = desc->handler_data;
+ struct mpic *mpic = get_irq_desc_data(desc);
unsigned int cascade_irq = mpic_get_one_irq(mpic);
if (cascade_irq != NO_IRQ)
Index: linux-2.6-tip/arch/powerpc/platforms/pseries/xics.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/platforms/pseries/xics.c
+++ linux-2.6-tip/arch/powerpc/platforms/pseries/xics.c
@@ -242,7 +242,7 @@ static unsigned int xics_startup(unsigne
* card, using the MSI mask bits. Firmware doesn't appear to unmask
* at that level, so we do it here by hand.
*/
- if (irq_to_desc(virq)->msi_desc)
+ if (get_irq_msi(virq))
unmask_msi_irq(virq);
/* unmask it */
Index: linux-2.6-tip/arch/powerpc/sysdev/mpic.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/sysdev/mpic.c
+++ linux-2.6-tip/arch/powerpc/sysdev/mpic.c
@@ -611,7 +611,7 @@ static struct mpic *mpic_find(unsigned i
if (irq < NUM_ISA_INTERRUPTS)
return NULL;
- return irq_to_desc(irq)->chip_data;
+ return get_irq_chip_data(irq);
}
/* Determine if the linux irq is an IPI */
@@ -638,14 +638,14 @@ static inline u32 mpic_physmask(u32 cpum
/* Get the mpic structure from the IPI number */
static inline struct mpic * mpic_from_ipi(unsigned int ipi)
{
- return irq_to_desc(ipi)->chip_data;
+ return get_irq_chip_data(ipi);
}
#endif
/* Get the mpic structure from the irq number */
static inline struct mpic * mpic_from_irq(unsigned int irq)
{
- return irq_to_desc(irq)->chip_data;
+ return get_irq_chip_data(irq);
}
/* Send an EOI */
Index: linux-2.6-tip/arch/powerpc/sysdev/qe_lib/qe_ic.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/sysdev/qe_lib/qe_ic.c
+++ linux-2.6-tip/arch/powerpc/sysdev/qe_lib/qe_ic.c
@@ -189,7 +189,7 @@ static inline void qe_ic_write(volatile
static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
{
- return irq_to_desc(virq)->chip_data;
+ return get_irq_chip_data(virq);
}
#define virq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq)
Index: linux-2.6-tip/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6-tip.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6-tip/arch/x86/kernel/apic/io_apic.c
@@ -166,7 +166,7 @@ int __init arch_early_irq_init(void)
for (i = 0; i < count; i++) {
desc = irq_to_desc(i);
- desc->chip_data = &cfg[i];
+ set_irq_desc_chip_data(desc, &cfg[i]);
zalloc_cpumask_var_node(&cfg[i].domain, GFP_NOWAIT, node);
zalloc_cpumask_var_node(&cfg[i].old_domain, GFP_NOWAIT, node);
/*
@@ -190,7 +190,7 @@ struct irq_cfg *irq_cfg(unsigned int irq
desc = irq_to_desc(irq);
if (desc)
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
return cfg;
}
@@ -219,10 +219,11 @@ int arch_init_chip_data(struct irq_desc
{
struct irq_cfg *cfg;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (!cfg) {
- desc->chip_data = get_one_free_irq_cfg(node);
- if (!desc->chip_data) {
+ cfg = get_one_free_irq_cfg(node);
+ set_irq_desc_chip_data(desc, cfg);
+ if (!cfg) {
printk(KERN_ERR "can not alloc irq_cfg\n");
BUG_ON(1);
}
@@ -302,9 +303,9 @@ void arch_init_copy_chip_data(struct irq
if (!cfg)
return;
- desc->chip_data = cfg;
+ set_irq_desc_chip_data(desc, cfg);
- old_cfg = old_desc->chip_data;
+ old_cfg = get_irq_desc_chip_data(old_desc);
memcpy(cfg, old_cfg, sizeof(struct irq_cfg));
@@ -320,8 +321,8 @@ void arch_free_chip_data(struct irq_desc
{
struct irq_cfg *old_cfg, *cfg;
- old_cfg = old_desc->chip_data;
- cfg = desc->chip_data;
+ old_cfg = get_irq_desc_chip_data(old_desc);
+ cfg = get_irq_desc_chip_data(desc);
if (old_cfg == cfg)
return;
@@ -329,7 +330,7 @@ void arch_free_chip_data(struct irq_desc
if (old_cfg) {
free_irq_2_pin(old_cfg, cfg);
free_irq_cfg(old_cfg);
- old_desc->chip_data = NULL;
+ set_irq_desc_chip_data(old_desc, NULL);
}
}
/* end for move_irq_desc */
@@ -589,7 +590,7 @@ static void __mask_IO_APIC_irq(struct ir
static void mask_IO_APIC_irq_desc(struct irq_desc *desc)
{
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
unsigned long flags;
BUG_ON(!cfg);
@@ -601,7 +602,7 @@ static void mask_IO_APIC_irq_desc(struct
static void unmask_IO_APIC_irq_desc(struct irq_desc *desc)
{
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
unsigned long flags;
raw_spin_lock_irqsave(&ioapic_lock, flags);
@@ -1264,7 +1265,7 @@ void __setup_vector_irq(int cpu)
raw_spin_lock(&vector_lock);
/* Mark the inuse vectors */
for_each_irq_desc(irq, desc) {
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
/*
* If it is a legacy IRQ handled by the legacy PIC, this cpu
@@ -1436,7 +1437,7 @@ static void setup_IO_APIC_irq(int apic_i
if (!IO_APIC_IRQ(irq))
return;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
/*
* For legacy irqs, cfg->domain starts with cpu 0 for legacy
@@ -1525,7 +1526,7 @@ static void __init setup_IO_APIC_irqs(vo
printk(KERN_INFO "can not get irq_desc for %d\n", irq);
continue;
}
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
add_pin_to_irq_node(cfg, node, apic_id, pin);
/*
* don't mark it in pin_programmed, so later acpi could
@@ -1576,7 +1577,7 @@ void setup_IO_APIC_irq_extra(u32 gsi)
return;
}
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
add_pin_to_irq_node(cfg, node, apic_id, pin);
if (test_bit(pin, mp_ioapic_routing[apic_id].pin_programmed)) {
@@ -1727,7 +1728,7 @@ __apicdebuginit(void) print_IO_APIC(void
for_each_irq_desc(irq, desc) {
struct irq_pin_list *entry;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (!cfg)
continue;
entry = cfg->irq_2_pin;
@@ -2332,7 +2333,7 @@ set_desc_affinity(struct irq_desc *desc,
return -1;
irq = desc->irq;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (assign_irq_vector(irq, cfg, mask))
return -1;
@@ -2352,7 +2353,7 @@ set_ioapic_affinity_irq_desc(struct irq_
int ret = -1;
irq = desc->irq;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
raw_spin_lock_irqsave(&ioapic_lock, flags);
ret = set_desc_affinity(desc, mask, &dest);
@@ -2405,7 +2406,7 @@ migrate_ioapic_irq_desc(struct irq_desc
if (get_irte(irq, &irte))
return ret;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (assign_irq_vector(irq, cfg, mask))
return ret;
@@ -2509,7 +2510,7 @@ unlock:
static void __irq_complete_move(struct irq_desc **descp, unsigned vector)
{
struct irq_desc *desc = *descp;
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
unsigned me;
if (likely(!cfg->move_in_progress))
@@ -2529,7 +2530,7 @@ static void irq_complete_move(struct irq
void irq_force_complete_move(int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
if (!cfg)
return;
@@ -2597,7 +2598,7 @@ static void eoi_ioapic_irq(struct irq_de
unsigned int irq;
irq = desc->irq;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
raw_spin_lock_irqsave(&ioapic_lock, flags);
__eoi_ioapic_irq(irq, cfg);
@@ -2653,7 +2654,7 @@ static void ack_apic_level(unsigned int
* we use the above logic (mask+edge followed by unmask+level) from
* Manfred Spraul to clear the remote IRR.
*/
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
i = cfg->vector;
v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1));
@@ -2704,7 +2705,7 @@ static void ack_apic_level(unsigned int
* accurate and is causing problems then it is a hardware bug
* and you can go talk to the chipset vendor about it.
*/
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (!io_apic_level_ack_pending(cfg))
move_masked_irq(irq);
unmask_IO_APIC_irq_desc(desc);
@@ -2772,7 +2773,7 @@ static inline void init_IO_APIC_traps(vo
* 0x80, because int 0x80 is hm, kind of importantish. ;)
*/
for_each_irq_desc(irq, desc) {
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (IO_APIC_IRQ(irq) && cfg && !cfg->vector) {
/*
* Hmm.. We don't have an entry for this,
@@ -2926,7 +2927,7 @@ int timer_through_8259 __initdata;
static inline void __init check_timer(void)
{
struct irq_desc *desc = irq_to_desc(0);
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
int node = cpu_to_node(boot_cpu_id);
int apic1, pin1, apic2, pin2;
unsigned long flags;
@@ -3259,13 +3260,13 @@ unsigned int create_irq_nr(unsigned int
printk(KERN_INFO "can not get irq_desc for %d\n", new);
continue;
}
- cfg_new = desc_new->chip_data;
+ cfg_new = get_irq_desc_chip_data(desc_new);
if (cfg_new->vector != 0)
continue;
desc_new = move_irq_desc(desc_new, node);
- cfg_new = desc_new->chip_data;
+ cfg_new = get_irq_desc_chip_data(desc_new);
if (__assign_irq_vector(new, cfg_new, apic->target_cpus()) == 0)
irq = new;
@@ -3397,7 +3398,7 @@ static int set_msi_irq_affinity(unsigned
if (set_desc_affinity(desc, mask, &dest))
return -1;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
get_cached_msi_msg_desc(desc, &msg);
@@ -3419,7 +3420,7 @@ static int
ir_set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask)
{
struct irq_desc *desc = irq_to_desc(irq);
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
unsigned int dest;
struct irte irte;
@@ -3611,7 +3612,7 @@ static int dmar_msi_set_affinity(unsigne
if (set_desc_affinity(desc, mask, &dest))
return -1;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
dmar_msi_read(irq, &msg);
@@ -3666,7 +3667,7 @@ static int hpet_msi_set_affinity(unsigne
if (set_desc_affinity(desc, mask, &dest))
return -1;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
hpet_msi_read(irq, &msg);
@@ -3772,7 +3773,7 @@ static int set_ht_irq_affinity(unsigned
if (set_desc_affinity(desc, mask, &dest))
return -1;
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
target_ht_irq(irq, dest, cfg->vector);
@@ -3919,7 +3920,7 @@ static int __io_apic_set_pci_routing(str
* IRQs < 16 are already in the irq_2_pin[] map
*/
if (irq >= legacy_pic->nr_legacy_irqs) {
- cfg = desc->chip_data;
+ cfg = get_irq_desc_chip_data(desc);
if (add_pin_to_irq_node_nopanic(cfg, node, ioapic, pin)) {
printk(KERN_INFO "can not add pin %d for irq %d\n",
pin, irq);
Index: linux-2.6-tip/arch/x86/kernel/uv_irq.c
===================================================================
--- linux-2.6-tip.orig/arch/x86/kernel/uv_irq.c
+++ linux-2.6-tip/arch/x86/kernel/uv_irq.c
@@ -209,7 +209,7 @@ static void arch_disable_uv_irq(int mmr_
static int uv_set_irq_affinity(unsigned int irq, const struct cpumask *mask)
{
struct irq_desc *desc = irq_to_desc(irq);
- struct irq_cfg *cfg = desc->chip_data;
+ struct irq_cfg *cfg = get_irq_desc_chip_data(desc);
unsigned int dest;
unsigned long mmr_value;
struct uv_IO_APIC_route_entry *entry;
Index: linux-2.6-tip/drivers/parisc/dino.c
===================================================================
--- linux-2.6-tip.orig/drivers/parisc/dino.c
+++ linux-2.6-tip/drivers/parisc/dino.c
@@ -298,8 +298,7 @@ static struct pci_port_ops dino_port_ops
static void dino_disable_irq(unsigned int irq)
{
- struct irq_desc *desc = irq_to_desc(irq);
- struct dino_device *dino_dev = desc->chip_data;
+ struct dino_device *dino_dev = get_irq_chip_data(irq);
int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS);
DBG(KERN_WARNING "%s(0x%p, %d)\n", __func__, dino_dev, irq);
@@ -311,8 +310,7 @@ static void dino_disable_irq(unsigned in
static void dino_enable_irq(unsigned int irq)
{
- struct irq_desc *desc = irq_to_desc(irq);
- struct dino_device *dino_dev = desc->chip_data;
+ struct dino_device *dino_dev = get_irq_chip_data(irq);
int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, DINO_LOCAL_IRQS);
u32 tmp;
Index: linux-2.6-tip/drivers/parisc/gsc.c
===================================================================
--- linux-2.6-tip.orig/drivers/parisc/gsc.c
+++ linux-2.6-tip/drivers/parisc/gsc.c
@@ -107,8 +107,7 @@ int gsc_find_local_irq(unsigned int irq,
static void gsc_asic_disable_irq(unsigned int irq)
{
- struct irq_desc *desc = irq_to_desc(irq);
- struct gsc_asic *irq_dev = desc->chip_data;
+ struct gsc_asic *irq_dev = get_irq_chip_data(irq);
int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32);
u32 imr;
@@ -123,8 +122,7 @@ static void gsc_asic_disable_irq(unsigne
static void gsc_asic_enable_irq(unsigned int irq)
{
- struct irq_desc *desc = irq_to_desc(irq);
- struct gsc_asic *irq_dev = desc->chip_data;
+ struct gsc_asic *irq_dev = get_irq_chip_data(irq);
int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32);
u32 imr;
@@ -160,14 +158,12 @@ static struct irq_chip gsc_asic_interrup
int gsc_assign_irq(struct irq_chip *type, void *data)
{
static int irq = GSC_IRQ_BASE;
- struct irq_desc *desc;
if (irq > GSC_IRQ_MAX)
return NO_IRQ;
- desc = irq_to_desc(irq);
- desc->chip = type;
- desc->chip_data = data;
+ set_irq_chip(irq, type);
+ set_irq_chip_data(irq, data);
return irq++;
}
Index: linux-2.6-tip/drivers/parisc/iosapic.c
===================================================================
--- linux-2.6-tip.orig/drivers/parisc/iosapic.c
+++ linux-2.6-tip/drivers/parisc/iosapic.c
@@ -617,9 +617,7 @@ iosapic_set_irt_data( struct vector_info
static struct vector_info *iosapic_get_vector(unsigned int irq)
{
- struct irq_desc *desc = irq_to_desc(irq);
-
- return desc->chip_data;
+ return get_irq_chip_data(irq);
}
static void iosapic_disable_irq(unsigned int irq)
Index: linux-2.6-tip/include/linux/irq.h
===================================================================
--- linux-2.6-tip.orig/include/linux/irq.h
+++ linux-2.6-tip/include/linux/irq.h
@@ -406,6 +406,11 @@ extern int set_irq_chip_data(unsigned in
extern int set_irq_type(unsigned int irq, unsigned int type);
extern int set_irq_msi(unsigned int irq, struct msi_desc *entry);
+static inline void set_irq_desc_chip_data(struct irq_desc *desc, void *data)
+{
+ desc->chip_data = data;
+}
+
#define get_irq_chip(irq) (irq_to_desc(irq)->chip)
#define get_irq_chip_data(irq) (irq_to_desc(irq)->chip_data)
#define get_irq_data(irq) (irq_to_desc(irq)->handler_data)
^ permalink raw reply [flat|nested] 40+ messages in thread* [patch 02/19] genirq: Create irq_data
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
2010-09-27 12:44 ` [patch 01/19] genirq: Cleanup access to irq_data Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:29 ` [tip:irq/core] " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 03/19] genirq: Provide advanced irq chip functions Thomas Gleixner
` (16 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-create-irq-data.patch --]
[-- Type: text/plain, Size: 7539 bytes --]
Low level chip functions need access to irq_desc->handler_data,
irq_desc->chip_data and irq_desc->msi_desc. We hand down the irq
number to the low level functions, so they need to lookup irq_desc.
With sparse irq this means a radix tree lookup.
We could hand down irq_desc itself, but low level chip functions have
no need to fiddle with it directly and we want to restrict access to
irq_desc further.
Preparatory patch for new chip functions.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
include/linux/irq.h | 48 ++++++++++++++++++++++++++++++++----------------
kernel/irq/chip.c | 22 +++++++++++++---------
kernel/irq/handle.c | 11 +++++++++++
3 files changed, 56 insertions(+), 25 deletions(-)
Index: linux-2.6-tip/include/linux/irq.h
===================================================================
--- linux-2.6-tip.orig/include/linux/irq.h
+++ linux-2.6-tip/include/linux/irq.h
@@ -84,6 +84,27 @@ struct proc_dir_entry;
struct msi_desc;
/**
+ * struct irq_data - per irq and irq chip data passed down to chip functions
+ * @irq: interrupt number
+ * @chip: low level interrupt hardware access
+ * @handler_data: per-IRQ data for the irq_chip methods
+ * @chip_data: platform-specific per-chip private data for the chip
+ * methods, to allow shared chip implementations
+ * @msi_desc: MSI descriptor
+ * @affinity: pointer to irq affinity mask
+ */
+struct irq_data {
+ unsigned int irq;
+ struct irq_chip *chip;
+ void *handler_data;
+ void *chip_data;
+ struct msi_desc *msi_desc;
+#ifdef CONFIG_SMP
+ cpumask_var_t *affinity;
+#endif
+};
+
+/**
* struct irq_chip - hardware interrupt chip descriptor
*
* @name: name for /proc/interrupts
@@ -146,10 +167,7 @@ struct irq_2_iommu;
* @irq_2_iommu: iommu with this irq
* @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()]
* @chip: low level interrupt hardware access
- * @msi_desc: MSI descriptor
- * @handler_data: per-IRQ data for the irq_chip methods
- * @chip_data: platform-specific per-chip private data for the chip
- * methods, to allow shared chip implementations
+ * @irq_data: per irq and chip data passed down to chip functions
* @action: the irq action chain
* @status: status information
* @depth: disable-depth, for nested irq_disable() calls
@@ -175,9 +193,7 @@ struct irq_desc {
#endif
irq_flow_handler_t handle_irq;
struct irq_chip *chip;
- struct msi_desc *msi_desc;
- void *handler_data;
- void *chip_data;
+ struct irq_data irq_data;
struct irqaction *action; /* IRQ action list */
unsigned int status; /* IRQ status */
@@ -408,18 +424,18 @@ extern int set_irq_msi(unsigned int irq,
static inline void set_irq_desc_chip_data(struct irq_desc *desc, void *data)
{
- desc->chip_data = data;
+ desc->irq_data.chip_data = data;
}
#define get_irq_chip(irq) (irq_to_desc(irq)->chip)
-#define get_irq_chip_data(irq) (irq_to_desc(irq)->chip_data)
-#define get_irq_data(irq) (irq_to_desc(irq)->handler_data)
-#define get_irq_msi(irq) (irq_to_desc(irq)->msi_desc)
-
-#define get_irq_desc_chip(desc) ((desc)->chip)
-#define get_irq_desc_chip_data(desc) ((desc)->chip_data)
-#define get_irq_desc_data(desc) ((desc)->handler_data)
-#define get_irq_desc_msi(desc) ((desc)->msi_desc)
+#define get_irq_chip_data(irq) (irq_to_desc(irq)->irq_data.chip_data)
+#define get_irq_data(irq) (irq_to_desc(irq)->irq_data.handler_data)
+#define get_irq_msi(irq) (irq_to_desc(irq)->irq_data.msi_desc)
+
+#define get_irq_desc_chip(desc) ((desc)->irq_data.chip)
+#define get_irq_desc_chip_data(desc) ((desc)->irq_data.chip_data)
+#define get_irq_desc_data(desc) ((desc)->irq_data.handler_data)
+#define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc)
#endif /* CONFIG_GENERIC_HARDIRQS */
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -33,12 +33,13 @@ static void dynamic_irq_init_x(unsigned
raw_spin_lock_irqsave(&desc->lock, flags);
desc->status = IRQ_DISABLED;
desc->chip = &no_irq_chip;
+ desc->irq_data.chip = &no_irq_chip;
desc->handle_irq = handle_bad_irq;
desc->depth = 1;
- desc->msi_desc = NULL;
- desc->handler_data = NULL;
+ desc->irq_data.msi_desc = NULL;
+ desc->irq_data.handler_data = NULL;
if (!keep_chip_data)
- desc->chip_data = NULL;
+ desc->irq_data.chip_data = NULL;
desc->action = NULL;
desc->irq_count = 0;
desc->irqs_unhandled = 0;
@@ -88,12 +89,13 @@ static void dynamic_irq_cleanup_x(unsign
irq);
return;
}
- desc->msi_desc = NULL;
- desc->handler_data = NULL;
+ desc->irq_data.msi_desc = NULL;
+ desc->irq_data.handler_data = NULL;
if (!keep_chip_data)
- desc->chip_data = NULL;
+ desc->irq_data.chip_data = NULL;
desc->handle_irq = handle_bad_irq;
desc->chip = &no_irq_chip;
+ desc->irq_data.chip = &no_irq_chip;
desc->name = NULL;
clear_kstat_irqs(desc);
raw_spin_unlock_irqrestore(&desc->lock, flags);
@@ -141,6 +143,7 @@ int set_irq_chip(unsigned int irq, struc
raw_spin_lock_irqsave(&desc->lock, flags);
irq_chip_set_defaults(chip);
desc->chip = chip;
+ desc->irq_data.chip = chip;
raw_spin_unlock_irqrestore(&desc->lock, flags);
return 0;
@@ -193,7 +196,7 @@ int set_irq_data(unsigned int irq, void
}
raw_spin_lock_irqsave(&desc->lock, flags);
- desc->handler_data = data;
+ desc->irq_data.handler_data = data;
raw_spin_unlock_irqrestore(&desc->lock, flags);
return 0;
}
@@ -218,7 +221,7 @@ int set_irq_msi(unsigned int irq, struct
}
raw_spin_lock_irqsave(&desc->lock, flags);
- desc->msi_desc = entry;
+ desc->irq_data.msi_desc = entry;
if (entry)
entry->irq = irq;
raw_spin_unlock_irqrestore(&desc->lock, flags);
@@ -249,7 +252,7 @@ int set_irq_chip_data(unsigned int irq,
}
raw_spin_lock_irqsave(&desc->lock, flags);
- desc->chip_data = data;
+ desc->irq_data.chip_data = data;
raw_spin_unlock_irqrestore(&desc->lock, flags);
return 0;
@@ -685,6 +688,7 @@ __set_irq_handler(unsigned int irq, irq_
* dummy_irq_chip for easy transition.
*/
desc->chip = &dummy_irq_chip;
+ desc->irq_data.chip = &dummy_irq_chip;
}
chip_bus_lock(irq, desc);
Index: linux-2.6-tip/kernel/irq/handle.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/handle.c
+++ linux-2.6-tip/kernel/irq/handle.c
@@ -106,8 +106,11 @@ static void init_one_irq_desc(int irq, s
raw_spin_lock_init(&desc->lock);
desc->irq = irq;
+ desc->irq_data.irq = irq;
+ desc->irq_data.chip = desc->chip;
#ifdef CONFIG_SMP
desc->node = node;
+ desc->irq_data.affinity = &desc->affinity;
#endif
lockdep_set_class(&desc->lock, &irq_desc_lock_class);
init_kstat_irqs(desc, node, nr_cpu_ids);
@@ -185,8 +188,11 @@ int __init early_irq_init(void)
for (i = 0; i < legacy_count; i++) {
desc[i].irq = i;
+ desc[i].irq_data.irq = i;
+ desc[i].irq_data.chip = desc[i].chip;
#ifdef CONFIG_SMP
desc[i].node = node;
+ desc[i].irq_data.affinity = &desc[i].affinity;
#endif
desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids;
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
@@ -265,6 +271,11 @@ int __init early_irq_init(void)
for (i = 0; i < count; i++) {
desc[i].irq = i;
+ desc[i].irq_data.irq = i;
+ desc[i].irq_data.chip = desc[i].chip;
+#ifdef CONFIG_SMP
+ desc[i].irq_data.affinity = &desc[i].affinity;
+#endif
alloc_desc_masks(&desc[i], 0, true);
init_desc_masks(&desc[i]);
desc[i].kstat_irqs = kstat_irqs_all[i];
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Create irq_data
2010-09-27 12:44 ` [patch 02/19] genirq: Create irq_data Thomas Gleixner
@ 2010-10-04 20:29 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:29 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: ff7dcd44dd446db2c3e13bdedf2d52b8e0127f16
Gitweb: http://git.kernel.org/tip/ff7dcd44dd446db2c3e13bdedf2d52b8e0127f16
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:25 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:27:16 +0200
genirq: Create irq_data
Low level chip functions need access to irq_desc->handler_data,
irq_desc->chip_data and irq_desc->msi_desc. We hand down the irq
number to the low level functions, so they need to lookup irq_desc.
With sparse irq this means a radix tree lookup.
We could hand down irq_desc itself, but low level chip functions have
no need to fiddle with it directly and we want to restrict access to
irq_desc further.
Preparatory patch for new chip functions.
Note, that the ugly anon union/struct is there to avoid a full tree
wide clean up for now. This is not going to last 3 years like __do_IRQ()
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121841.645542300@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
include/linux/irq.h | 90 +++++++++++++++++++++++++++++++++++---------------
kernel/irq/handle.c | 39 +++++++++++-----------
2 files changed, 82 insertions(+), 47 deletions(-)
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 06273a2..363c76f 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -84,6 +84,37 @@ struct proc_dir_entry;
struct msi_desc;
/**
+ * struct irq_data - per irq and irq chip data passed down to chip functions
+ * @irq: interrupt number
+ * @node: node index useful for balancing
+ * @chip: low level interrupt hardware access
+ * @handler_data: per-IRQ data for the irq_chip methods
+ * @chip_data: platform-specific per-chip private data for the chip
+ * methods, to allow shared chip implementations
+ * @msi_desc: MSI descriptor
+ * @affinity: IRQ affinity on SMP
+ * @irq_2_iommu: iommu with this irq
+ *
+ * The fields here need to overlay the ones in irq_desc until we
+ * cleaned up the direct references and switched everything over to
+ * irq_data.
+ */
+struct irq_data {
+ unsigned int irq;
+ unsigned int node;
+ struct irq_chip *chip;
+ void *handler_data;
+ void *chip_data;
+ struct msi_desc *msi_desc;
+#ifdef CONFIG_SMP
+ cpumask_var_t affinity;
+#endif
+#ifdef CONFIG_INTR_REMAP
+ struct irq_2_iommu *irq_2_iommu;
+#endif
+};
+
+/**
* struct irq_chip - hardware interrupt chip descriptor
*
* @name: name for /proc/interrupts
@@ -140,16 +171,10 @@ struct timer_rand_state;
struct irq_2_iommu;
/**
* struct irq_desc - interrupt descriptor
- * @irq: interrupt number for this descriptor
+ * @irq_data: per irq and chip data passed down to chip functions
* @timer_rand_state: pointer to timer rand state struct
* @kstat_irqs: irq stats per cpu
- * @irq_2_iommu: iommu with this irq
* @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()]
- * @chip: low level interrupt hardware access
- * @msi_desc: MSI descriptor
- * @handler_data: per-IRQ data for the irq_chip methods
- * @chip_data: platform-specific per-chip private data for the chip
- * methods, to allow shared chip implementations
* @action: the irq action chain
* @status: status information
* @depth: disable-depth, for nested irq_disable() calls
@@ -158,8 +183,6 @@ struct irq_2_iommu;
* @last_unhandled: aging timer for unhandled count
* @irqs_unhandled: stats field for spurious unhandled interrupts
* @lock: locking for SMP
- * @affinity: IRQ affinity on SMP
- * @node: node index useful for balancing
* @pending_mask: pending rebalanced interrupts
* @threads_active: number of irqaction threads currently running
* @wait_for_threads: wait queue for sync_irq to wait for threaded handlers
@@ -167,17 +190,32 @@ struct irq_2_iommu;
* @name: flow handler name for /proc/interrupts output
*/
struct irq_desc {
- unsigned int irq;
- struct timer_rand_state *timer_rand_state;
- unsigned int *kstat_irqs;
+
+ /*
+ * This union will go away, once we fixed the direct access to
+ * irq_desc all over the place. The direct fields are a 1:1
+ * overlay of irq_data.
+ */
+ union {
+ struct irq_data irq_data;
+ struct {
+ unsigned int irq;
+ unsigned int node;
+ struct irq_chip *chip;
+ void *handler_data;
+ void *chip_data;
+ struct msi_desc *msi_desc;
+#ifdef CONFIG_SMP
+ cpumask_var_t affinity;
+#endif
#ifdef CONFIG_INTR_REMAP
- struct irq_2_iommu *irq_2_iommu;
+ struct irq_2_iommu *irq_2_iommu;
#endif
+ };
+ };
+ struct timer_rand_state *timer_rand_state;
+ unsigned int *kstat_irqs;
irq_flow_handler_t handle_irq;
- struct irq_chip *chip;
- struct msi_desc *msi_desc;
- void *handler_data;
- void *chip_data;
struct irqaction *action; /* IRQ action list */
unsigned int status; /* IRQ status */
@@ -188,9 +226,7 @@ struct irq_desc {
unsigned int irqs_unhandled;
raw_spinlock_t lock;
#ifdef CONFIG_SMP
- cpumask_var_t affinity;
const struct cpumask *affinity_hint;
- unsigned int node;
#ifdef CONFIG_GENERIC_PENDING_IRQ
cpumask_var_t pending_mask;
#endif
@@ -406,15 +442,15 @@ extern int set_irq_chip_data(unsigned int irq, void *data);
extern int set_irq_type(unsigned int irq, unsigned int type);
extern int set_irq_msi(unsigned int irq, struct msi_desc *entry);
-#define get_irq_chip(irq) (irq_to_desc(irq)->chip)
-#define get_irq_chip_data(irq) (irq_to_desc(irq)->chip_data)
-#define get_irq_data(irq) (irq_to_desc(irq)->handler_data)
-#define get_irq_msi(irq) (irq_to_desc(irq)->msi_desc)
+#define get_irq_chip(irq) (irq_to_desc(irq)->irq_data.chip)
+#define get_irq_chip_data(irq) (irq_to_desc(irq)->irq_data.chip_data)
+#define get_irq_data(irq) (irq_to_desc(irq)->irq_data.handler_data)
+#define get_irq_msi(irq) (irq_to_desc(irq)->irq_data.msi_desc)
-#define get_irq_desc_chip(desc) ((desc)->chip)
-#define get_irq_desc_chip_data(desc) ((desc)->chip_data)
-#define get_irq_desc_data(desc) ((desc)->handler_data)
-#define get_irq_desc_msi(desc) ((desc)->msi_desc)
+#define get_irq_desc_chip(desc) ((desc)->irq_data.chip)
+#define get_irq_desc_chip_data(desc) ((desc)->irq_data.chip_data)
+#define get_irq_desc_data(desc) ((desc)->irq_data.handler_data)
+#define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc)
#endif /* CONFIG_GENERIC_HARDIRQS */
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 27e5c69..099d4fc 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -75,12 +75,10 @@ EXPORT_SYMBOL_GPL(nr_irqs);
#ifdef CONFIG_SPARSE_IRQ
static struct irq_desc irq_desc_init = {
- .irq = -1,
- .status = IRQ_DISABLED,
- .chip = &no_irq_chip,
- .handle_irq = handle_bad_irq,
- .depth = 1,
- .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
+ .status = IRQ_DISABLED,
+ .handle_irq = handle_bad_irq,
+ .depth = 1,
+ .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
};
void __ref init_kstat_irqs(struct irq_desc *desc, int node, int nr)
@@ -105,7 +103,7 @@ static void init_one_irq_desc(int irq, struct irq_desc *desc, int node)
memcpy(desc, &irq_desc_init, sizeof(struct irq_desc));
raw_spin_lock_init(&desc->lock);
- desc->irq = irq;
+ desc->irq_data.irq = irq;
#ifdef CONFIG_SMP
desc->node = node;
#endif
@@ -151,12 +149,10 @@ void replace_irq_desc(unsigned int irq, struct irq_desc *desc)
static struct irq_desc irq_desc_legacy[NR_IRQS_LEGACY] __cacheline_aligned_in_smp = {
[0 ... NR_IRQS_LEGACY-1] = {
- .irq = -1,
- .status = IRQ_DISABLED,
- .chip = &no_irq_chip,
- .handle_irq = handle_bad_irq,
- .depth = 1,
- .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
+ .status = IRQ_DISABLED,
+ .handle_irq = handle_bad_irq,
+ .depth = 1,
+ .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
}
};
@@ -183,8 +179,11 @@ int __init early_irq_init(void)
kstat_irqs_legacy = kzalloc_node(NR_IRQS_LEGACY * nr_cpu_ids *
sizeof(int), GFP_NOWAIT, node);
+ irq_desc_init.irq_data.chip = &no_irq_chip;
+
for (i = 0; i < legacy_count; i++) {
- desc[i].irq = i;
+ desc[i].irq_data.irq = i;
+ desc[i].irq_data.chip = &no_irq_chip;
#ifdef CONFIG_SMP
desc[i].node = node;
#endif
@@ -241,11 +240,10 @@ out_unlock:
struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
[0 ... NR_IRQS-1] = {
- .status = IRQ_DISABLED,
- .chip = &no_irq_chip,
- .handle_irq = handle_bad_irq,
- .depth = 1,
- .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc->lock),
+ .status = IRQ_DISABLED,
+ .handle_irq = handle_bad_irq,
+ .depth = 1,
+ .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc->lock),
}
};
@@ -264,7 +262,8 @@ int __init early_irq_init(void)
count = ARRAY_SIZE(irq_desc);
for (i = 0; i < count; i++) {
- desc[i].irq = i;
+ desc[i].irq_data.irq = i;
+ desc[i].irq_data.chip = &no_irq_chip;
alloc_desc_masks(&desc[i], 0, true);
init_desc_masks(&desc[i]);
desc[i].kstat_irqs = kstat_irqs_all[i];
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 03/19] genirq: Provide advanced irq chip functions
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
2010-09-27 12:44 ` [patch 01/19] genirq: Cleanup access to irq_data Thomas Gleixner
2010-09-27 12:44 ` [patch 02/19] genirq: Create irq_data Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:29 ` [tip:irq/core] " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 04/19] genirq; Provide compat handling for bus_lock/bus_sync_unlock Thomas Gleixner
` (15 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-migration-path-for-irq-chip-functions.patch --]
[-- Type: text/plain, Size: 2125 bytes --]
The low level irq chip functions want access to irq_desc->irq_data.
Provide new functions which hand down irq_data instead of the irq
number so these functions avoid to call irq_to_desc() which is a radix
tree lookup in case of sparse irq.
This provides all the old functions except one: end(). end() is a
relict of __do_IRQ() and will just go away with the __do_IRQ() code.
The replacement for set_affinity() has an extra argument "bool
force". The reason for this is to notify the low level code, that the
move has to be done right away and cannot be delayed until the next
interrupt happens. That's necessary to handle the irq fixup on cpu
unplug in the generic code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
include/linux/irq.h | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
Index: linux-2.6-tip/include/linux/irq.h
===================================================================
--- linux-2.6-tip.orig/include/linux/irq.h
+++ linux-2.6-tip/include/linux/irq.h
@@ -151,6 +151,26 @@ struct irq_chip {
void (*bus_lock)(unsigned int irq);
void (*bus_sync_unlock)(unsigned int irq);
+ unsigned int (*irq_startup)(struct irq_data *data);
+ void (*irq_shutdown)(struct irq_data *data);
+ void (*irq_enable)(struct irq_data *data);
+ void (*irq_disable)(struct irq_data *data);
+
+ void (*irq_ack)(struct irq_data *data);
+ void (*irq_mask)(struct irq_data *data);
+ void (*irq_mask_ack)(struct irq_data *data);
+ void (*irq_unmask)(struct irq_data *data);
+ void (*irq_eoi)(struct irq_data *data);
+ void (*irq_end)(struct irq_data *data);
+
+ int (*irq_set_affinity)(struct irq_data *data, const struct cpumask *dest, bool force);
+ int (*irq_retrigger)(struct irq_data *data);
+ int (*irq_set_type)(struct irq_data *data, unsigned int flow_type);
+ int (*irq_set_wake)(struct irq_data *data, unsigned int on);
+
+ void (*irq_bus_lock)(struct irq_data *data);
+ void (*irq_bus_sync_unlock)(struct irq_data *data);
+
/* Currently used only by UML, might disappear one day.*/
#ifdef CONFIG_IRQ_RELEASE_METHOD
void (*release)(unsigned int irq, void *dev_id);
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide advanced irq chip functions
2010-09-27 12:44 ` [patch 03/19] genirq: Provide advanced irq chip functions Thomas Gleixner
@ 2010-10-04 20:29 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:29 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: f8822657e799b02c55556c99a601261e207a299d
Gitweb: http://git.kernel.org/tip/f8822657e799b02c55556c99a601261e207a299d
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:32 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:32 +0200
genirq: Provide advanced irq chip functions
The low level irq chip functions want access to irq_desc->irq_data.
Provide new functions which hand down irq_data instead of the irq
number so these functions avoid to call irq_to_desc() which is a radix
tree lookup in case of sparse irq.
This provides all the old functions except one: end(). end() is a
relict of __do_IRQ() and will just go away with the __do_IRQ() code.
The replacement for set_affinity() has an extra argument "bool
force". The reason for this is to notify the low level code, that the
move has to be done right away and cannot be delayed until the next
interrupt happens. That's necessary to handle the irq fixup on cpu
unplug in the generic code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121841.742126604@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
include/linux/irq.h | 66 ++++++++++++++++++++++++++++++++++++++------------
1 files changed, 50 insertions(+), 16 deletions(-)
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 002351d..0c83cbd 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -118,23 +118,38 @@ struct irq_data {
* struct irq_chip - hardware interrupt chip descriptor
*
* @name: name for /proc/interrupts
- * @startup: start up the interrupt (defaults to ->enable if NULL)
- * @shutdown: shut down the interrupt (defaults to ->disable if NULL)
- * @enable: enable the interrupt (defaults to chip->unmask if NULL)
- * @disable: disable the interrupt
- * @ack: start of a new interrupt
- * @mask: mask an interrupt source
- * @mask_ack: ack and mask an interrupt source
- * @unmask: unmask an interrupt source
- * @eoi: end of interrupt - chip level
- * @end: end of interrupt - flow level
- * @set_affinity: set the CPU affinity on SMP machines
- * @retrigger: resend an IRQ to the CPU
- * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
- * @set_wake: enable/disable power-management wake-on of an IRQ
+ * @startup: deprecated, replaced by irq_startup
+ * @shutdown: deprecated, replaced by irq_shutdown
+ * @enable: deprecated, replaced by irq_enable
+ * @disable: deprecated, replaced by irq_disable
+ * @ack: deprecated, replaced by irq_ack
+ * @mask: deprecated, replaced by irq_mask
+ * @mask_ack: deprecated, replaced by irq_mask_ack
+ * @unmask: deprecated, replaced by irq_unmask
+ * @eoi: deprecated, replaced by irq_eoi
+ * @end: deprecated, will go away with __do_IRQ()
+ * @set_affinity: deprecated, replaced by irq_set_affinity
+ * @retrigger: deprecated, replaced by irq_retrigger
+ * @set_type: deprecated, replaced by irq_set_type
+ * @set_wake: deprecated, replaced by irq_wake
+ * @bus_lock: deprecated, replaced by irq_bus_lock
+ * @bus_sync_unlock: deprecated, replaced by irq_bus_sync_unlock
*
- * @bus_lock: function to lock access to slow bus (i2c) chips
- * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips
+ * @irq_startup: start up the interrupt (defaults to ->enable if NULL)
+ * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
+ * @irq_enable: enable the interrupt (defaults to chip->unmask if NULL)
+ * @irq_disable: disable the interrupt
+ * @irq_ack: start of a new interrupt
+ * @irq_mask: mask an interrupt source
+ * @irq_mask_ack: ack and mask an interrupt source
+ * @irq_unmask: unmask an interrupt source
+ * @irq_eoi: end of interrupt
+ * @irq_set_affinity: set the CPU affinity on SMP machines
+ * @irq_retrigger: resend an IRQ to the CPU
+ * @irq_set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
+ * @irq_set_wake: enable/disable power-management wake-on of an IRQ
+ * @irq_bus_lock: function to lock access to slow bus (i2c) chips
+ * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips
*
* @release: release function solely used by UML
*/
@@ -161,6 +176,25 @@ struct irq_chip {
void (*bus_lock)(unsigned int irq);
void (*bus_sync_unlock)(unsigned int irq);
+ unsigned int (*irq_startup)(struct irq_data *data);
+ void (*irq_shutdown)(struct irq_data *data);
+ void (*irq_enable)(struct irq_data *data);
+ void (*irq_disable)(struct irq_data *data);
+
+ void (*irq_ack)(struct irq_data *data);
+ void (*irq_mask)(struct irq_data *data);
+ void (*irq_mask_ack)(struct irq_data *data);
+ void (*irq_unmask)(struct irq_data *data);
+ void (*irq_eoi)(struct irq_data *data);
+
+ int (*irq_set_affinity)(struct irq_data *data, const struct cpumask *dest, bool force);
+ int (*irq_retrigger)(struct irq_data *data);
+ int (*irq_set_type)(struct irq_data *data, unsigned int flow_type);
+ int (*irq_set_wake)(struct irq_data *data, unsigned int on);
+
+ void (*irq_bus_lock)(struct irq_data *data);
+ void (*irq_bus_sync_unlock)(struct irq_data *data);
+
/* Currently used only by UML, might disappear one day.*/
#ifdef CONFIG_IRQ_RELEASE_METHOD
void (*release)(unsigned int irq, void *dev_id);
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 04/19] genirq; Provide compat handling for bus_lock/bus_sync_unlock
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (2 preceding siblings ...)
2010-09-27 12:44 ` [patch 03/19] genirq: Provide advanced irq chip functions Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:30 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 05/19] genirq; Provide compat handling for chip->mask() Thomas Gleixner
` (14 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-compat-handling-for-buslock-unlock.patch --]
[-- Type: text/plain, Size: 5165 bytes --]
Wrap the old chip functions for bus_lock/bus_sync_unlock until the
migration is complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 20 ++++++++++++++++++--
kernel/irq/internals.h | 17 +++++++++++------
kernel/irq/manage.c | 22 +++++++++++-----------
3 files changed, 40 insertions(+), 19 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -327,6 +327,17 @@ static void default_shutdown(unsigned in
desc->status |= IRQ_MASKED;
}
+/* Temporary migration helpers */
+static void compat_bus_lock(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->bus_lock(data->irq);
+}
+
+static void compat_bus_sync_unlock(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->bus_sync_unlock(data->irq);
+}
+
/*
* Fixup enable/disable function pointers
*/
@@ -349,6 +360,11 @@ void irq_chip_set_defaults(struct irq_ch
chip->disable : default_shutdown;
if (!chip->end)
chip->end = dummy_irq_chip.end;
+
+ if (chip->bus_lock)
+ chip->irq_bus_lock = compat_bus_lock;
+ if (chip->bus_sync_unlock)
+ chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -691,7 +707,7 @@ __set_irq_handler(unsigned int irq, irq_
desc->irq_data.chip = &dummy_irq_chip;
}
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
/* Uninstall? */
@@ -711,7 +727,7 @@ __set_irq_handler(unsigned int irq, irq_
desc->chip->startup(irq);
}
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL_GPL(__set_irq_handler);
Index: linux-2.6-tip/kernel/irq/internals.h
===================================================================
--- linux-2.6-tip.orig/kernel/irq/internals.h
+++ linux-2.6-tip/kernel/irq/internals.h
@@ -41,16 +41,21 @@ extern int irq_select_affinity_usr(unsig
extern void irq_set_thread_affinity(struct irq_desc *desc);
/* Inline functions for support of irq chips on slow busses */
-static inline void chip_bus_lock(unsigned int irq, struct irq_desc *desc)
+static inline void chip_bus_lock(struct irq_desc *desc)
{
- if (unlikely(desc->chip->bus_lock))
- desc->chip->bus_lock(irq);
+ if (unlikely(desc->chip->irq_bus_lock))
+ desc->chip->irq_bus_lock(&desc->irq_data);
}
-static inline void chip_bus_sync_unlock(unsigned int irq, struct irq_desc *desc)
+static inline void chip_bus_sync_unlock(struct irq_desc *desc)
{
- if (unlikely(desc->chip->bus_sync_unlock))
- desc->chip->bus_sync_unlock(irq);
+ if (unlikely(desc->chip->irq_bus_sync_unlock))
+ desc->chip->irq_bus_sync_unlock(&desc->irq_data);
+}
+
+static inline struct irq_desc *irq_data_to_desc(struct irq_data *data)
+{
+ return container_of(data, struct irq_desc, irq_data);
}
/*
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -246,11 +246,11 @@ void disable_irq_nosync(unsigned int irq
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
__disable_irq(desc, irq, false);
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(disable_irq_nosync);
@@ -323,11 +323,11 @@ void enable_irq(unsigned int irq)
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
__enable_irq(desc, irq, false);
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(enable_irq);
@@ -507,7 +507,7 @@ static int irq_wait_for_interrupt(struct
static void irq_finalize_oneshot(unsigned int irq, struct irq_desc *desc)
{
again:
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irq(&desc->lock);
/*
@@ -521,7 +521,7 @@ again:
*/
if (unlikely(desc->status & IRQ_INPROGRESS)) {
raw_spin_unlock_irq(&desc->lock);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
cpu_relax();
goto again;
}
@@ -531,7 +531,7 @@ again:
desc->chip->unmask(irq);
}
raw_spin_unlock_irq(&desc->lock);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
#ifdef CONFIG_SMP
@@ -997,9 +997,9 @@ void free_irq(unsigned int irq, void *de
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
kfree(__free_irq(irq, dev_id));
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(free_irq);
@@ -1086,9 +1086,9 @@ int request_threaded_irq(unsigned int ir
action->name = devname;
action->dev_id = dev_id;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
retval = __setup_irq(irq, desc, action);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
if (retval)
kfree(action);
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for bus_lock/bus_sync_unlock
2010-09-27 12:44 ` [patch 04/19] genirq; Provide compat handling for bus_lock/bus_sync_unlock Thomas Gleixner
@ 2010-10-04 20:30 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:30 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 3876ec9ef3775d062345b3760d3271ecb8cd3fea
Gitweb: http://git.kernel.org/tip/3876ec9ef3775d062345b3760d3271ecb8cd3fea
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:35 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:35 +0200
genirq: Provide compat handling for bus_lock/bus_sync_unlock
Wrap the old chip functions for bus_lock/bus_sync_unlock until the
migration is complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121841.842536121@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 20 ++++++++++++++++++--
kernel/irq/internals.h | 12 ++++++------
kernel/irq/manage.c | 22 +++++++++++-----------
3 files changed, 35 insertions(+), 19 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index e0e93ff..77e551d 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -324,6 +324,17 @@ static void default_shutdown(unsigned int irq)
desc->status |= IRQ_MASKED;
}
+/* Temporary migration helpers */
+static void compat_bus_lock(struct irq_data *data)
+{
+ data->chip->bus_lock(data->irq);
+}
+
+static void compat_bus_sync_unlock(struct irq_data *data)
+{
+ data->chip->bus_sync_unlock(data->irq);
+}
+
/*
* Fixup enable/disable function pointers
*/
@@ -346,6 +357,11 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->disable : default_shutdown;
if (!chip->end)
chip->end = dummy_irq_chip.end;
+
+ if (chip->bus_lock)
+ chip->irq_bus_lock = compat_bus_lock;
+ if (chip->bus_sync_unlock)
+ chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -687,7 +703,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
desc->irq_data.chip = &dummy_irq_chip;
}
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
/* Uninstall? */
@@ -707,7 +723,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
desc->irq_data.chip->startup(irq);
}
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL_GPL(__set_irq_handler);
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h
index 562fc7e..ecafbfe 100644
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@ -43,16 +43,16 @@ extern int irq_select_affinity_usr(unsigned int irq);
extern void irq_set_thread_affinity(struct irq_desc *desc);
/* Inline functions for support of irq chips on slow busses */
-static inline void chip_bus_lock(unsigned int irq, struct irq_desc *desc)
+static inline void chip_bus_lock(struct irq_desc *desc)
{
- if (unlikely(desc->irq_data.chip->bus_lock))
- desc->irq_data.chip->bus_lock(irq);
+ if (unlikely(desc->irq_data.chip->irq_bus_lock))
+ desc->irq_data.chip->irq_bus_lock(&desc->irq_data);
}
-static inline void chip_bus_sync_unlock(unsigned int irq, struct irq_desc *desc)
+static inline void chip_bus_sync_unlock(struct irq_desc *desc)
{
- if (unlikely(desc->irq_data.chip->bus_sync_unlock))
- desc->irq_data.chip->bus_sync_unlock(irq);
+ if (unlikely(desc->irq_data.chip->irq_bus_sync_unlock))
+ desc->irq_data.chip->irq_bus_sync_unlock(&desc->irq_data);
}
/*
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 4dfb195..dfb02ff 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -246,11 +246,11 @@ void disable_irq_nosync(unsigned int irq)
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
__disable_irq(desc, irq, false);
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(disable_irq_nosync);
@@ -323,11 +323,11 @@ void enable_irq(unsigned int irq)
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irqsave(&desc->lock, flags);
__enable_irq(desc, irq, false);
raw_spin_unlock_irqrestore(&desc->lock, flags);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(enable_irq);
@@ -507,7 +507,7 @@ static int irq_wait_for_interrupt(struct irqaction *action)
static void irq_finalize_oneshot(unsigned int irq, struct irq_desc *desc)
{
again:
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
raw_spin_lock_irq(&desc->lock);
/*
@@ -521,7 +521,7 @@ again:
*/
if (unlikely(desc->status & IRQ_INPROGRESS)) {
raw_spin_unlock_irq(&desc->lock);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
cpu_relax();
goto again;
}
@@ -531,7 +531,7 @@ again:
desc->irq_data.chip->unmask(irq);
}
raw_spin_unlock_irq(&desc->lock);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
#ifdef CONFIG_SMP
@@ -997,9 +997,9 @@ void free_irq(unsigned int irq, void *dev_id)
if (!desc)
return;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
kfree(__free_irq(irq, dev_id));
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
}
EXPORT_SYMBOL(free_irq);
@@ -1086,9 +1086,9 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler,
action->name = devname;
action->dev_id = dev_id;
- chip_bus_lock(irq, desc);
+ chip_bus_lock(desc);
retval = __setup_irq(irq, desc, action);
- chip_bus_sync_unlock(irq, desc);
+ chip_bus_sync_unlock(desc);
if (retval)
kfree(action);
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 05/19] genirq; Provide compat handling for chip->mask()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (3 preceding siblings ...)
2010-09-27 12:44 ` [patch 04/19] genirq; Provide compat handling for bus_lock/bus_sync_unlock Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:31 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 06/19] genirq; Provide compat handling for chip->unmask() Thomas Gleixner
` (13 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-mask.patch --]
[-- Type: text/plain, Size: 2687 bytes --]
Wrap the old chip function mask() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 22 +++++++++++++++-------
kernel/irq/migration.c | 2 +-
2 files changed, 16 insertions(+), 8 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -323,11 +323,16 @@ static void default_shutdown(unsigned in
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->chip->mask(irq);
+ desc->chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
}
/* Temporary migration helpers */
+static void compat_irq_mask(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->mask(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -365,6 +370,9 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
+
+ if (chip->mask)
+ chip->irq_mask = compat_irq_mask;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -372,17 +380,17 @@ static inline void mask_ack_irq(struct i
if (desc->chip->mask_ack)
desc->chip->mask_ack(irq);
else {
- desc->chip->mask(irq);
+ desc->chip->irq_mask(&desc->irq_data);
if (desc->chip->ack)
desc->chip->ack(irq);
}
desc->status |= IRQ_MASKED;
}
-static inline void mask_irq(struct irq_desc *desc, int irq)
+static inline void mask_irq(struct irq_desc *desc)
{
- if (desc->chip->mask) {
- desc->chip->mask(irq);
+ if (desc->chip->irq_mask) {
+ desc->chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
}
}
@@ -556,7 +564,7 @@ handle_fasteoi_irq(unsigned int irq, str
action = desc->action;
if (unlikely(!action || (desc->status & IRQ_DISABLED))) {
desc->status |= IRQ_PENDING;
- mask_irq(desc, irq);
+ mask_irq(desc);
goto out;
}
@@ -624,7 +632,7 @@ handle_edge_irq(unsigned int irq, struct
irqreturn_t action_ret;
if (unlikely(!action)) {
- mask_irq(desc, irq);
+ mask_irq(desc);
goto out_unlock;
}
Index: linux-2.6-tip/kernel/irq/migration.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/migration.c
+++ linux-2.6-tip/kernel/irq/migration.c
@@ -61,7 +61,7 @@ void move_native_irq(int irq)
if (unlikely(desc->status & IRQ_DISABLED))
return;
- desc->chip->mask(irq);
+ desc->chip->irq_mask(&desc->irq_data);
move_masked_irq(irq);
desc->chip->unmask(irq);
}
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->mask()
2010-09-27 12:44 ` [patch 05/19] genirq; Provide compat handling for chip->mask() Thomas Gleixner
@ 2010-10-04 20:31 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:31 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: e2c0f8ff0fc26959952fbfa89f732fef928df77f
Gitweb: http://git.kernel.org/tip/e2c0f8ff0fc26959952fbfa89f732fef928df77f
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:42 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:36 +0200
genirq: Provide compat handling for chip->mask()
Wrap the old chip function mask() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121841.940355859@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 22 +++++++++++++++-------
kernel/irq/handle.c | 1 -
kernel/irq/migration.c | 2 +-
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 77e551d..c041270 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -320,11 +320,16 @@ static void default_shutdown(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->irq_data.chip->mask(irq);
+ desc->irq_data.chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
}
/* Temporary migration helpers */
+static void compat_irq_mask(struct irq_data *data)
+{
+ data->chip->mask(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -362,6 +367,9 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
+
+ if (chip->mask)
+ chip->irq_mask = compat_irq_mask;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -369,17 +377,17 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq)
if (desc->irq_data.chip->mask_ack)
desc->irq_data.chip->mask_ack(irq);
else {
- desc->irq_data.chip->mask(irq);
+ desc->irq_data.chip->irq_mask(&desc->irq_data);
if (desc->irq_data.chip->ack)
desc->irq_data.chip->ack(irq);
}
desc->status |= IRQ_MASKED;
}
-static inline void mask_irq(struct irq_desc *desc, int irq)
+static inline void mask_irq(struct irq_desc *desc)
{
- if (desc->irq_data.chip->mask) {
- desc->irq_data.chip->mask(irq);
+ if (desc->irq_data.chip->irq_mask) {
+ desc->irq_data.chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
}
}
@@ -553,7 +561,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
action = desc->action;
if (unlikely(!action || (desc->status & IRQ_DISABLED))) {
desc->status |= IRQ_PENDING;
- mask_irq(desc, irq);
+ mask_irq(desc);
goto out;
}
@@ -621,7 +629,7 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
irqreturn_t action_ret;
if (unlikely(!action)) {
- mask_irq(desc, irq);
+ mask_irq(desc);
goto out_unlock;
}
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index adca5b4..3b160ac 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -360,7 +360,6 @@ struct irq_chip dummy_irq_chip = {
.enable = compat_noop,
.disable = compat_noop,
.ack = compat_noop,
- .mask = compat_noop,
.unmask = compat_noop,
.end = compat_noop,
};
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
index f923c37..b165ec2 100644
--- a/kernel/irq/migration.c
+++ b/kernel/irq/migration.c
@@ -61,7 +61,7 @@ void move_native_irq(int irq)
if (unlikely(desc->status & IRQ_DISABLED))
return;
- desc->irq_data.chip->mask(irq);
+ desc->irq_data.chip->irq_mask(&desc->irq_data);
move_masked_irq(irq);
desc->irq_data.chip->unmask(irq);
}
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 06/19] genirq; Provide compat handling for chip->unmask()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (4 preceding siblings ...)
2010-09-27 12:44 ` [patch 05/19] genirq; Provide compat handling for chip->mask() Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:31 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 07/19] genirq; Provide compat handling for chip->ack() Thomas Gleixner
` (12 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-unmask.patch --]
[-- Type: text/plain, Size: 3069 bytes --]
Wrap the old chip function unmask() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 20 ++++++++++++++------
kernel/irq/manage.c | 2 +-
kernel/irq/migration.c | 2 +-
3 files changed, 16 insertions(+), 8 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -294,7 +294,7 @@ static void default_enable(unsigned int
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->chip->unmask(irq);
+ desc->chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
}
@@ -333,6 +333,11 @@ static void compat_irq_mask(struct irq_d
irq_data_to_desc(data)->chip->mask(data->irq);
}
+static void compat_irq_unmask(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->unmask(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -373,6 +378,9 @@ void irq_chip_set_defaults(struct irq_ch
if (chip->mask)
chip->irq_mask = compat_irq_mask;
+
+ if (chip->unmask)
+ chip->irq_unmask = compat_irq_unmask;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -395,10 +403,10 @@ static inline void mask_irq(struct irq_d
}
}
-static inline void unmask_irq(struct irq_desc *desc, int irq)
+static inline void unmask_irq(struct irq_desc *desc)
{
- if (desc->chip->unmask) {
- desc->chip->unmask(irq);
+ if (desc->chip->irq_unmask) {
+ desc->chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
}
}
@@ -527,7 +535,7 @@ handle_level_irq(unsigned int irq, struc
desc->status &= ~IRQ_INPROGRESS;
if (!(desc->status & (IRQ_DISABLED | IRQ_ONESHOT)))
- unmask_irq(desc, irq);
+ unmask_irq(desc);
out_unlock:
raw_spin_unlock(&desc->lock);
}
@@ -644,7 +652,7 @@ handle_edge_irq(unsigned int irq, struct
if (unlikely((desc->status &
(IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
(IRQ_PENDING | IRQ_MASKED))) {
- unmask_irq(desc, irq);
+ unmask_irq(desc);
}
desc->status &= ~IRQ_PENDING;
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -528,7 +528,7 @@ again:
if (!(desc->status & IRQ_DISABLED) && (desc->status & IRQ_MASKED)) {
desc->status &= ~IRQ_MASKED;
- desc->chip->unmask(irq);
+ desc->chip->irq_unmask(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
chip_bus_sync_unlock(desc);
Index: linux-2.6-tip/kernel/irq/migration.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/migration.c
+++ linux-2.6-tip/kernel/irq/migration.c
@@ -63,6 +63,6 @@ void move_native_irq(int irq)
desc->chip->irq_mask(&desc->irq_data);
move_masked_irq(irq);
- desc->chip->unmask(irq);
+ desc->chip->irq_unmask(&desc->irq_data);
}
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->unmask()
2010-09-27 12:44 ` [patch 06/19] genirq; Provide compat handling for chip->unmask() Thomas Gleixner
@ 2010-10-04 20:31 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:31 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 0eda58b7f3a30c9a13d83db1cfaab00e1c452055
Gitweb: http://git.kernel.org/tip/0eda58b7f3a30c9a13d83db1cfaab00e1c452055
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:44 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:37 +0200
genirq: Provide compat handling for chip->unmask()
Wrap the old chip function unmask() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.043608928@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 20 ++++++++++++++------
kernel/irq/handle.c | 1 -
kernel/irq/manage.c | 2 +-
kernel/irq/migration.c | 2 +-
4 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index c041270..dbdb59a 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -291,7 +291,7 @@ static void default_enable(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->irq_data.chip->unmask(irq);
+ desc->irq_data.chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
}
@@ -330,6 +330,11 @@ static void compat_irq_mask(struct irq_data *data)
data->chip->mask(data->irq);
}
+static void compat_irq_unmask(struct irq_data *data)
+{
+ data->chip->unmask(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -370,6 +375,9 @@ void irq_chip_set_defaults(struct irq_chip *chip)
if (chip->mask)
chip->irq_mask = compat_irq_mask;
+
+ if (chip->unmask)
+ chip->irq_unmask = compat_irq_unmask;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -392,10 +400,10 @@ static inline void mask_irq(struct irq_desc *desc)
}
}
-static inline void unmask_irq(struct irq_desc *desc, int irq)
+static inline void unmask_irq(struct irq_desc *desc)
{
- if (desc->irq_data.chip->unmask) {
- desc->irq_data.chip->unmask(irq);
+ if (desc->irq_data.chip->irq_unmask) {
+ desc->irq_data.chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
}
}
@@ -524,7 +532,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc)
desc->status &= ~IRQ_INPROGRESS;
if (!(desc->status & (IRQ_DISABLED | IRQ_ONESHOT)))
- unmask_irq(desc, irq);
+ unmask_irq(desc);
out_unlock:
raw_spin_unlock(&desc->lock);
}
@@ -641,7 +649,7 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
if (unlikely((desc->status &
(IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
(IRQ_PENDING | IRQ_MASKED))) {
- unmask_irq(desc, irq);
+ unmask_irq(desc);
}
desc->status &= ~IRQ_PENDING;
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 3b160ac..f334c8c 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -360,7 +360,6 @@ struct irq_chip dummy_irq_chip = {
.enable = compat_noop,
.disable = compat_noop,
.ack = compat_noop,
- .unmask = compat_noop,
.end = compat_noop,
};
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index dfb02ff..b3986bc 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -528,7 +528,7 @@ again:
if (!(desc->status & IRQ_DISABLED) && (desc->status & IRQ_MASKED)) {
desc->status &= ~IRQ_MASKED;
- desc->irq_data.chip->unmask(irq);
+ desc->irq_data.chip->irq_unmask(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
chip_bus_sync_unlock(desc);
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
index b165ec2..7888e5d 100644
--- a/kernel/irq/migration.c
+++ b/kernel/irq/migration.c
@@ -63,6 +63,6 @@ void move_native_irq(int irq)
desc->irq_data.chip->irq_mask(&desc->irq_data);
move_masked_irq(irq);
- desc->irq_data.chip->unmask(irq);
+ desc->irq_data.chip->irq_unmask(&desc->irq_data);
}
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 07/19] genirq; Provide compat handling for chip->ack()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (5 preceding siblings ...)
2010-09-27 12:44 ` [patch 06/19] genirq; Provide compat handling for chip->unmask() Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:31 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 08/19] genirq; Provide compat handling for chip->mask_ack() Thomas Gleixner
` (11 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-ack.patch --]
[-- Type: text/plain, Size: 2100 bytes --]
Wrap the old chip function ack() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -338,6 +338,11 @@ static void compat_irq_unmask(struct irq
irq_data_to_desc(data)->chip->unmask(data->irq);
}
+static void compat_irq_ack(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->ack(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -375,12 +380,12 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
-
if (chip->mask)
chip->irq_mask = compat_irq_mask;
-
if (chip->unmask)
chip->irq_unmask = compat_irq_unmask;
+ if (chip->ack)
+ chip->irq_ack = compat_irq_ack;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -389,8 +394,8 @@ static inline void mask_ack_irq(struct i
desc->chip->mask_ack(irq);
else {
desc->chip->irq_mask(&desc->irq_data);
- if (desc->chip->ack)
- desc->chip->ack(irq);
+ if (desc->chip->irq_ack)
+ desc->chip->irq_ack(&desc->irq_data);
}
desc->status |= IRQ_MASKED;
}
@@ -629,8 +634,7 @@ handle_edge_irq(unsigned int irq, struct
kstat_incr_irqs_this_cpu(irq, desc);
/* Start handling the irq */
- if (desc->chip->ack)
- desc->chip->ack(irq);
+ desc->chip->irq_ack(&desc->irq_data);
/* Mark the IRQ currently in progress.*/
desc->status |= IRQ_INPROGRESS;
@@ -683,8 +687,8 @@ handle_percpu_irq(unsigned int irq, stru
kstat_incr_irqs_this_cpu(irq, desc);
- if (desc->chip->ack)
- desc->chip->ack(irq);
+ if (desc->chip->irq_ack)
+ desc->chip->irq_ack(&desc->irq_data);
action_ret = handle_IRQ_event(irq, desc->action);
if (!noirqdebug)
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->ack()
2010-09-27 12:44 ` [patch 07/19] genirq; Provide compat handling for chip->ack() Thomas Gleixner
@ 2010-10-04 20:31 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:31 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 22a49163e90dd7088f801dd54e25b04e1f337e9b
Gitweb: http://git.kernel.org/tip/22a49163e90dd7088f801dd54e25b04e1f337e9b
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:47 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:38 +0200
genirq: Provide compat handling for chip->ack()
Wrap the old chip function ack() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.142624725@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 20 ++++++++++++--------
kernel/irq/handle.c | 10 ----------
2 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index dbdb59a..864c3ab 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -335,6 +335,11 @@ static void compat_irq_unmask(struct irq_data *data)
data->chip->unmask(data->irq);
}
+static void compat_irq_ack(struct irq_data *data)
+{
+ data->chip->ack(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -372,12 +377,12 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
chip->irq_bus_sync_unlock = compat_bus_sync_unlock;
-
if (chip->mask)
chip->irq_mask = compat_irq_mask;
-
if (chip->unmask)
chip->irq_unmask = compat_irq_unmask;
+ if (chip->ack)
+ chip->irq_ack = compat_irq_ack;
}
static inline void mask_ack_irq(struct irq_desc *desc, int irq)
@@ -386,8 +391,8 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq)
desc->irq_data.chip->mask_ack(irq);
else {
desc->irq_data.chip->irq_mask(&desc->irq_data);
- if (desc->irq_data.chip->ack)
- desc->irq_data.chip->ack(irq);
+ if (desc->irq_data.chip->irq_ack)
+ desc->irq_data.chip->irq_ack(&desc->irq_data);
}
desc->status |= IRQ_MASKED;
}
@@ -626,8 +631,7 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
kstat_incr_irqs_this_cpu(irq, desc);
/* Start handling the irq */
- if (desc->irq_data.chip->ack)
- desc->irq_data.chip->ack(irq);
+ desc->irq_data.chip->irq_ack(&desc->irq_data);
/* Mark the IRQ currently in progress.*/
desc->status |= IRQ_INPROGRESS;
@@ -680,8 +684,8 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc)
kstat_incr_irqs_this_cpu(irq, desc);
- if (desc->irq_data.chip->ack)
- desc->irq_data.chip->ack(irq);
+ if (desc->irq_data.chip->irq_ack)
+ desc->irq_data.chip->irq_ack(&desc->irq_data);
action_ret = handle_IRQ_event(irq, desc->action);
if (!noirqdebug)
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index f334c8c..9ba7aec 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -299,14 +299,6 @@ static void ack_bad(struct irq_data *data)
ack_bad_irq(data->irq);
}
-static void compat_ack_bad(unsigned int irq)
-{
- struct irq_desc *desc = irq_to_desc(irq);
-
- print_irq_desc(irq, desc);
- ack_bad_irq(irq);
-}
-
/*
* NOP functions
*/
@@ -338,7 +330,6 @@ struct irq_chip no_irq_chip = {
.shutdown = compat_noop,
.enable = compat_noop,
.disable = compat_noop,
- .ack = compat_ack_bad,
.end = compat_noop,
};
@@ -359,7 +350,6 @@ struct irq_chip dummy_irq_chip = {
.shutdown = compat_noop,
.enable = compat_noop,
.disable = compat_noop,
- .ack = compat_noop,
.end = compat_noop,
};
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 08/19] genirq; Provide compat handling for chip->mask_ack()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (6 preceding siblings ...)
2010-09-27 12:44 ` [patch 07/19] genirq; Provide compat handling for chip->ack() Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-09-27 15:10 ` Geert Uytterhoeven
2010-10-04 20:32 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 09/19] genirq; Provide compat handling for chip->eoi() Thomas Gleixner
` (10 subsequent siblings)
18 siblings, 2 replies; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-mask-ack.patch --]
[-- Type: text/plain, Size: 2277 bytes --]
Wrap the old chip function mask_ack() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 20 ++++++++++++++++++--
kernel/irq/internals.h | 17 +++++++++++------
kernel/irq/manage.c | 22 +++++++++++-----------
3 files changed, 40 insertions(+), 19 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -343,6 +343,11 @@ static void compat_irq_ack(struct irq_da
irq_data_to_desc(data)->chip->ack(data->irq);
}
+static void compat_irq_mask_ack(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->mask_ack(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -386,12 +391,14 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_unmask = compat_irq_unmask;
if (chip->ack)
chip->irq_ack = compat_irq_ack;
+ if (chip->mask_ack)
+ chip->irq_mask_ack = compat_irq_mask_ack;
}
-static inline void mask_ack_irq(struct irq_desc *desc, int irq)
+static inline void mask_ack_irq(struct irq_desc *desc)
{
- if (desc->chip->mask_ack)
- desc->chip->mask_ack(irq);
+ if (desc->chip->irq_mask_ack)
+ desc->chip->irq_mask_ack(&desc->irq_data);
else {
desc->chip->irq_mask(&desc->irq_data);
if (desc->chip->irq_ack)
@@ -514,7 +521,7 @@ handle_level_irq(unsigned int irq, struc
irqreturn_t action_ret;
raw_spin_lock(&desc->lock);
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
if (unlikely(desc->status & IRQ_INPROGRESS))
goto out_unlock;
@@ -628,7 +635,7 @@ handle_edge_irq(unsigned int irq, struct
if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) ||
!desc->action)) {
desc->status |= (IRQ_PENDING | IRQ_MASKED);
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
goto out_unlock;
}
kstat_incr_irqs_this_cpu(irq, desc);
@@ -733,7 +740,7 @@ __set_irq_handler(unsigned int irq, irq_
/* Uninstall? */
if (handle == handle_bad_irq) {
if (desc->chip != &no_irq_chip)
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
desc->status |= IRQ_DISABLED;
desc->depth = 1;
}
^ permalink raw reply [flat|nested] 40+ messages in thread* Re: [patch 08/19] genirq; Provide compat handling for chip->mask_ack()
2010-09-27 12:44 ` [patch 08/19] genirq; Provide compat handling for chip->mask_ack() Thomas Gleixner
@ 2010-09-27 15:10 ` Geert Uytterhoeven
2010-09-27 15:16 ` Thomas Gleixner
2010-10-04 20:32 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
1 sibling, 1 reply; 40+ messages in thread
From: Geert Uytterhoeven @ 2010-09-27 15:10 UTC (permalink / raw)
To: Thomas Gleixner
Cc: LKML, Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
On Mon, Sep 27, 2010 at 14:44, Thomas Gleixner <tglx@linutronix.de> wrote:
> Wrap the old chip function mask_ack() until the migration is complete
> and the old chip functions are removed.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> kernel/irq/chip.c | 20 ++++++++++++++++++--
> kernel/irq/internals.h | 17 +++++++++++------
> kernel/irq/manage.c | 22 +++++++++++-----------
> 3 files changed, 40 insertions(+), 19 deletions(-)
3 files
> Index: linux-2.6-tip/kernel/irq/chip.c
> ===================================================================
> --- linux-2.6-tip.orig/kernel/irq/chip.c
> +++ linux-2.6-tip/kernel/irq/chip.c
Only 1 file?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 40+ messages in thread* Re: [patch 08/19] genirq; Provide compat handling for chip->mask_ack()
2010-09-27 15:10 ` Geert Uytterhoeven
@ 2010-09-27 15:16 ` Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 15:16 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: LKML, Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: Type: TEXT/PLAIN, Size: 846 bytes --]
On Mon, 27 Sep 2010, Geert Uytterhoeven wrote:
> On Mon, Sep 27, 2010 at 14:44, Thomas Gleixner <tglx@linutronix.de> wrote:
> > Wrap the old chip function mask_ack() until the migration is complete
> > and the old chip functions are removed.
> >
> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> > ---
> > kernel/irq/chip.c | 20 ++++++++++++++++++--
> > kernel/irq/internals.h | 17 +++++++++++------
> > kernel/irq/manage.c | 22 +++++++++++-----------
> > 3 files changed, 40 insertions(+), 19 deletions(-)
>
> 3 files
>
> > Index: linux-2.6-tip/kernel/irq/chip.c
> > ===================================================================
> > --- linux-2.6-tip.orig/kernel/irq/chip.c
> > +++ linux-2.6-tip/kernel/irq/chip.c
>
> Only 1 file?
Yes, seems I forgot to refresh the patch stats, grmbl.
tglx
^ permalink raw reply [flat|nested] 40+ messages in thread
* [tip:irq/core] genirq: Provide compat handling for chip->mask_ack()
2010-09-27 12:44 ` [patch 08/19] genirq; Provide compat handling for chip->mask_ack() Thomas Gleixner
2010-09-27 15:10 ` Geert Uytterhoeven
@ 2010-10-04 20:32 ` tip-bot for Thomas Gleixner
1 sibling, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:32 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 9205e31d1af0f725e71bbae10d199c6b9e8d6dd8
Gitweb: http://git.kernel.org/tip/9205e31d1af0f725e71bbae10d199c6b9e8d6dd8
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:50 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:40 +0200
genirq: Provide compat handling for chip->mask_ack()
Wrap the old chip function mask_ack() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.240806983@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 864c3ab..09c1a44 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -340,6 +340,11 @@ static void compat_irq_ack(struct irq_data *data)
data->chip->ack(data->irq);
}
+static void compat_irq_mask_ack(struct irq_data *data)
+{
+ data->chip->mask_ack(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -383,12 +388,14 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_unmask = compat_irq_unmask;
if (chip->ack)
chip->irq_ack = compat_irq_ack;
+ if (chip->mask_ack)
+ chip->irq_mask_ack = compat_irq_mask_ack;
}
-static inline void mask_ack_irq(struct irq_desc *desc, int irq)
+static inline void mask_ack_irq(struct irq_desc *desc)
{
- if (desc->irq_data.chip->mask_ack)
- desc->irq_data.chip->mask_ack(irq);
+ if (desc->irq_data.chip->irq_mask_ack)
+ desc->irq_data.chip->irq_mask_ack(&desc->irq_data);
else {
desc->irq_data.chip->irq_mask(&desc->irq_data);
if (desc->irq_data.chip->irq_ack)
@@ -511,7 +518,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc)
irqreturn_t action_ret;
raw_spin_lock(&desc->lock);
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
if (unlikely(desc->status & IRQ_INPROGRESS))
goto out_unlock;
@@ -625,7 +632,7 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) ||
!desc->action)) {
desc->status |= (IRQ_PENDING | IRQ_MASKED);
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
goto out_unlock;
}
kstat_incr_irqs_this_cpu(irq, desc);
@@ -729,7 +736,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
/* Uninstall? */
if (handle == handle_bad_irq) {
if (desc->irq_data.chip != &no_irq_chip)
- mask_ack_irq(desc, irq);
+ mask_ack_irq(desc);
desc->status |= IRQ_DISABLED;
desc->depth = 1;
}
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 09/19] genirq; Provide compat handling for chip->eoi()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (7 preceding siblings ...)
2010-09-27 12:44 ` [patch 08/19] genirq; Provide compat handling for chip->mask_ack() Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:32 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:44 ` [patch 10/19] genirq; Provide compat handling for chip->enable() Thomas Gleixner
` (9 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-eoi.patch --]
[-- Type: text/plain, Size: 1533 bytes --]
Wrap the old chip function eoi() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -348,6 +348,11 @@ static void compat_irq_mask_ack(struct i
irq_data_to_desc(data)->chip->mask_ack(data->irq);
}
+static void compat_irq_eoi(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->eoi(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -393,6 +398,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_ack = compat_irq_ack;
if (chip->mask_ack)
chip->irq_mask_ack = compat_irq_mask_ack;
+ if (chip->eoi)
+ chip->irq_eoi = compat_irq_eoi;
}
static inline void mask_ack_irq(struct irq_desc *desc)
@@ -599,7 +606,7 @@ handle_fasteoi_irq(unsigned int irq, str
raw_spin_lock(&desc->lock);
desc->status &= ~IRQ_INPROGRESS;
out:
- desc->chip->eoi(irq);
+ desc->chip->irq_eoi(&desc->irq_data);
raw_spin_unlock(&desc->lock);
}
@@ -701,8 +708,8 @@ handle_percpu_irq(unsigned int irq, stru
if (!noirqdebug)
note_interrupt(irq, desc, action_ret);
- if (desc->chip->eoi)
- desc->chip->eoi(irq);
+ if (desc->chip->irq_eoi)
+ desc->chip->irq_eoi(&desc->irq_data);
}
void
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->eoi()
2010-09-27 12:44 ` [patch 09/19] genirq; Provide compat handling for chip->eoi() Thomas Gleixner
@ 2010-10-04 20:32 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:32 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 0c5c15572ac096001f52d37b416f2a4be9aebb80
Gitweb: http://git.kernel.org/tip/0c5c15572ac096001f52d37b416f2a4be9aebb80
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:53 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:41 +0200
genirq: Provide compat handling for chip->eoi()
Wrap the old chip function eoi() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.339657617@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 09c1a44..c8648a8 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -345,6 +345,11 @@ static void compat_irq_mask_ack(struct irq_data *data)
data->chip->mask_ack(data->irq);
}
+static void compat_irq_eoi(struct irq_data *data)
+{
+ data->chip->eoi(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -390,6 +395,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_ack = compat_irq_ack;
if (chip->mask_ack)
chip->irq_mask_ack = compat_irq_mask_ack;
+ if (chip->eoi)
+ chip->irq_eoi = compat_irq_eoi;
}
static inline void mask_ack_irq(struct irq_desc *desc)
@@ -596,7 +603,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
raw_spin_lock(&desc->lock);
desc->status &= ~IRQ_INPROGRESS;
out:
- desc->irq_data.chip->eoi(irq);
+ desc->irq_data.chip->irq_eoi(&desc->irq_data);
raw_spin_unlock(&desc->lock);
}
@@ -698,8 +705,8 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc)
if (!noirqdebug)
note_interrupt(irq, desc, action_ret);
- if (desc->irq_data.chip->eoi)
- desc->irq_data.chip->eoi(irq);
+ if (desc->irq_data.chip->irq_eoi)
+ desc->irq_data.chip->irq_eoi(&desc->irq_data);
}
void
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 10/19] genirq; Provide compat handling for chip->enable()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (8 preceding siblings ...)
2010-09-27 12:44 ` [patch 09/19] genirq; Provide compat handling for chip->eoi() Thomas Gleixner
@ 2010-09-27 12:44 ` Thomas Gleixner
2010-10-04 20:32 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 11/19] genirq; Provide compat handling for chip->disable()/shutdown() Thomas Gleixner
` (8 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:44 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-enable.patch --]
[-- Type: text/plain, Size: 2377 bytes --]
Wrap the old chip function enable() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 25 ++++++++++++++++++++-----
kernel/irq/resend.c | 2 +-
2 files changed, 21 insertions(+), 6 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -290,9 +290,9 @@ EXPORT_SYMBOL_GPL(set_irq_nested_thread)
/*
* default enable function
*/
-static void default_enable(unsigned int irq)
+static void default_enable(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
desc->chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
@@ -312,7 +312,7 @@ static unsigned int default_startup(unsi
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->chip->enable(irq);
+ desc->chip->irq_enable(&desc->irq_data);
return 0;
}
@@ -353,6 +353,11 @@ static void compat_irq_eoi(struct irq_da
irq_data_to_desc(data)->chip->eoi(data->irq);
}
+static void compat_irq_enable(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->enable(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -368,8 +373,18 @@ static void compat_bus_sync_unlock(struc
*/
void irq_chip_set_defaults(struct irq_chip *chip)
{
- if (!chip->enable)
- chip->enable = default_enable;
+ /*
+ * Compat fixup functions need to be before we set the
+ * defaults for enable/disable/startup/shutdown
+ */
+ if (chip->enable)
+ chip->irq_enable = compat_irq_enable;
+
+ /*
+ * The real defaults
+ */
+ if (!chip->irq_enable)
+ chip->irq_enable = default_enable;
if (!chip->disable)
chip->disable = default_disable;
if (!chip->startup)
Index: linux-2.6-tip/kernel/irq/resend.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/resend.c
+++ linux-2.6-tip/kernel/irq/resend.c
@@ -60,7 +60,7 @@ void check_irq_resend(struct irq_desc *d
/*
* Make sure the interrupt is enabled, before resending it:
*/
- desc->chip->enable(irq);
+ desc->chip->irq_enable(&desc->irq_data);
/*
* We do not resend level type interrupts. Level type
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->enable()
2010-09-27 12:44 ` [patch 10/19] genirq; Provide compat handling for chip->enable() Thomas Gleixner
@ 2010-10-04 20:32 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:32 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: c5f756344c390f629243b4a28c2bd198fdfd7ee9
Gitweb: http://git.kernel.org/tip/c5f756344c390f629243b4a28c2bd198fdfd7ee9
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:44:56 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:42 +0200
genirq: Provide compat handling for chip->enable()
Wrap the old chip function enable() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.437159182@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 25 ++++++++++++++++++++-----
kernel/irq/handle.c | 2 --
kernel/irq/resend.c | 2 +-
3 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index c8648a8..a95b478 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -287,9 +287,9 @@ EXPORT_SYMBOL_GPL(set_irq_nested_thread);
/*
* default enable function
*/
-static void default_enable(unsigned int irq)
+static void default_enable(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
desc->irq_data.chip->irq_unmask(&desc->irq_data);
desc->status &= ~IRQ_MASKED;
@@ -309,7 +309,7 @@ static unsigned int default_startup(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
- desc->irq_data.chip->enable(irq);
+ desc->irq_data.chip->irq_enable(&desc->irq_data);
return 0;
}
@@ -350,6 +350,11 @@ static void compat_irq_eoi(struct irq_data *data)
data->chip->eoi(data->irq);
}
+static void compat_irq_enable(struct irq_data *data)
+{
+ data->chip->enable(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -365,8 +370,18 @@ static void compat_bus_sync_unlock(struct irq_data *data)
*/
void irq_chip_set_defaults(struct irq_chip *chip)
{
- if (!chip->enable)
- chip->enable = default_enable;
+ /*
+ * Compat fixup functions need to be before we set the
+ * defaults for enable/disable/startup/shutdown
+ */
+ if (chip->enable)
+ chip->irq_enable = compat_irq_enable;
+
+ /*
+ * The real defaults
+ */
+ if (!chip->irq_enable)
+ chip->irq_enable = default_enable;
if (!chip->disable)
chip->disable = default_disable;
if (!chip->startup)
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 9ba7aec..ac8c749 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -328,7 +328,6 @@ struct irq_chip no_irq_chip = {
.irq_ack = ack_bad,
.startup = compat_noop_ret,
.shutdown = compat_noop,
- .enable = compat_noop,
.disable = compat_noop,
.end = compat_noop,
};
@@ -348,7 +347,6 @@ struct irq_chip dummy_irq_chip = {
.irq_unmask = noop,
.startup = compat_noop_ret,
.shutdown = compat_noop,
- .enable = compat_noop,
.disable = compat_noop,
.end = compat_noop,
};
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
index 47c56a0..a798a23 100644
--- a/kernel/irq/resend.c
+++ b/kernel/irq/resend.c
@@ -60,7 +60,7 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
/*
* Make sure the interrupt is enabled, before resending it:
*/
- desc->irq_data.chip->enable(irq);
+ desc->irq_data.chip->irq_enable(&desc->irq_data);
/*
* We do not resend level type interrupts. Level type
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 11/19] genirq; Provide compat handling for chip->disable()/shutdown()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (9 preceding siblings ...)
2010-09-27 12:44 ` [patch 10/19] genirq; Provide compat handling for chip->enable() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:33 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 12/19] genirq; Provide compat handling for chip->startup() Thomas Gleixner
` (7 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-disable.patch --]
[-- Type: text/plain, Size: 5376 bytes --]
Wrap the old chip functions disable() and shutdown() until the
migration is complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/autoprobe.c | 6 +++---
kernel/irq/chip.c | 37 +++++++++++++++++++++++++++----------
kernel/irq/manage.c | 8 ++++----
kernel/irq/spurious.c | 2 +-
4 files changed, 35 insertions(+), 18 deletions(-)
Index: linux-2.6-tip/kernel/irq/autoprobe.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/autoprobe.c
+++ linux-2.6-tip/kernel/irq/autoprobe.c
@@ -98,7 +98,7 @@ unsigned long probe_irq_on(void)
/* It triggered already - consider it spurious. */
if (!(status & IRQ_WAITING)) {
desc->status = status & ~IRQ_AUTODETECT;
- desc->chip->shutdown(i);
+ desc->chip->irq_shutdown(&desc->irq_data);
} else
if (i < 32)
mask |= 1 << i;
@@ -137,7 +137,7 @@ unsigned int probe_irq_mask(unsigned lon
mask |= 1 << i;
desc->status = status & ~IRQ_AUTODETECT;
- desc->chip->shutdown(i);
+ desc->chip->irq_shutdown(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
@@ -181,7 +181,7 @@ int probe_irq_off(unsigned long val)
nr_of_irqs++;
}
desc->status = status & ~IRQ_AUTODETECT;
- desc->chip->shutdown(i);
+ desc->chip->irq_shutdown(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -301,7 +301,7 @@ static void default_enable(struct irq_da
/*
* default disable function
*/
-static void default_disable(unsigned int irq)
+static void default_disable(struct irq_data *data)
{
}
@@ -319,9 +319,9 @@ static unsigned int default_startup(unsi
/*
* default shutdown function
*/
-static void default_shutdown(unsigned int irq)
+static void default_shutdown(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
desc->chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
@@ -358,6 +358,16 @@ static void compat_irq_enable(struct irq
irq_data_to_desc(data)->chip->enable(data->irq);
}
+static void compat_irq_disable(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->disable(data->irq);
+}
+
+static void compat_irq_shutdown(struct irq_data *data)
+{
+ irq_data_to_desc(data)->chip->shutdown(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -379,28 +389,35 @@ void irq_chip_set_defaults(struct irq_ch
*/
if (chip->enable)
chip->irq_enable = compat_irq_enable;
+ if (chip->disable)
+ chip->irq_disable = compat_irq_disable;
+ if (chip->shutdown)
+ chip->irq_shutdown = compat_irq_shutdown;
/*
* The real defaults
*/
if (!chip->irq_enable)
chip->irq_enable = default_enable;
- if (!chip->disable)
- chip->disable = default_disable;
+ if (!chip->irq_disable)
+ chip->irq_disable = default_disable;
if (!chip->startup)
chip->startup = default_startup;
/*
- * We use chip->disable, when the user provided its own. When
- * we have default_disable set for chip->disable, then we need
+ * We use chip->irq_disable, when the user provided its own. When
+ * we have default_disable set for chip->irq_disable, then we need
* to use default_shutdown, otherwise the irq line is not
* disabled on free_irq():
*/
- if (!chip->shutdown)
- chip->shutdown = chip->disable != default_disable ?
- chip->disable : default_shutdown;
+ if (!chip->irq_shutdown)
+ chip->irq_shutdown = chip->irq_disable != default_disable ?
+ chip->irq_disable : default_shutdown;
if (!chip->end)
chip->end = dummy_irq_chip.end;
+ /*
+ * Now fix up the remaining compat handlers
+ */
if (chip->bus_lock)
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -223,7 +223,7 @@ void __disable_irq(struct irq_desc *desc
if (!desc->depth++) {
desc->status |= IRQ_DISABLED;
- desc->chip->disable(irq);
+ desc->chip->irq_disable(&desc->irq_data);
}
}
@@ -919,10 +919,10 @@ static struct irqaction *__free_irq(unsi
/* If this was the last handler, shut down the IRQ line: */
if (!desc->action) {
desc->status |= IRQ_DISABLED;
- if (desc->chip->shutdown)
- desc->chip->shutdown(irq);
+ if (desc->chip->irq_shutdown)
+ desc->chip->irq_shutdown(&desc->irq_data);
else
- desc->chip->disable(irq);
+ desc->chip->irq_disable(&desc->irq_data);
}
#ifdef CONFIG_SMP
Index: linux-2.6-tip/kernel/irq/spurious.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/spurious.c
+++ linux-2.6-tip/kernel/irq/spurious.c
@@ -254,7 +254,7 @@ void note_interrupt(unsigned int irq, st
printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED;
desc->depth++;
- desc->chip->disable(irq);
+ desc->chip->irq_disable(&desc->irq_data);
mod_timer(&poll_spurious_irq_timer,
jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->disable()/shutdown()
2010-09-27 12:45 ` [patch 11/19] genirq; Provide compat handling for chip->disable()/shutdown() Thomas Gleixner
@ 2010-10-04 20:33 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:33 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: bc310dda41be6439364c8f3b9fe7c9d743d22b1c
Gitweb: http://git.kernel.org/tip/bc310dda41be6439364c8f3b9fe7c9d743d22b1c
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:02 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:43 +0200
genirq: Provide compat handling for chip->disable()/shutdown()
Wrap the old chip functions disable() and shutdown() until the
migration is complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.532070631@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/autoprobe.c | 6 +++---
kernel/irq/chip.c | 37 +++++++++++++++++++++++++++----------
kernel/irq/handle.c | 4 ----
kernel/irq/manage.c | 8 ++++----
kernel/irq/spurious.c | 2 +-
5 files changed, 35 insertions(+), 22 deletions(-)
diff --git a/kernel/irq/autoprobe.c b/kernel/irq/autoprobe.c
index f9bf9b2..95806a4 100644
--- a/kernel/irq/autoprobe.c
+++ b/kernel/irq/autoprobe.c
@@ -98,7 +98,7 @@ unsigned long probe_irq_on(void)
/* It triggered already - consider it spurious. */
if (!(status & IRQ_WAITING)) {
desc->status = status & ~IRQ_AUTODETECT;
- desc->irq_data.chip->shutdown(i);
+ desc->irq_data.chip->irq_shutdown(&desc->irq_data);
} else
if (i < 32)
mask |= 1 << i;
@@ -137,7 +137,7 @@ unsigned int probe_irq_mask(unsigned long val)
mask |= 1 << i;
desc->status = status & ~IRQ_AUTODETECT;
- desc->irq_data.chip->shutdown(i);
+ desc->irq_data.chip->irq_shutdown(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
@@ -181,7 +181,7 @@ int probe_irq_off(unsigned long val)
nr_of_irqs++;
}
desc->status = status & ~IRQ_AUTODETECT;
- desc->irq_data.chip->shutdown(i);
+ desc->irq_data.chip->irq_shutdown(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index a95b478..b8a47f0 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -298,7 +298,7 @@ static void default_enable(struct irq_data *data)
/*
* default disable function
*/
-static void default_disable(unsigned int irq)
+static void default_disable(struct irq_data *data)
{
}
@@ -316,9 +316,9 @@ static unsigned int default_startup(unsigned int irq)
/*
* default shutdown function
*/
-static void default_shutdown(unsigned int irq)
+static void default_shutdown(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
desc->irq_data.chip->irq_mask(&desc->irq_data);
desc->status |= IRQ_MASKED;
@@ -355,6 +355,16 @@ static void compat_irq_enable(struct irq_data *data)
data->chip->enable(data->irq);
}
+static void compat_irq_disable(struct irq_data *data)
+{
+ data->chip->disable(data->irq);
+}
+
+static void compat_irq_shutdown(struct irq_data *data)
+{
+ data->chip->shutdown(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -376,28 +386,35 @@ void irq_chip_set_defaults(struct irq_chip *chip)
*/
if (chip->enable)
chip->irq_enable = compat_irq_enable;
+ if (chip->disable)
+ chip->irq_disable = compat_irq_disable;
+ if (chip->shutdown)
+ chip->irq_shutdown = compat_irq_shutdown;
/*
* The real defaults
*/
if (!chip->irq_enable)
chip->irq_enable = default_enable;
- if (!chip->disable)
- chip->disable = default_disable;
+ if (!chip->irq_disable)
+ chip->irq_disable = default_disable;
if (!chip->startup)
chip->startup = default_startup;
/*
- * We use chip->disable, when the user provided its own. When
- * we have default_disable set for chip->disable, then we need
+ * We use chip->irq_disable, when the user provided its own. When
+ * we have default_disable set for chip->irq_disable, then we need
* to use default_shutdown, otherwise the irq line is not
* disabled on free_irq():
*/
- if (!chip->shutdown)
- chip->shutdown = chip->disable != default_disable ?
- chip->disable : default_shutdown;
+ if (!chip->irq_shutdown)
+ chip->irq_shutdown = chip->irq_disable != default_disable ?
+ chip->irq_disable : default_shutdown;
if (!chip->end)
chip->end = dummy_irq_chip.end;
+ /*
+ * Now fix up the remaining compat handlers
+ */
if (chip->bus_lock)
chip->irq_bus_lock = compat_bus_lock;
if (chip->bus_sync_unlock)
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index ac8c749..60e25c4 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -327,8 +327,6 @@ struct irq_chip no_irq_chip = {
.irq_disable = noop,
.irq_ack = ack_bad,
.startup = compat_noop_ret,
- .shutdown = compat_noop,
- .disable = compat_noop,
.end = compat_noop,
};
@@ -346,8 +344,6 @@ struct irq_chip dummy_irq_chip = {
.irq_mask = noop,
.irq_unmask = noop,
.startup = compat_noop_ret,
- .shutdown = compat_noop,
- .disable = compat_noop,
.end = compat_noop,
};
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index b3986bc..f3f36f6 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -223,7 +223,7 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)
if (!desc->depth++) {
desc->status |= IRQ_DISABLED;
- desc->irq_data.chip->disable(irq);
+ desc->irq_data.chip->irq_disable(&desc->irq_data);
}
}
@@ -919,10 +919,10 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
/* If this was the last handler, shut down the IRQ line: */
if (!desc->action) {
desc->status |= IRQ_DISABLED;
- if (desc->irq_data.chip->shutdown)
- desc->irq_data.chip->shutdown(irq);
+ if (desc->irq_data.chip->irq_shutdown)
+ desc->irq_data.chip->irq_shutdown(&desc->irq_data);
else
- desc->irq_data.chip->disable(irq);
+ desc->irq_data.chip->irq_disable(&desc->irq_data);
}
#ifdef CONFIG_SMP
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
index 36c2c92..9ee704d 100644
--- a/kernel/irq/spurious.c
+++ b/kernel/irq/spurious.c
@@ -254,7 +254,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED;
desc->depth++;
- desc->irq_data.chip->disable(irq);
+ desc->irq_data.chip->irq_disable(&desc->irq_data);
mod_timer(&poll_spurious_irq_timer,
jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 12/19] genirq; Provide compat handling for chip->startup()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (10 preceding siblings ...)
2010-09-27 12:45 ` [patch 11/19] genirq; Provide compat handling for chip->disable()/shutdown() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:33 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 13/19] genirq; Provide compat handling for chip->set_affinity() Thomas Gleixner
` (6 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-startup.patch --]
[-- Type: text/plain, Size: 3599 bytes --]
Wrap the old chip function startup() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/autoprobe.c | 4 ++--
kernel/irq/chip.c | 19 +++++++++++++------
kernel/irq/manage.c | 2 +-
3 files changed, 16 insertions(+), 9 deletions(-)
Index: linux-2.6-tip/kernel/irq/autoprobe.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/autoprobe.c
+++ linux-2.6-tip/kernel/irq/autoprobe.c
@@ -59,7 +59,7 @@ unsigned long probe_irq_on(void)
*/
if (desc->chip->set_type)
desc->chip->set_type(i, IRQ_TYPE_PROBE);
- desc->chip->startup(i);
+ desc->chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
@@ -76,7 +76,7 @@ unsigned long probe_irq_on(void)
raw_spin_lock_irq(&desc->lock);
if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
- if (desc->chip->startup(i))
+ if (desc->chip->irq_startup(&desc->irq_data))
desc->status |= IRQ_PENDING;
}
raw_spin_unlock_irq(&desc->lock);
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -308,11 +308,11 @@ static void default_disable(struct irq_d
/*
* default startup function
*/
-static unsigned int default_startup(unsigned int irq)
+static unsigned int default_startup(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
- desc->chip->irq_enable(&desc->irq_data);
+ desc->chip->irq_enable(data);
return 0;
}
@@ -368,6 +368,11 @@ static void compat_irq_shutdown(struct i
irq_data_to_desc(data)->chip->shutdown(data->irq);
}
+static unsigned int compat_irq_startup(struct irq_data *data)
+{
+ return irq_data_to_desc(data)->chip->startup(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -393,6 +398,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_disable = compat_irq_disable;
if (chip->shutdown)
chip->irq_shutdown = compat_irq_shutdown;
+ if (chip->startup)
+ chip->irq_startup = compat_irq_startup;
/*
* The real defaults
@@ -401,8 +408,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_enable = default_enable;
if (!chip->irq_disable)
chip->irq_disable = default_disable;
- if (!chip->startup)
- chip->startup = default_startup;
+ if (!chip->irq_startup)
+ chip->irq_startup = default_startup;
/*
* We use chip->irq_disable, when the user provided its own. When
* we have default_disable set for chip->irq_disable, then we need
@@ -790,7 +797,7 @@ __set_irq_handler(unsigned int irq, irq_
desc->status &= ~IRQ_DISABLED;
desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE;
desc->depth = 0;
- desc->chip->startup(irq);
+ desc->chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irqrestore(&desc->lock, flags);
chip_bus_sync_unlock(desc);
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -779,7 +779,7 @@ __setup_irq(unsigned int irq, struct irq
if (!(desc->status & IRQ_NOAUTOEN)) {
desc->depth = 0;
desc->status &= ~IRQ_DISABLED;
- desc->chip->startup(irq);
+ desc->chip->irq_startup(&desc->irq_data);
} else
/* Undo nested disables: */
desc->depth = 1;
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->startup()
2010-09-27 12:45 ` [patch 12/19] genirq; Provide compat handling for chip->startup() Thomas Gleixner
@ 2010-10-04 20:33 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:33 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 37e12df709f09eac17314d79a52190ac46746e33
Gitweb: http://git.kernel.org/tip/37e12df709f09eac17314d79a52190ac46746e33
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:38 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:44 +0200
genirq: Provide compat handling for chip->startup()
Wrap the old chip function startup() until the migration is complete and
the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.635152961@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/autoprobe.c | 4 ++--
kernel/irq/chip.c | 19 +++++++++++++------
kernel/irq/handle.c | 7 -------
kernel/irq/manage.c | 2 +-
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/kernel/irq/autoprobe.c b/kernel/irq/autoprobe.c
index 95806a4..7a46825 100644
--- a/kernel/irq/autoprobe.c
+++ b/kernel/irq/autoprobe.c
@@ -59,7 +59,7 @@ unsigned long probe_irq_on(void)
*/
if (desc->irq_data.chip->set_type)
desc->irq_data.chip->set_type(i, IRQ_TYPE_PROBE);
- desc->irq_data.chip->startup(i);
+ desc->irq_data.chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
}
@@ -76,7 +76,7 @@ unsigned long probe_irq_on(void)
raw_spin_lock_irq(&desc->lock);
if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
- if (desc->irq_data.chip->startup(i))
+ if (desc->irq_data.chip->irq_startup(&desc->irq_data))
desc->status |= IRQ_PENDING;
}
raw_spin_unlock_irq(&desc->lock);
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index b8a47f0..cce85f0 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -305,11 +305,11 @@ static void default_disable(struct irq_data *data)
/*
* default startup function
*/
-static unsigned int default_startup(unsigned int irq)
+static unsigned int default_startup(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
- desc->irq_data.chip->irq_enable(&desc->irq_data);
+ desc->irq_data.chip->irq_enable(data);
return 0;
}
@@ -365,6 +365,11 @@ static void compat_irq_shutdown(struct irq_data *data)
data->chip->shutdown(data->irq);
}
+static unsigned int compat_irq_startup(struct irq_data *data)
+{
+ return data->chip->startup(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -390,6 +395,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_disable = compat_irq_disable;
if (chip->shutdown)
chip->irq_shutdown = compat_irq_shutdown;
+ if (chip->startup)
+ chip->irq_startup = compat_irq_startup;
/*
* The real defaults
@@ -398,8 +405,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_enable = default_enable;
if (!chip->irq_disable)
chip->irq_disable = default_disable;
- if (!chip->startup)
- chip->startup = default_startup;
+ if (!chip->irq_startup)
+ chip->irq_startup = default_startup;
/*
* We use chip->irq_disable, when the user provided its own. When
* we have default_disable set for chip->irq_disable, then we need
@@ -786,7 +793,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
desc->status &= ~IRQ_DISABLED;
desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE;
desc->depth = 0;
- desc->irq_data.chip->startup(irq);
+ desc->irq_data.chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irqrestore(&desc->lock, flags);
chip_bus_sync_unlock(desc);
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 60e25c4..8d0697f 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -311,11 +311,6 @@ static unsigned int noop_ret(struct irq_data *data)
static void compat_noop(unsigned int irq) { }
-static unsigned int compat_noop_ret(unsigned int irq)
-{
- return 0;
-}
-
/*
* Generic no controller implementation
*/
@@ -326,7 +321,6 @@ struct irq_chip no_irq_chip = {
.irq_enable = noop,
.irq_disable = noop,
.irq_ack = ack_bad,
- .startup = compat_noop_ret,
.end = compat_noop,
};
@@ -343,7 +337,6 @@ struct irq_chip dummy_irq_chip = {
.irq_ack = noop,
.irq_mask = noop,
.irq_unmask = noop,
- .startup = compat_noop_ret,
.end = compat_noop,
};
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index f3f36f6..31d7678 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -779,7 +779,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
if (!(desc->status & IRQ_NOAUTOEN)) {
desc->depth = 0;
desc->status &= ~IRQ_DISABLED;
- desc->irq_data.chip->startup(irq);
+ desc->irq_data.chip->irq_startup(&desc->irq_data);
} else
/* Undo nested disables: */
desc->depth = 1;
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 13/19] genirq; Provide compat handling for chip->set_affinity()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (11 preceding siblings ...)
2010-09-27 12:45 ` [patch 12/19] genirq; Provide compat handling for chip->startup() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:34 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 14/19] genirq; Provide compat handling for chip->set_type() Thomas Gleixner
` (5 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-set-affinity.patch --]
[-- Type: text/plain, Size: 4457 bytes --]
Wrap the old chip function set_affinity() until the migration is
complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 8 ++++++++
kernel/irq/manage.c | 11 ++++++-----
kernel/irq/migration.c | 6 ++++--
kernel/irq/proc.c | 2 +-
4 files changed, 19 insertions(+), 8 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -373,6 +373,12 @@ static unsigned int compat_irq_startup(s
return irq_data_to_desc(data)->chip->startup(data->irq);
}
+static int compat_irq_set_affinity(struct irq_data *data,
+ const struct cpumask *dest, bool force)
+{
+ return irq_data_to_desc(data)->chip->set_affinity(data->irq, dest);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -439,6 +445,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_mask_ack = compat_irq_mask_ack;
if (chip->eoi)
chip->irq_eoi = compat_irq_eoi;
+ if (chip->set_affinity)
+ chip->irq_set_affinity = compat_irq_set_affinity;
}
static inline void mask_ack_irq(struct irq_desc *desc)
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -74,7 +74,7 @@ int irq_can_set_affinity(unsigned int ir
struct irq_desc *desc = irq_to_desc(irq);
if (CHECK_IRQ_PER_CPU(desc->status) || !desc->chip ||
- !desc->chip->set_affinity)
+ !desc->chip->irq_set_affinity)
return 0;
return 1;
@@ -109,16 +109,17 @@ void irq_set_thread_affinity(struct irq_
int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
{
struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_chip *chip = desc->chip;
unsigned long flags;
- if (!desc->chip->set_affinity)
+ if (!chip->irq_set_affinity)
return -EINVAL;
raw_spin_lock_irqsave(&desc->lock, flags);
#ifdef CONFIG_GENERIC_PENDING_IRQ
if (desc->status & IRQ_MOVE_PCNTXT) {
- if (!desc->chip->set_affinity(irq, cpumask)) {
+ if (!chip->irq_set_affinity(&desc->irq_data, cpumask, false)) {
cpumask_copy(desc->affinity, cpumask);
irq_set_thread_affinity(desc);
}
@@ -128,7 +129,7 @@ int irq_set_affinity(unsigned int irq, c
cpumask_copy(desc->pending_mask, cpumask);
}
#else
- if (!desc->chip->set_affinity(irq, cpumask)) {
+ if (!chip->irq_set_affinity(&dest->irq_data, cpumask, false)) {
cpumask_copy(desc->affinity, cpumask);
irq_set_thread_affinity(desc);
}
@@ -177,7 +178,7 @@ static int setup_affinity(unsigned int i
cpumask_and(desc->affinity, cpu_online_mask, irq_default_affinity);
set_affinity:
- desc->chip->set_affinity(irq, desc->affinity);
+ desc->chip->irq_set_affinity(&desc->irq_data, desc->affinity, false);
return 0;
}
Index: linux-2.6-tip/kernel/irq/migration.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/migration.c
+++ linux-2.6-tip/kernel/irq/migration.c
@@ -7,6 +7,7 @@
void move_masked_irq(int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_chip *chip = desc->chip;
if (likely(!(desc->status & IRQ_MOVE_PENDING)))
return;
@@ -24,7 +25,7 @@ void move_masked_irq(int irq)
if (unlikely(cpumask_empty(desc->pending_mask)))
return;
- if (!desc->chip->set_affinity)
+ if (!chip->irq_set_affinity)
return;
assert_raw_spin_locked(&desc->lock);
@@ -43,7 +44,8 @@ void move_masked_irq(int irq)
*/
if (likely(cpumask_any_and(desc->pending_mask, cpu_online_mask)
< nr_cpu_ids))
- if (!desc->chip->set_affinity(irq, desc->pending_mask)) {
+ if (!chip->irq_set_affinity(&desc->irq_data,
+ desc->pending_mask, false)) {
cpumask_copy(desc->affinity, desc->pending_mask);
irq_set_thread_affinity(desc);
}
Index: linux-2.6-tip/kernel/irq/proc.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/proc.c
+++ linux-2.6-tip/kernel/irq/proc.c
@@ -65,7 +65,7 @@ static ssize_t irq_affinity_proc_write(s
cpumask_var_t new_value;
int err;
- if (!irq_to_desc(irq)->chip->set_affinity || no_irq_affinity ||
+ if (!irq_to_desc(irq)->chip->irq_set_affinity || no_irq_affinity ||
irq_balancing_disabled(irq))
return -EIO;
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->set_affinity()
2010-09-27 12:45 ` [patch 13/19] genirq; Provide compat handling for chip->set_affinity() Thomas Gleixner
@ 2010-10-04 20:34 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:34 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: c96b3b3c448592a0b87ef20306deb8b1fb4878c7
Gitweb: http://git.kernel.org/tip/c96b3b3c448592a0b87ef20306deb8b1fb4878c7
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:41 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:46 +0200
genirq: Provide compat handling for chip->set_affinity()
Wrap the old chip function set_affinity() until the migration is
complete and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.732894108@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 8 ++++++++
kernel/irq/manage.c | 11 ++++++-----
kernel/irq/migration.c | 6 ++++--
kernel/irq/proc.c | 2 +-
4 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index cce85f0..df51792 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -370,6 +370,12 @@ static unsigned int compat_irq_startup(struct irq_data *data)
return data->chip->startup(data->irq);
}
+static int compat_irq_set_affinity(struct irq_data *data,
+ const struct cpumask *dest, bool force)
+{
+ return data->chip->set_affinity(data->irq, dest);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -436,6 +442,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_mask_ack = compat_irq_mask_ack;
if (chip->eoi)
chip->irq_eoi = compat_irq_eoi;
+ if (chip->set_affinity)
+ chip->irq_set_affinity = compat_irq_set_affinity;
}
static inline void mask_ack_irq(struct irq_desc *desc)
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 31d7678..305a60f 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -74,7 +74,7 @@ int irq_can_set_affinity(unsigned int irq)
struct irq_desc *desc = irq_to_desc(irq);
if (CHECK_IRQ_PER_CPU(desc->status) || !desc->irq_data.chip ||
- !desc->irq_data.chip->set_affinity)
+ !desc->irq_data.chip->irq_set_affinity)
return 0;
return 1;
@@ -109,16 +109,17 @@ void irq_set_thread_affinity(struct irq_desc *desc)
int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
{
struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_chip *chip = desc->irq_data.chip;
unsigned long flags;
- if (!desc->irq_data.chip->set_affinity)
+ if (!chip->irq_set_affinity)
return -EINVAL;
raw_spin_lock_irqsave(&desc->lock, flags);
#ifdef CONFIG_GENERIC_PENDING_IRQ
if (desc->status & IRQ_MOVE_PCNTXT) {
- if (!desc->irq_data.chip->set_affinity(irq, cpumask)) {
+ if (!chip->irq_set_affinity(&desc->irq_data, cpumask, false)) {
cpumask_copy(desc->irq_data.affinity, cpumask);
irq_set_thread_affinity(desc);
}
@@ -128,7 +129,7 @@ int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
cpumask_copy(desc->pending_mask, cpumask);
}
#else
- if (!desc->irq_data.chip->set_affinity(irq, cpumask)) {
+ if (!chip->irq_set_affinity(&desc->irq_data, cpumask, false)) {
cpumask_copy(desc->irq_data.affinity, cpumask);
irq_set_thread_affinity(desc);
}
@@ -177,7 +178,7 @@ static int setup_affinity(unsigned int irq, struct irq_desc *desc)
cpumask_and(desc->irq_data.affinity, cpu_online_mask, irq_default_affinity);
set_affinity:
- desc->irq_data.chip->set_affinity(irq, desc->irq_data.affinity);
+ desc->irq_data.chip->irq_set_affinity(&desc->irq_data, desc->irq_data.affinity, false);
return 0;
}
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
index 7888e5d..1d25419 100644
--- a/kernel/irq/migration.c
+++ b/kernel/irq/migration.c
@@ -7,6 +7,7 @@
void move_masked_irq(int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_chip *chip = desc->irq_data.chip;
if (likely(!(desc->status & IRQ_MOVE_PENDING)))
return;
@@ -24,7 +25,7 @@ void move_masked_irq(int irq)
if (unlikely(cpumask_empty(desc->pending_mask)))
return;
- if (!desc->irq_data.chip->set_affinity)
+ if (!chip->irq_set_affinity)
return;
assert_raw_spin_locked(&desc->lock);
@@ -43,7 +44,8 @@ void move_masked_irq(int irq)
*/
if (likely(cpumask_any_and(desc->pending_mask, cpu_online_mask)
< nr_cpu_ids))
- if (!desc->irq_data.chip->set_affinity(irq, desc->pending_mask)) {
+ if (!chip->irq_set_affinity(&desc->irq_data,
+ desc->pending_mask, false)) {
cpumask_copy(desc->irq_data.affinity, desc->pending_mask);
irq_set_thread_affinity(desc);
}
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c
index 9b0da94..d9fddf9 100644
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -65,7 +65,7 @@ static ssize_t irq_affinity_proc_write(struct file *file,
cpumask_var_t new_value;
int err;
- if (!irq_to_desc(irq)->irq_data.chip->set_affinity || no_irq_affinity ||
+ if (!irq_to_desc(irq)->irq_data.chip->irq_set_affinity || no_irq_affinity ||
irq_balancing_disabled(irq))
return -EIO;
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 14/19] genirq; Provide compat handling for chip->set_type()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (12 preceding siblings ...)
2010-09-27 12:45 ` [patch 13/19] genirq; Provide compat handling for chip->set_affinity() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:34 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 15/19] genirq; Provide compat handling for chip->set_wake() Thomas Gleixner
` (4 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-set-type.patch --]
[-- Type: text/plain, Size: 2925 bytes --]
Wrap the old chip function set_type() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/autoprobe.c | 5 +++--
kernel/irq/chip.c | 7 +++++++
kernel/irq/manage.c | 10 +++++-----
3 files changed, 15 insertions(+), 7 deletions(-)
Index: linux-2.6-tip/kernel/irq/autoprobe.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/autoprobe.c
+++ linux-2.6-tip/kernel/irq/autoprobe.c
@@ -57,8 +57,9 @@ unsigned long probe_irq_on(void)
* Some chips need to know about probing in
* progress:
*/
- if (desc->chip->set_type)
- desc->chip->set_type(i, IRQ_TYPE_PROBE);
+ if (desc->chip->irq_set_type)
+ desc->chip->irq_set_type(&desc->irq_data,
+ IRQ_TYPE_PROBE);
desc->chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -379,6 +379,11 @@ static int compat_irq_set_affinity(struc
return irq_data_to_desc(data)->chip->set_affinity(data->irq, dest);
}
+static int compat_irq_set_type(struct irq_data *data, unsigned int type)
+{
+ return irq_data_to_desc(data)->chip->set_type(data->irq, type);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -447,6 +452,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_eoi = compat_irq_eoi;
if (chip->set_affinity)
chip->irq_set_affinity = compat_irq_set_affinity;
+ if (chip->set_type)
+ chip->irq_set_type = compat_irq_set_type;
}
static inline void mask_ack_irq(struct irq_desc *desc)
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -429,12 +429,12 @@ void compat_irq_chip_set_default_handler
}
int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
- unsigned long flags)
+ unsigned long flags)
{
int ret;
struct irq_chip *chip = desc->chip;
- if (!chip || !chip->set_type) {
+ if (!chip || !chip->irq_set_type) {
/*
* IRQF_TRIGGER_* but the PIC does not support multiple
* flow-types?
@@ -445,11 +445,11 @@ int __irq_set_trigger(struct irq_desc *d
}
/* caller masked out all except trigger mode flags */
- ret = chip->set_type(irq, flags);
+ ret = chip->irq_set_type(&desc->irq_data, flags);
if (ret)
- pr_err("setting trigger mode %d for irq %u failed (%pF)\n",
- (int)flags, irq, chip->set_type);
+ pr_err("setting trigger mode %lu for irq %u failed (%pF)\n",
+ flags, irq, chip->irq_set_type);
else {
if (flags & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
flags |= IRQ_LEVEL;
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->set_type()
2010-09-27 12:45 ` [patch 14/19] genirq; Provide compat handling for chip->set_type() Thomas Gleixner
@ 2010-10-04 20:34 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:34 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: b2ba2c30033c10cca2454f8b44bf98f5249e61c6
Gitweb: http://git.kernel.org/tip/b2ba2c30033c10cca2454f8b44bf98f5249e61c6
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:47 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:47 +0200
genirq: Provide compat handling for chip->set_type()
Wrap the old chip function set_type() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.832261548@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/autoprobe.c | 5 +++--
kernel/irq/chip.c | 7 +++++++
kernel/irq/manage.c | 10 +++++-----
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/kernel/irq/autoprobe.c b/kernel/irq/autoprobe.c
index 7a46825..505798f 100644
--- a/kernel/irq/autoprobe.c
+++ b/kernel/irq/autoprobe.c
@@ -57,8 +57,9 @@ unsigned long probe_irq_on(void)
* Some chips need to know about probing in
* progress:
*/
- if (desc->irq_data.chip->set_type)
- desc->irq_data.chip->set_type(i, IRQ_TYPE_PROBE);
+ if (desc->irq_data.chip->irq_set_type)
+ desc->irq_data.chip->irq_set_type(&desc->irq_data,
+ IRQ_TYPE_PROBE);
desc->irq_data.chip->irq_startup(&desc->irq_data);
}
raw_spin_unlock_irq(&desc->lock);
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index df51792..b7dd02a 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -376,6 +376,11 @@ static int compat_irq_set_affinity(struct irq_data *data,
return data->chip->set_affinity(data->irq, dest);
}
+static int compat_irq_set_type(struct irq_data *data, unsigned int type)
+{
+ return data->chip->set_type(data->irq, type);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -444,6 +449,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_eoi = compat_irq_eoi;
if (chip->set_affinity)
chip->irq_set_affinity = compat_irq_set_affinity;
+ if (chip->set_type)
+ chip->irq_set_type = compat_irq_set_type;
}
static inline void mask_ack_irq(struct irq_desc *desc)
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 305a60f..3618362 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -430,12 +430,12 @@ void compat_irq_chip_set_default_handler(struct irq_desc *desc)
}
int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
- unsigned long flags)
+ unsigned long flags)
{
int ret;
struct irq_chip *chip = desc->irq_data.chip;
- if (!chip || !chip->set_type) {
+ if (!chip || !chip->irq_set_type) {
/*
* IRQF_TRIGGER_* but the PIC does not support multiple
* flow-types?
@@ -446,11 +446,11 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
}
/* caller masked out all except trigger mode flags */
- ret = chip->set_type(irq, flags);
+ ret = chip->irq_set_type(&desc->irq_data, flags);
if (ret)
- pr_err("setting trigger mode %d for irq %u failed (%pF)\n",
- (int)flags, irq, chip->set_type);
+ pr_err("setting trigger mode %lu for irq %u failed (%pF)\n",
+ flags, irq, chip->irq_set_type);
else {
if (flags & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
flags |= IRQ_LEVEL;
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 15/19] genirq; Provide compat handling for chip->set_wake()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (13 preceding siblings ...)
2010-09-27 12:45 ` [patch 14/19] genirq; Provide compat handling for chip->set_type() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:34 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 16/19] genirq; Provide compat handling for chip->retrigger() Thomas Gleixner
` (3 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-set-wake.patch --]
[-- Type: text/plain, Size: 1659 bytes --]
Wrap the old chip function set_wake() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 7 +++++++
kernel/irq/manage.c | 4 ++--
2 files changed, 9 insertions(+), 2 deletions(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -384,6 +384,11 @@ static int compat_irq_set_type(struct ir
return irq_data_to_desc(data)->chip->set_type(data->irq, type);
}
+static int compat_irq_set_wake(struct irq_data *data, unsigned int on)
+{
+ return irq_data_to_desc(data)->chip->set_wake(data->irq, on);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -454,6 +459,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_set_affinity = compat_irq_set_affinity;
if (chip->set_type)
chip->irq_set_type = compat_irq_set_type;
+ if (chip->set_wake)
+ chip->irq_set_wake = compat_irq_set_wake;
}
static inline void mask_ack_irq(struct irq_desc *desc)
Index: linux-2.6-tip/kernel/irq/manage.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/manage.c
+++ linux-2.6-tip/kernel/irq/manage.c
@@ -336,8 +336,8 @@ static int set_irq_wake_real(unsigned in
struct irq_desc *desc = irq_to_desc(irq);
int ret = -ENXIO;
- if (desc->chip->set_wake)
- ret = desc->chip->set_wake(irq, on);
+ if (desc->chip->irq_set_wake)
+ ret = desc->chip->irq_set_wake(&desc->irq_data, on);
return ret;
}
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->set_wake()
2010-09-27 12:45 ` [patch 15/19] genirq; Provide compat handling for chip->set_wake() Thomas Gleixner
@ 2010-10-04 20:34 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:34 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 2f7e99bb9be6a2d8d7b808dc86037710cc8b7bf1
Gitweb: http://git.kernel.org/tip/2f7e99bb9be6a2d8d7b808dc86037710cc8b7bf1
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:50 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:48 +0200
genirq: Provide compat handling for chip->set_wake()
Wrap the old chip function set_wake() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121842.927527393@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 7 +++++++
kernel/irq/manage.c | 4 ++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index b7dd02a..8775dd3 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -381,6 +381,11 @@ static int compat_irq_set_type(struct irq_data *data, unsigned int type)
return data->chip->set_type(data->irq, type);
}
+static int compat_irq_set_wake(struct irq_data *data, unsigned int on)
+{
+ return data->chip->set_wake(data->irq, on);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -451,6 +456,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_set_affinity = compat_irq_set_affinity;
if (chip->set_type)
chip->irq_set_type = compat_irq_set_type;
+ if (chip->set_wake)
+ chip->irq_set_wake = compat_irq_set_wake;
}
static inline void mask_ack_irq(struct irq_desc *desc)
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 3618362..644e8d5 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -337,8 +337,8 @@ static int set_irq_wake_real(unsigned int irq, unsigned int on)
struct irq_desc *desc = irq_to_desc(irq);
int ret = -ENXIO;
- if (desc->irq_data.chip->set_wake)
- ret = desc->irq_data.chip->set_wake(irq, on);
+ if (desc->irq_data.chip->irq_set_wake)
+ ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on);
return ret;
}
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 16/19] genirq; Provide compat handling for chip->retrigger()
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (14 preceding siblings ...)
2010-09-27 12:45 ` [patch 15/19] genirq; Provide compat handling for chip->set_wake() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-10-04 20:35 ` [tip:irq/core] genirq: " tip-bot for Thomas Gleixner
2010-09-27 12:45 ` [patch 17/19] genirq: Switch dummy_chip and no_irq_chip to new functions Thomas Gleixner
` (2 subsequent siblings)
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-wrap-chip-retrigger.patch --]
[-- Type: text/plain, Size: 1792 bytes --]
Wrap the old chip function retrigger() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/chip.c | 7 +++++++
kernel/irq/resend.c | 3 ++-
2 files changed, 9 insertions(+), 1 deletion(-)
Index: linux-2.6-tip/kernel/irq/chip.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/chip.c
+++ linux-2.6-tip/kernel/irq/chip.c
@@ -389,6 +389,11 @@ static int compat_irq_set_wake(struct ir
return irq_data_to_desc(data)->chip->set_wake(data->irq, on);
}
+static int compat_irq_retrigger(struct irq_data *data)
+{
+ return irq_data_to_desc(data)->chip->retrigger(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
irq_data_to_desc(data)->chip->bus_lock(data->irq);
@@ -461,6 +466,8 @@ void irq_chip_set_defaults(struct irq_ch
chip->irq_set_type = compat_irq_set_type;
if (chip->set_wake)
chip->irq_set_wake = compat_irq_set_wake;
+ if (chip->retrigger)
+ chip->irq_retrigger = compat_irq_retrigger;
}
static inline void mask_ack_irq(struct irq_desc *desc)
Index: linux-2.6-tip/kernel/irq/resend.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/resend.c
+++ linux-2.6-tip/kernel/irq/resend.c
@@ -70,7 +70,8 @@ void check_irq_resend(struct irq_desc *d
if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
- if (!desc->chip->retrigger || !desc->chip->retrigger(irq)) {
+ if (!desc->chip->irq_retrigger ||
+ !desc->chip->irq_retrigger(&desc->irq_data)) {
#ifdef CONFIG_HARDIRQS_SW_RESEND
/* Set it pending and activate the softirq: */
set_bit(irq, irqs_resend);
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] genirq: Provide compat handling for chip->retrigger()
2010-09-27 12:45 ` [patch 16/19] genirq; Provide compat handling for chip->retrigger() Thomas Gleixner
@ 2010-10-04 20:35 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:35 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 21e2b8c62cca8f7dbec0c8c131ca1637e4a5670f
Gitweb: http://git.kernel.org/tip/21e2b8c62cca8f7dbec0c8c131ca1637e4a5670f
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:53 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 12:43:50 +0200
genirq: Provide compat handling for chip->retrigger()
Wrap the old chip function retrigger() until the migration is complete
and the old chip functions are removed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121843.025801092@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
kernel/irq/chip.c | 7 +++++++
kernel/irq/resend.c | 4 ++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 8775dd3..f2c4d28 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -386,6 +386,11 @@ static int compat_irq_set_wake(struct irq_data *data, unsigned int on)
return data->chip->set_wake(data->irq, on);
}
+static int compat_irq_retrigger(struct irq_data *data)
+{
+ return data->chip->retrigger(data->irq);
+}
+
static void compat_bus_lock(struct irq_data *data)
{
data->chip->bus_lock(data->irq);
@@ -458,6 +463,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
chip->irq_set_type = compat_irq_set_type;
if (chip->set_wake)
chip->irq_set_wake = compat_irq_set_wake;
+ if (chip->retrigger)
+ chip->irq_retrigger = compat_irq_retrigger;
}
static inline void mask_ack_irq(struct irq_desc *desc)
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
index a798a23..891115a 100644
--- a/kernel/irq/resend.c
+++ b/kernel/irq/resend.c
@@ -70,8 +70,8 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
- if (!desc->irq_data.chip->retrigger ||
- !desc->irq_data.chip->retrigger(irq)) {
+ if (!desc->irq_data.chip->irq_retrigger ||
+ !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
#ifdef CONFIG_HARDIRQS_SW_RESEND
/* Set it pending and activate the softirq: */
set_bit(irq, irqs_resend);
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 17/19] genirq: Switch dummy_chip and no_irq_chip to new functions
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (15 preceding siblings ...)
2010-09-27 12:45 ` [patch 16/19] genirq; Provide compat handling for chip->retrigger() Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-09-27 12:45 ` [patch 18/19] genirq: Provide Kconfig Thomas Gleixner
2010-09-27 12:46 ` [patch 19/19] x86: Use genirq Kconfig Thomas Gleixner
18 siblings, 0 replies; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-fixup-dummy-chip.patch --]
[-- Type: text/plain, Size: 1966 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/handle.c | 44 ++++++++++++++++++++++++--------------------
1 file changed, 24 insertions(+), 20 deletions(-)
Index: linux-2.6-tip/kernel/irq/handle.c
===================================================================
--- linux-2.6-tip.orig/kernel/irq/handle.c
+++ linux-2.6-tip/kernel/irq/handle.c
@@ -303,37 +303,41 @@ void clear_kstat_irqs(struct irq_desc *d
* What should we do if we get a hw irq event on an illegal vector?
* Each architecture has to answer this themself.
*/
-static void ack_bad(unsigned int irq)
+static void ack_bad(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_data_to_desc(data);
- print_irq_desc(irq, desc);
- ack_bad_irq(irq);
+ print_irq_desc(data->irq, desc);
+ ack_bad_irq(data->irq);
}
/*
* NOP functions
*/
-static void noop(unsigned int irq)
+static void noop(struct irq_data *data)
{
}
-static unsigned int noop_ret(unsigned int irq)
+static unsigned int noop_ret(struct irq_data *data)
{
return 0;
}
+static void compat_noop(unsigned int irq)
+{
+}
+
/*
* Generic no controller implementation
*/
struct irq_chip no_irq_chip = {
.name = "none",
- .startup = noop_ret,
- .shutdown = noop,
- .enable = noop,
- .disable = noop,
- .ack = ack_bad,
- .end = noop,
+ .irq_startup = noop_ret,
+ .irq_shutdown = noop,
+ .irq_enable = noop,
+ .irq_disable = noop,
+ .irq_ack = ack_bad,
+ .end = compat_noop,
};
/*
@@ -342,14 +346,14 @@ struct irq_chip no_irq_chip = {
*/
struct irq_chip dummy_irq_chip = {
.name = "dummy",
- .startup = noop_ret,
- .shutdown = noop,
- .enable = noop,
- .disable = noop,
- .ack = noop,
- .mask = noop,
- .unmask = noop,
- .end = noop,
+ .irq_startup = noop_ret,
+ .irq_shutdown = noop,
+ .irq_enable = noop,
+ .irq_disable = noop,
+ .irq_ack = noop,
+ .irq_mask = noop,
+ .irq_unmask = noop,
+ .end = compat_noop,
};
/*
^ permalink raw reply [flat|nested] 40+ messages in thread* [patch 18/19] genirq: Provide Kconfig
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (16 preceding siblings ...)
2010-09-27 12:45 ` [patch 17/19] genirq: Switch dummy_chip and no_irq_chip to new functions Thomas Gleixner
@ 2010-09-27 12:45 ` Thomas Gleixner
2010-09-27 16:43 ` Randy Dunlap
2010-10-04 20:28 ` [tip:irq/core] " tip-bot for Thomas Gleixner
2010-09-27 12:46 ` [patch 19/19] x86: Use genirq Kconfig Thomas Gleixner
18 siblings, 2 replies; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:45 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: genirq-provide-kconfig.patch --]
[-- Type: text/plain, Size: 1526 bytes --]
The generic irq Kconfig options are copied around all archs. Provide a
generic Kconfig file which can be included.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/irq/Kconfig | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
Index: linux-2.6-tip/kernel/irq/Kconfig
===================================================================
--- /dev/null
+++ linux-2.6-tip/kernel/irq/Kconfig
@@ -0,0 +1,49 @@
+#
+# Interrupt subsystem related configuration options
+#
+
+menu "Interrupt handling subsystem"
+
+config GENERIC_HARDIRQS
+ def_bool y
+
+config GENERIC_HARDIRQS_NO__DO_IRQ
+ def_bool y
+
+# Options selectable by the architecture code
+config HAVE_SPARSE_IRQ
+ def_bool n
+
+config GENERIC_IRQ_PROBE
+ def_bool n
+
+config GENERIC_PENDING_IRQ
+ def_bool n
+
+if SPARSE_IRQ && NUMA
+config NUMA_IRQ_DESC
+ def_bool n
+endif
+
+config AUTO_IRQ_AFFINITY
+ def_bool n
+
+config IRQ_PER_CPU
+ def_bool n
+
+config HARDIRQS_SW_RESEND
+ def_bool n
+
+config SPARSE_IRQ
+ bool "Support sparse irq numbering"
+ depends on HAVE_SPARSE_IRQ
+ ---help---
+ This enables support for sparse irqs. This is useful for distro
+ kernels that want to define a high CONFIG_NR_CPUS value but still
+ want to have low kernel memory footprint on smaller machines.
+
+ ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread
+ out the irq_desc[] array in a more NUMA-friendly way. )
+
+ If you don't know what to do here, say N.
+
^ permalink raw reply [flat|nested] 40+ messages in thread* Re: [patch 18/19] genirq: Provide Kconfig
2010-09-27 12:45 ` [patch 18/19] genirq: Provide Kconfig Thomas Gleixner
@ 2010-09-27 16:43 ` Randy Dunlap
2010-10-04 20:28 ` [tip:irq/core] " tip-bot for Thomas Gleixner
1 sibling, 0 replies; 40+ messages in thread
From: Randy Dunlap @ 2010-09-27 16:43 UTC (permalink / raw)
To: Thomas Gleixner
Cc: LKML, Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
On Mon, 27 Sep 2010 12:45:59 -0000 Thomas Gleixner wrote:
> The generic irq Kconfig options are copied around all archs. Provide a
> generic Kconfig file which can be included.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> kernel/irq/Kconfig | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> Index: linux-2.6-tip/kernel/irq/Kconfig
> ===================================================================
> --- /dev/null
> +++ linux-2.6-tip/kernel/irq/Kconfig
> @@ -0,0 +1,49 @@
> +#
> +# Interrupt subsystem related configuration options
> +#
> +
> +menu "Interrupt handling subsystem"
> +
> +config GENERIC_HARDIRQS
> + def_bool y
> +
> +config GENERIC_HARDIRQS_NO__DO_IRQ
> + def_bool y
> +
> +# Options selectable by the architecture code
> +config HAVE_SPARSE_IRQ
> + def_bool n
> +
> +config GENERIC_IRQ_PROBE
> + def_bool n
> +
> +config GENERIC_PENDING_IRQ
> + def_bool n
> +
> +if SPARSE_IRQ && NUMA
> +config NUMA_IRQ_DESC
> + def_bool n
> +endif
> +
> +config AUTO_IRQ_AFFINITY
> + def_bool n
> +
> +config IRQ_PER_CPU
> + def_bool n
> +
> +config HARDIRQS_SW_RESEND
> + def_bool n
> +
> +config SPARSE_IRQ
> + bool "Support sparse irq numbering"
> + depends on HAVE_SPARSE_IRQ
> + ---help---
> + This enables support for sparse irqs. This is useful for distro
> + kernels that want to define a high CONFIG_NR_CPUS value but still
> + want to have low kernel memory footprint on smaller machines.
> +
I see that this is just moved from another location, but it would be good if
the "irq"s above could be like the one below (IRQ or IRQs).
> + ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread
> + out the irq_desc[] array in a more NUMA-friendly way. )
> +
> + If you don't know what to do here, say N.
---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
^ permalink raw reply [flat|nested] 40+ messages in thread
* [tip:irq/core] genirq: Provide Kconfig
2010-09-27 12:45 ` [patch 18/19] genirq: Provide Kconfig Thomas Gleixner
2010-09-27 16:43 ` Randy Dunlap
@ 2010-10-04 20:28 ` tip-bot for Thomas Gleixner
1 sibling, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:28 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: d9817ebeeef16e01487549312c68540ca8f1561b
Gitweb: http://git.kernel.org/tip/d9817ebeeef16e01487549312c68540ca8f1561b
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:45:59 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 11:01:05 +0200
genirq: Provide Kconfig
The generic irq Kconfig options are copied around all archs. Provide a
generic Kconfig file which can be included.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121843.217333624@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
init/Kconfig | 2 +
kernel/irq/Kconfig | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/init/Kconfig b/init/Kconfig
index 2de5b1c..1df1a87 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -332,6 +332,8 @@ config AUDIT_TREE
depends on AUDITSYSCALL
select FSNOTIFY
+source "kernel/irq/Kconfig"
+
menu "RCU Subsystem"
choice
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
new file mode 100644
index 0000000..e0fc6cd
--- /dev/null
+++ b/kernel/irq/Kconfig
@@ -0,0 +1,54 @@
+config HAVE_GENERIC_HARDIRQS
+ def_bool n
+
+if HAVE_GENERIC_HARDIRQS
+menu "IRQ subsystem"
+#
+# Interrupt subsystem related configuration options
+#
+config GENERIC_HARDIRQS
+ def_bool y
+
+config GENERIC_HARDIRQS_NO__DO_IRQ
+ def_bool y
+
+# Options selectable by the architecture code
+config HAVE_SPARSE_IRQ
+ def_bool n
+
+config GENERIC_IRQ_PROBE
+ def_bool n
+
+config GENERIC_PENDING_IRQ
+ def_bool n
+
+if SPARSE_IRQ && NUMA
+config NUMA_IRQ_DESC
+ def_bool n
+endif
+
+config AUTO_IRQ_AFFINITY
+ def_bool n
+
+config IRQ_PER_CPU
+ def_bool n
+
+config HARDIRQS_SW_RESEND
+ def_bool n
+
+config SPARSE_IRQ
+ bool "Support sparse irq numbering"
+ depends on HAVE_SPARSE_IRQ
+ ---help---
+
+ Sparse irq numbering is useful for distro kernels that want
+ to define a high CONFIG_NR_CPUS value but still want to have
+ low kernel memory footprint on smaller machines.
+
+ ( Sparse irqs can also be beneficial on NUMA boxes, as they spread
+ out the interrupt descriptors in a more NUMA-friendly way. )
+
+ If you don't know what to do here, say N.
+
+endmenu
+endif
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [patch 19/19] x86: Use genirq Kconfig
2010-09-27 12:44 [patch 00/19] genirq: Cleanup and irq_chip functions overhaul Thomas Gleixner
` (17 preceding siblings ...)
2010-09-27 12:45 ` [patch 18/19] genirq: Provide Kconfig Thomas Gleixner
@ 2010-09-27 12:46 ` Thomas Gleixner
2010-10-04 20:28 ` [tip:irq/core] " tip-bot for Thomas Gleixner
18 siblings, 1 reply; 40+ messages in thread
From: Thomas Gleixner @ 2010-09-27 12:46 UTC (permalink / raw)
To: LKML; +Cc: Andrew Morton, linux-arch, Ingo Molnar, Peter Zijlstra
[-- Attachment #1: x86-use-genirq-kconfig.patch --]
[-- Type: text/plain, Size: 1837 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/Kconfig | 35 +++++------------------------------
1 file changed, 5 insertions(+), 30 deletions(-)
Index: linux-2.6-tip/arch/x86/Kconfig
===================================================================
--- linux-2.6-tip.orig/arch/x86/Kconfig
+++ linux-2.6-tip/arch/x86/Kconfig
@@ -59,6 +59,10 @@ config X86
select ANON_INODES
select HAVE_ARCH_KMEMCHECK
select HAVE_USER_RETURN_NOTIFIER
+ select HAVE_SPARSE_IRQ
+ select NUMA_IRQ_DESC if (SPARSE_IRQ && NUMA)
+ select GENERIC_IRQ_PROBE
+ select GENERIC_PENDING_IRQ if SMP
config INSTRUCTION_DECODER
def_bool (KPROBES || PERF_EVENTS)
@@ -200,20 +204,6 @@ config HAVE_INTEL_TXT
def_bool y
depends on EXPERIMENTAL && DMAR && ACPI
-# Use the generic interrupt handling code in kernel/irq/:
-config GENERIC_HARDIRQS
- def_bool y
-
-config GENERIC_HARDIRQS_NO__DO_IRQ
- def_bool y
-
-config GENERIC_IRQ_PROBE
- def_bool y
-
-config GENERIC_PENDING_IRQ
- def_bool y
- depends on GENERIC_HARDIRQS && SMP
-
config USE_GENERIC_SMP_HELPERS
def_bool y
depends on SMP
@@ -296,22 +286,7 @@ config X86_X2APIC
If you don't know what to do here, say N.
-config SPARSE_IRQ
- bool "Support sparse irq numbering"
- depends on PCI_MSI || HT_IRQ
- ---help---
- This enables support for sparse irqs. This is useful for distro
- kernels that want to define a high CONFIG_NR_CPUS value but still
- want to have low kernel memory footprint on smaller machines.
-
- ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread
- out the irq_desc[] array in a more NUMA-friendly way. )
-
- If you don't know what to do here, say N.
-
-config NUMA_IRQ_DESC
- def_bool y
- depends on SPARSE_IRQ && NUMA
+source "kernel/irq/Kconfig"
config X86_MPPARSE
bool "Enable MPS table" if ACPI
^ permalink raw reply [flat|nested] 40+ messages in thread* [tip:irq/core] x86: Use genirq Kconfig
2010-09-27 12:46 ` [patch 19/19] x86: Use genirq Kconfig Thomas Gleixner
@ 2010-10-04 20:28 ` tip-bot for Thomas Gleixner
0 siblings, 0 replies; 40+ messages in thread
From: tip-bot for Thomas Gleixner @ 2010-10-04 20:28 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, tglx, mingo
Commit-ID: 3bb9808e99bcc36eecb8e082bf70efb2a0bcdcb7
Gitweb: http://git.kernel.org/tip/3bb9808e99bcc36eecb8e082bf70efb2a0bcdcb7
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 27 Sep 2010 12:46:02 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 4 Oct 2010 11:01:15 +0200
x86: Use genirq Kconfig
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20100927121843.314600915@linutronix.de>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
---
arch/x86/Kconfig | 36 +++++-------------------------------
1 files changed, 5 insertions(+), 31 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index cea0cd9..3ec657f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -59,6 +59,11 @@ config X86
select ANON_INODES
select HAVE_ARCH_KMEMCHECK
select HAVE_USER_RETURN_NOTIFIER
+ select HAVE_GENERIC_HARDIRQS
+ select HAVE_SPARSE_IRQ
+ select NUMA_IRQ_DESC if (SPARSE_IRQ && NUMA)
+ select GENERIC_IRQ_PROBE
+ select GENERIC_PENDING_IRQ if SMP
config INSTRUCTION_DECODER
def_bool (KPROBES || PERF_EVENTS)
@@ -200,20 +205,6 @@ config HAVE_INTEL_TXT
def_bool y
depends on EXPERIMENTAL && DMAR && ACPI
-# Use the generic interrupt handling code in kernel/irq/:
-config GENERIC_HARDIRQS
- def_bool y
-
-config GENERIC_HARDIRQS_NO__DO_IRQ
- def_bool y
-
-config GENERIC_IRQ_PROBE
- def_bool y
-
-config GENERIC_PENDING_IRQ
- def_bool y
- depends on GENERIC_HARDIRQS && SMP
-
config USE_GENERIC_SMP_HELPERS
def_bool y
depends on SMP
@@ -296,23 +287,6 @@ config X86_X2APIC
If you don't know what to do here, say N.
-config SPARSE_IRQ
- bool "Support sparse irq numbering"
- depends on PCI_MSI || HT_IRQ
- ---help---
- This enables support for sparse irqs. This is useful for distro
- kernels that want to define a high CONFIG_NR_CPUS value but still
- want to have low kernel memory footprint on smaller machines.
-
- ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread
- out the irq_desc[] array in a more NUMA-friendly way. )
-
- If you don't know what to do here, say N.
-
-config NUMA_IRQ_DESC
- def_bool y
- depends on SPARSE_IRQ && NUMA
-
config X86_MPPARSE
bool "Enable MPS table" if ACPI
default y
^ permalink raw reply related [flat|nested] 40+ messages in thread