* [PATCH 13/62] microblaze: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 8:10 ` Yong Zhang
2011-09-07 8:10 ` [PATCH 17/62] powerpc: " Yong Zhang
` (27 subsequent siblings)
28 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel
Cc: tglx, mingo, Michal Simek, Joe Perches, Yong Zhang, John Stultz,
microblaze-uclinux
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
arch/microblaze/kernel/timer.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c
index e5550ce..bb86351 100644
--- a/arch/microblaze/kernel/timer.c
+++ b/arch/microblaze/kernel/timer.c
@@ -163,7 +163,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
static struct irqaction timer_irqaction = {
.handler = timer_interrupt,
- .flags = IRQF_DISABLED | IRQF_TIMER,
+ .flags = IRQF_TIMER,
.name = "timer",
.dev_id = &clockevent_microblaze_timer,
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* [PATCH 17/62] powerpc: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
2011-09-07 8:10 ` [PATCH 13/62] microblaze: irq: Remove IRQF_DISABLED Yong Zhang
@ 2011-09-07 8:10 ` Yong Zhang
2011-09-08 16:41 ` Arnd Bergmann
2011-09-07 8:10 ` [PATCH 18/62] score: " Yong Zhang
` (26 subsequent siblings)
28 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel
Cc: tglx, mingo, Benjamin Herrenschmidt, Paul Mackerras,
Arnd Bergmann, Geoff Levand, Yong Zhang, Milton Miller,
Michael Ellerman, Kumar Gala, Scott Wood, Meador Inge,
Grant Likely, linuxppc-dev, cbe-oss-dev
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
arch/powerpc/include/asm/floppy.h | 4 ++--
arch/powerpc/include/asm/xics.h | 4 ++--
arch/powerpc/kernel/smp.c | 2 +-
arch/powerpc/platforms/cell/beat.c | 2 +-
arch/powerpc/platforms/cell/celleb_scc_pciex.c | 2 +-
arch/powerpc/platforms/cell/iommu.c | 3 +--
arch/powerpc/platforms/cell/pmu.c | 2 +-
arch/powerpc/platforms/cell/spu_base.c | 9 +++------
arch/powerpc/platforms/powermac/pic.c | 1 -
arch/powerpc/platforms/powermac/smp.c | 4 ++--
arch/powerpc/platforms/ps3/device-init.c | 2 +-
arch/powerpc/sysdev/mpic.c | 2 --
arch/powerpc/sysdev/ppc4xx_soc.c | 2 +-
arch/powerpc/sysdev/xics/xics-common.c | 5 ++---
14 files changed, 18 insertions(+), 26 deletions(-)
diff --git a/arch/powerpc/include/asm/floppy.h b/arch/powerpc/include/asm/floppy.h
index 24bd34c..936a904 100644
--- a/arch/powerpc/include/asm/floppy.h
+++ b/arch/powerpc/include/asm/floppy.h
@@ -108,10 +108,10 @@ static int fd_request_irq(void)
{
if (can_use_virtual_dma)
return request_irq(FLOPPY_IRQ, floppy_hardint,
- IRQF_DISABLED, "floppy", NULL);
+ 0, "floppy", NULL);
else
return request_irq(FLOPPY_IRQ, floppy_interrupt,
- IRQF_DISABLED, "floppy", NULL);
+ 0, "floppy", NULL);
}
static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io)
diff --git a/arch/powerpc/include/asm/xics.h b/arch/powerpc/include/asm/xics.h
index b183a40..c78e58a 100644
--- a/arch/powerpc/include/asm/xics.h
+++ b/arch/powerpc/include/asm/xics.h
@@ -15,8 +15,8 @@
#define DEFAULT_PRIORITY 5
/*
- * Mark IPIs as higher priority so we can take them inside interrupts that
- * arent marked IRQF_DISABLED
+ * Mark IPIs as higher priority so we can take them inside interrupts
+ * FIXME: still true now?
*/
#define IPI_PRIORITY 4
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 7bf2187..1ff95e0 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -170,7 +170,7 @@ int smp_request_message_ipi(int virq, int msg)
return 1;
}
#endif
- err = request_irq(virq, smp_ipi_action[msg], IRQF_DISABLED|IRQF_PERCPU,
+ err = request_irq(virq, smp_ipi_action[msg], IRQF_PERCPU,
smp_ipi_name[msg], 0);
WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n",
virq, smp_ipi_name[msg], err);
diff --git a/arch/powerpc/platforms/cell/beat.c b/arch/powerpc/platforms/cell/beat.c
index 48c690e..14ebf59 100644
--- a/arch/powerpc/platforms/cell/beat.c
+++ b/arch/powerpc/platforms/cell/beat.c
@@ -230,7 +230,7 @@ static int __init beat_register_event(void)
}
ev->virq = virq;
- rc = request_irq(virq, ev->handler, IRQF_DISABLED,
+ rc = request_irq(virq, ev->handler, 0,
ev->typecode, NULL);
if (rc != 0) {
printk(KERN_ERR "Beat: failed to request virtual IRQ"
diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
index ae790ac..14be2bd 100644
--- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c
+++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
@@ -514,7 +514,7 @@ static __init int celleb_setup_pciex(struct device_node *node,
virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
oirq.size);
if (request_irq(virq, pciex_handle_internal_irq,
- IRQF_DISABLED, "pciex", (void *)phb)) {
+ 0, "pciex", (void *)phb)) {
pr_err("PCIEXC:Failed to request irq\n");
goto error;
}
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index 26a0671..afdcd5b 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -412,8 +412,7 @@ static void cell_iommu_enable_hardware(struct cbe_iommu *iommu)
IIC_IRQ_IOEX_ATI | (iommu->nid << IIC_IRQ_NODE_SHIFT));
BUG_ON(virq == NO_IRQ);
- ret = request_irq(virq, ioc_interrupt, IRQF_DISABLED,
- iommu->name, iommu);
+ ret = request_irq(virq, ioc_interrupt, 0, iommu->name, iommu);
BUG_ON(ret);
/* set the IOC segment table origin register (and turn on the iommu) */
diff --git a/arch/powerpc/platforms/cell/pmu.c b/arch/powerpc/platforms/cell/pmu.c
index 69ed0d7f..16dd36c 100644
--- a/arch/powerpc/platforms/cell/pmu.c
+++ b/arch/powerpc/platforms/cell/pmu.c
@@ -391,7 +391,7 @@ static int __init cbe_init_pm_irq(void)
}
rc = request_irq(irq, cbe_pm_irq,
- IRQF_DISABLED, "cbe-pmu-0", NULL);
+ 0, "cbe-pmu-0", NULL);
if (rc) {
printk("ERROR: Request for irq on node %d failed\n",
node);
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index 3675da7..e94d3ec 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -442,8 +442,7 @@ static int spu_request_irqs(struct spu *spu)
snprintf(spu->irq_c0, sizeof (spu->irq_c0), "spe%02d.0",
spu->number);
ret = request_irq(spu->irqs[0], spu_irq_class_0,
- IRQF_DISABLED,
- spu->irq_c0, spu);
+ 0, spu->irq_c0, spu);
if (ret)
goto bail0;
}
@@ -451,8 +450,7 @@ static int spu_request_irqs(struct spu *spu)
snprintf(spu->irq_c1, sizeof (spu->irq_c1), "spe%02d.1",
spu->number);
ret = request_irq(spu->irqs[1], spu_irq_class_1,
- IRQF_DISABLED,
- spu->irq_c1, spu);
+ 0, spu->irq_c1, spu);
if (ret)
goto bail1;
}
@@ -460,8 +458,7 @@ static int spu_request_irqs(struct spu *spu)
snprintf(spu->irq_c2, sizeof (spu->irq_c2), "spe%02d.2",
spu->number);
ret = request_irq(spu->irqs[2], spu_irq_class_2,
- IRQF_DISABLED,
- spu->irq_c2, spu);
+ 0, spu->irq_c2, spu);
if (ret)
goto bail2;
}
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 7667db4..3e62581 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -273,7 +273,6 @@ static struct irqaction xmon_action = {
static struct irqaction gatwick_cascade_action = {
.handler = gatwick_action,
- .flags = IRQF_DISABLED,
.name = "cascade",
};
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 9a521dc..9b6a820 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -200,7 +200,7 @@ static int psurge_secondary_ipi_init(void)
if (psurge_secondary_virq)
rc = request_irq(psurge_secondary_virq, psurge_ipi_intr,
- IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL);
+ IRQF_PERCPU, "IPI", NULL);
if (rc)
pr_err("Failed to setup secondary cpu IPI\n");
@@ -408,7 +408,7 @@ static int __init smp_psurge_kick_cpu(int nr)
static struct irqaction psurge_irqaction = {
.handler = psurge_ipi_intr,
- .flags = IRQF_DISABLED|IRQF_PERCPU,
+ .flags = IRQF_PERCPU,
.name = "primary IPI",
};
diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c
index 6c4b583..3f175e8 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -825,7 +825,7 @@ static int ps3_probe_thread(void *data)
spin_lock_init(&dev.lock);
- res = request_irq(irq, ps3_notification_interrupt, IRQF_DISABLED,
+ res = request_irq(irq, ps3_notification_interrupt, 0,
"ps3_notification", &dev);
if (res) {
pr_err("%s:%u: request_irq failed %d\n", __func__, __LINE__,
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index d5d3ff3..5216d3e 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -800,8 +800,6 @@ static void mpic_end_ipi(struct irq_data *d)
* IPIs are marked IRQ_PER_CPU. This has the side effect of
* preventing the IRQ_PENDING/IRQ_INPROGRESS logic from
* applying to them. We EOI them late to avoid re-entering.
- * We mark IPI's with IRQF_DISABLED as they must run with
- * irqs disabled.
*/
mpic_eoi(mpic);
}
diff --git a/arch/powerpc/sysdev/ppc4xx_soc.c b/arch/powerpc/sysdev/ppc4xx_soc.c
index d3d6ce3..0debcc3 100644
--- a/arch/powerpc/sysdev/ppc4xx_soc.c
+++ b/arch/powerpc/sysdev/ppc4xx_soc.c
@@ -115,7 +115,7 @@ static int __init ppc4xx_l2c_probe(void)
}
/* Install error handler */
- if (request_irq(irq, l2c_error_handler, IRQF_DISABLED, "L2C", 0) < 0) {
+ if (request_irq(irq, l2c_error_handler, 0, "L2C", 0) < 0) {
printk(KERN_ERR "Cannot install L2C error handler"
", cache is not enabled\n");
of_node_put(np);
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c
index 445c5a0..ae5cdc3 100644
--- a/arch/powerpc/sysdev/xics/xics-common.c
+++ b/arch/powerpc/sysdev/xics/xics-common.c
@@ -134,11 +134,10 @@ static void xics_request_ipi(void)
BUG_ON(ipi == NO_IRQ);
/*
- * IPIs are marked IRQF_DISABLED as they must run with irqs
- * disabled, and PERCPU. The handler was set in map.
+ * IPIs are marked IRQF_PERCPU. The handler was set in map.
*/
BUG_ON(request_irq(ipi, icp_ops->ipi_action,
- IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL));
+ IRQF_PERCPU, "IPI", NULL));
}
int __init xics_smp_probe(void)
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* [PATCH 18/62] score: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
2011-09-07 8:10 ` [PATCH 13/62] microblaze: irq: Remove IRQF_DISABLED Yong Zhang
2011-09-07 8:10 ` [PATCH 17/62] powerpc: " Yong Zhang
@ 2011-09-07 8:10 ` Yong Zhang
2011-09-07 8:10 ` [PATCH 24/62] xtensa: " Yong Zhang
` (25 subsequent siblings)
28 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel; +Cc: tglx, mingo, Chen Liqin, Lennox Wu, Yong Zhang
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
arch/score/kernel/time.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/score/kernel/time.c b/arch/score/kernel/time.c
index f0a43af..24770cd 100644
--- a/arch/score/kernel/time.c
+++ b/arch/score/kernel/time.c
@@ -41,7 +41,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
static struct irqaction timer_irq = {
.handler = timer_interrupt,
- .flags = IRQF_DISABLED | IRQF_TIMER,
+ .flags = IRQF_TIMER,
.name = "timer",
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* [PATCH 24/62] xtensa: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
` (2 preceding siblings ...)
2011-09-07 8:10 ` [PATCH 18/62] score: " Yong Zhang
@ 2011-09-07 8:10 ` Yong Zhang
2011-09-07 8:10 ` [PATCH 38/62] Input: " Yong Zhang
` (24 subsequent siblings)
28 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel; +Cc: tglx, mingo, Chris Zankel, Torben Hohn, Yong Zhang
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
arch/xtensa/kernel/time.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/arch/xtensa/kernel/time.c b/arch/xtensa/kernel/time.c
index f3e5eb4..2370229 100644
--- a/arch/xtensa/kernel/time.c
+++ b/arch/xtensa/kernel/time.c
@@ -54,7 +54,6 @@ static struct clocksource ccount_clocksource = {
static irqreturn_t timer_interrupt(int irq, void *dev_id);
static struct irqaction timer_irqaction = {
.handler = timer_interrupt,
- .flags = IRQF_DISABLED,
.name = "timer",
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* [PATCH 38/62] Input: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
` (3 preceding siblings ...)
2011-09-07 8:10 ` [PATCH 24/62] xtensa: " Yong Zhang
@ 2011-09-07 8:10 ` Yong Zhang
2011-09-07 23:21 ` Dmitry Torokhov
2011-09-07 8:10 ` [PATCH 39/62] ISDN: " Yong Zhang
` (23 subsequent siblings)
28 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel
Cc: tglx, mingo, Michael Hennerich, Dmitry Torokhov, Wan ZongShun,
Alessandro Rubini, Ben Dooks, Kukjin Kim, Lucas De Marchi,
Yong Zhang, Axel Lin, Eric Miao, Mark F. Brown, Ben Hutchings,
Krzysztof Hałasa, Julia Lawall, Sylvestre Ledru,
Christoph Fritz, Paul Mundt, Tejun Heo, device-drivers-devel,
linux-input, linux-arm-kernel
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
drivers/input/keyboard/adp5588-keys.c | 2 +-
drivers/input/keyboard/davinci_keyscan.c | 2 +-
drivers/input/keyboard/ep93xx_keypad.c | 2 +-
drivers/input/keyboard/imx_keypad.c | 2 +-
drivers/input/keyboard/jornada720_kbd.c | 2 +-
drivers/input/keyboard/matrix_keypad.c | 1 -
drivers/input/keyboard/pxa27x_keypad.c | 2 +-
drivers/input/keyboard/pxa930_rotary.c | 2 +-
drivers/input/keyboard/w90p910_keypad.c | 2 +-
drivers/input/misc/ixp4xx-beeper.c | 2 +-
drivers/input/mouse/pxa930_trkball.c | 2 +-
drivers/input/mouse/synaptics_i2c.c | 2 +-
drivers/input/touchscreen/atmel_tsadcc.c | 2 +-
drivers/input/touchscreen/h3600_ts_input.c | 4 ++--
drivers/input/touchscreen/hp680_ts_input.c | 2 +-
drivers/input/touchscreen/jornada720_ts.c | 2 +-
drivers/input/touchscreen/lpc32xx_ts.c | 2 +-
drivers/input/touchscreen/s3c2410_ts.c | 2 +-
drivers/input/touchscreen/w90p910_ts.c | 2 +-
19 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c
index 7b404e5..b570ed3 100644
--- a/drivers/input/keyboard/adp5588-keys.c
+++ b/drivers/input/keyboard/adp5588-keys.c
@@ -550,7 +550,7 @@ static int __devinit adp5588_probe(struct i2c_client *client,
}
error = request_irq(client->irq, adp5588_irq,
- IRQF_TRIGGER_FALLING | IRQF_DISABLED,
+ IRQF_TRIGGER_FALLING,
client->dev.driver->name, kpad);
if (error) {
dev_err(&client->dev, "irq %d busy?\n", client->irq);
diff --git a/drivers/input/keyboard/davinci_keyscan.c b/drivers/input/keyboard/davinci_keyscan.c
index cd89d17..9d82b3a 100644
--- a/drivers/input/keyboard/davinci_keyscan.c
+++ b/drivers/input/keyboard/davinci_keyscan.c
@@ -271,7 +271,7 @@ static int __init davinci_ks_probe(struct platform_device *pdev)
}
error = request_irq(davinci_ks->irq, davinci_ks_interrupt,
- IRQF_DISABLED, pdev->name, davinci_ks);
+ 0, pdev->name, davinci_ks);
if (error < 0) {
dev_err(dev, "unable to register davinci key scan interrupt\n");
goto fail5;
diff --git a/drivers/input/keyboard/ep93xx_keypad.c b/drivers/input/keyboard/ep93xx_keypad.c
index aa17e02..4662c5d 100644
--- a/drivers/input/keyboard/ep93xx_keypad.c
+++ b/drivers/input/keyboard/ep93xx_keypad.c
@@ -323,7 +323,7 @@ static int __devinit ep93xx_keypad_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, keypad);
err = request_irq(keypad->irq, ep93xx_keypad_irq_handler,
- IRQF_DISABLED, pdev->name, keypad);
+ 0, pdev->name, keypad);
if (err)
goto failed_free_dev;
diff --git a/drivers/input/keyboard/imx_keypad.c b/drivers/input/keyboard/imx_keypad.c
index d92c15c..4b093fa 100644
--- a/drivers/input/keyboard/imx_keypad.c
+++ b/drivers/input/keyboard/imx_keypad.c
@@ -510,7 +510,7 @@ static int __devinit imx_keypad_probe(struct platform_device *pdev)
/* Ensure that the keypad will stay dormant until opened */
imx_keypad_inhibit(keypad);
- error = request_irq(irq, imx_keypad_irq_handler, IRQF_DISABLED,
+ error = request_irq(irq, imx_keypad_irq_handler, 0,
pdev->name, keypad);
if (error) {
dev_err(&pdev->dev, "failed to request IRQ\n");
diff --git a/drivers/input/keyboard/jornada720_kbd.c b/drivers/input/keyboard/jornada720_kbd.c
index 2cd3e1d..0aa6740 100644
--- a/drivers/input/keyboard/jornada720_kbd.c
+++ b/drivers/input/keyboard/jornada720_kbd.c
@@ -129,7 +129,7 @@ static int __devinit jornada720_kbd_probe(struct platform_device *pdev)
err = request_irq(IRQ_GPIO0,
jornada720_kbd_interrupt,
- IRQF_DISABLED | IRQF_TRIGGER_FALLING,
+ IRQF_TRIGGER_FALLING,
"jornadakbd", pdev);
if (err) {
printk(KERN_INFO "jornadakbd720_kbd: Unable to grab IRQ\n");
diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
index b02e426..e2ae657 100644
--- a/drivers/input/keyboard/matrix_keypad.c
+++ b/drivers/input/keyboard/matrix_keypad.c
@@ -343,7 +343,6 @@ static int __devinit init_matrix_gpio(struct platform_device *pdev,
for (i = 0; i < pdata->num_row_gpios; i++) {
err = request_irq(gpio_to_irq(pdata->row_gpios[i]),
matrix_keypad_interrupt,
- IRQF_DISABLED |
IRQF_TRIGGER_RISING |
IRQF_TRIGGER_FALLING,
"matrix-keypad", keypad);
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index 4b0ec35..eca6ae6 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -535,7 +535,7 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
input_dev->evbit[0] |= BIT_MASK(EV_REL);
}
- error = request_irq(irq, pxa27x_keypad_irq_handler, IRQF_DISABLED,
+ error = request_irq(irq, pxa27x_keypad_irq_handler, 0,
pdev->name, keypad);
if (error) {
dev_err(&pdev->dev, "failed to request IRQ\n");
diff --git a/drivers/input/keyboard/pxa930_rotary.c b/drivers/input/keyboard/pxa930_rotary.c
index b7123a4..35451bf 100644
--- a/drivers/input/keyboard/pxa930_rotary.c
+++ b/drivers/input/keyboard/pxa930_rotary.c
@@ -148,7 +148,7 @@ static int __devinit pxa930_rotary_probe(struct platform_device *pdev)
r->input_dev = input_dev;
input_set_drvdata(input_dev, r);
- err = request_irq(irq, rotary_irq, IRQF_DISABLED,
+ err = request_irq(irq, rotary_irq, 0,
"enhanced rotary", r);
if (err) {
dev_err(&pdev->dev, "failed to request IRQ\n");
diff --git a/drivers/input/keyboard/w90p910_keypad.c b/drivers/input/keyboard/w90p910_keypad.c
index ee2bf6b..318586d 100644
--- a/drivers/input/keyboard/w90p910_keypad.c
+++ b/drivers/input/keyboard/w90p910_keypad.c
@@ -203,7 +203,7 @@ static int __devinit w90p910_keypad_probe(struct platform_device *pdev)
input_dev->keycode, input_dev->keybit);
error = request_irq(keypad->irq, w90p910_keypad_irq_handler,
- IRQF_DISABLED, pdev->name, keypad);
+ 0, pdev->name, keypad);
if (error) {
dev_err(&pdev->dev, "failed to request IRQ\n");
goto failed_put_clk;
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c
index 1f38302..302ab46 100644
--- a/drivers/input/misc/ixp4xx-beeper.c
+++ b/drivers/input/misc/ixp4xx-beeper.c
@@ -111,7 +111,7 @@ static int __devinit ixp4xx_spkr_probe(struct platform_device *dev)
input_dev->event = ixp4xx_spkr_event;
err = request_irq(IRQ_IXP4XX_TIMER2, &ixp4xx_spkr_interrupt,
- IRQF_DISABLED | IRQF_NO_SUSPEND, "ixp4xx-beeper",
+ IRQF_NO_SUSPEND, "ixp4xx-beeper",
(void *) dev->id);
if (err)
goto err_free_device;
diff --git a/drivers/input/mouse/pxa930_trkball.c b/drivers/input/mouse/pxa930_trkball.c
index 6c5d84f..ee3b0ca 100644
--- a/drivers/input/mouse/pxa930_trkball.c
+++ b/drivers/input/mouse/pxa930_trkball.c
@@ -183,7 +183,7 @@ static int __devinit pxa930_trkball_probe(struct platform_device *pdev)
/* held the module in reset, will be enabled in open() */
pxa930_trkball_disable(trkball);
- error = request_irq(irq, pxa930_trkball_interrupt, IRQF_DISABLED,
+ error = request_irq(irq, pxa930_trkball_interrupt, 0,
pdev->name, trkball);
if (error) {
dev_err(&pdev->dev, "failed to request irq: %d\n", error);
diff --git a/drivers/input/mouse/synaptics_i2c.c b/drivers/input/mouse/synaptics_i2c.c
index cba3c84..e28e9ce 100644
--- a/drivers/input/mouse/synaptics_i2c.c
+++ b/drivers/input/mouse/synaptics_i2c.c
@@ -570,7 +570,7 @@ static int __devinit synaptics_i2c_probe(struct i2c_client *client,
"Requesting IRQ: %d\n", touch->client->irq);
ret = request_irq(touch->client->irq, synaptics_i2c_irq,
- IRQF_DISABLED|IRQ_TYPE_EDGE_FALLING,
+ IRQ_TYPE_EDGE_FALLING,
DRIVER_NAME, touch);
if (ret) {
dev_warn(&touch->client->dev,
diff --git a/drivers/input/touchscreen/atmel_tsadcc.c b/drivers/input/touchscreen/atmel_tsadcc.c
index 432c69b..122a878 100644
--- a/drivers/input/touchscreen/atmel_tsadcc.c
+++ b/drivers/input/touchscreen/atmel_tsadcc.c
@@ -229,7 +229,7 @@ static int __devinit atmel_tsadcc_probe(struct platform_device *pdev)
goto err_release_mem;
}
- err = request_irq(ts_dev->irq, atmel_tsadcc_interrupt, IRQF_DISABLED,
+ err = request_irq(ts_dev->irq, atmel_tsadcc_interrupt, 0,
pdev->dev.driver->name, ts_dev);
if (err) {
dev_err(&pdev->dev, "failed to allocate irq.\n");
diff --git a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
index 211811a..6107e56 100644
--- a/drivers/input/touchscreen/h3600_ts_input.c
+++ b/drivers/input/touchscreen/h3600_ts_input.c
@@ -396,14 +396,14 @@ static int h3600ts_connect(struct serio *serio, struct serio_driver *drv)
set_GPIO_IRQ_edge(GPIO_BITSY_NPOWER_BUTTON, GPIO_RISING_EDGE);
if (request_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, action_button_handler,
- IRQF_SHARED | IRQF_DISABLED, "h3600_action", ts->dev)) {
+ IRQF_SHARED, "h3600_action", ts->dev)) {
printk(KERN_ERR "h3600ts.c: Could not allocate Action Button IRQ!\n");
err = -EBUSY;
goto fail1;
}
if (request_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, npower_button_handler,
- IRQF_SHARED | IRQF_DISABLED, "h3600_suspend", ts->dev)) {
+ IRQF_SHARED, "h3600_suspend", ts->dev)) {
printk(KERN_ERR "h3600ts.c: Could not allocate Power Button IRQ!\n");
err = -EBUSY;
goto fail2;
diff --git a/drivers/input/touchscreen/hp680_ts_input.c b/drivers/input/touchscreen/hp680_ts_input.c
index dd4e8f0..639a604 100644
--- a/drivers/input/touchscreen/hp680_ts_input.c
+++ b/drivers/input/touchscreen/hp680_ts_input.c
@@ -93,7 +93,7 @@ static int __init hp680_ts_init(void)
hp680_ts_dev->phys = "hp680_ts/input0";
if (request_irq(HP680_TS_IRQ, hp680_ts_interrupt,
- IRQF_DISABLED, MODNAME, 0) < 0) {
+ 0, MODNAME, 0) < 0) {
printk(KERN_ERR "hp680_touchscreen.c: Can't allocate irq %d\n",
HP680_TS_IRQ);
err = -EBUSY;
diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c
index 4b0a061..50076c2 100644
--- a/drivers/input/touchscreen/jornada720_ts.c
+++ b/drivers/input/touchscreen/jornada720_ts.c
@@ -127,7 +127,7 @@ static int __devinit jornada720_ts_probe(struct platform_device *pdev)
error = request_irq(IRQ_GPIO9,
jornada720_ts_interrupt,
- IRQF_DISABLED | IRQF_TRIGGER_RISING,
+ IRQF_TRIGGER_RISING,
"HP7XX Touchscreen driver", pdev);
if (error) {
printk(KERN_INFO "HP7XX TS : Unable to acquire irq!\n");
diff --git a/drivers/input/touchscreen/lpc32xx_ts.c b/drivers/input/touchscreen/lpc32xx_ts.c
index dcf803f..0a484ed 100644
--- a/drivers/input/touchscreen/lpc32xx_ts.c
+++ b/drivers/input/touchscreen/lpc32xx_ts.c
@@ -276,7 +276,7 @@ static int __devinit lpc32xx_ts_probe(struct platform_device *pdev)
input_set_drvdata(input, tsc);
error = request_irq(tsc->irq, lpc32xx_ts_interrupt,
- IRQF_DISABLED, pdev->name, tsc);
+ 0, pdev->name, tsc);
if (error) {
dev_err(&pdev->dev, "failed requesting interrupt\n");
goto err_put_clock;
diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
index 8feb7f3..64ce697 100644
--- a/drivers/input/touchscreen/s3c2410_ts.c
+++ b/drivers/input/touchscreen/s3c2410_ts.c
@@ -328,7 +328,7 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev)
ts.shift = info->oversampling_shift;
ts.features = platform_get_device_id(pdev)->driver_data;
- ret = request_irq(ts.irq_tc, stylus_irq, IRQF_DISABLED,
+ ret = request_irq(ts.irq_tc, stylus_irq, 0,
"s3c2410_ts_pen", ts.input);
if (ret) {
dev_err(dev, "cannot get TC interrupt\n");
diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
index 7a45d68..217aa51 100644
--- a/drivers/input/touchscreen/w90p910_ts.c
+++ b/drivers/input/touchscreen/w90p910_ts.c
@@ -279,7 +279,7 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
w90p910_ts->irq_num = platform_get_irq(pdev, 0);
if (request_irq(w90p910_ts->irq_num, w90p910_ts_interrupt,
- IRQF_DISABLED, "w90p910ts", w90p910_ts)) {
+ 0, "w90p910ts", w90p910_ts)) {
err = -EBUSY;
goto fail4;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* [PATCH 39/62] ISDN: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
` (4 preceding siblings ...)
2011-09-07 8:10 ` [PATCH 38/62] Input: " Yong Zhang
@ 2011-09-07 8:10 ` Yong Zhang
[not found] ` <1315383059-3673-30-git-send-email-yong.zhang0@gmail.com>
` (22 subsequent siblings)
28 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-07 8:10 UTC (permalink / raw)
To: linux-kernel
Cc: tglx, mingo, Armin Schindler, Karsten Keil, Yong Zhang, netdev
This flag is a NOOP and can be removed now.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
drivers/isdn/hardware/eicon/divasmain.c | 2 +-
drivers/isdn/sc/init.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c
index f332b60..8a0a831 100644
--- a/drivers/isdn/hardware/eicon/divasmain.c
+++ b/drivers/isdn/hardware/eicon/divasmain.c
@@ -481,7 +481,7 @@ void __inline__ outpp(void __iomem *addr, word p)
int diva_os_register_irq(void *context, byte irq, const char *name)
{
int result = request_irq(irq, diva_os_irq_wrapper,
- IRQF_DISABLED | IRQF_SHARED, name, context);
+ IRQF_SHARED, name, context);
return (result);
}
diff --git a/drivers/isdn/sc/init.c b/drivers/isdn/sc/init.c
index ca710ab..a3127fb 100644
--- a/drivers/isdn/sc/init.c
+++ b/drivers/isdn/sc/init.c
@@ -336,7 +336,7 @@ static int __init sc_init(void)
*/
sc_adapter[cinst]->interrupt = irq[b];
if (request_irq(sc_adapter[cinst]->interrupt, interrupt_handler,
- IRQF_DISABLED, interface->id,
+ 0, interface->id,
(void *)(unsigned long) cinst))
{
kfree(sc_adapter[cinst]->channel);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* RE: [PATCH 29/62] block: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-30-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 14:26 ` Miller, Mike (OS Dev)
0 siblings, 0 replies; 70+ messages in thread
From: Miller, Mike (OS Dev) @ 2011-09-07 14:26 UTC (permalink / raw)
To: Yong Zhang, linux-kernel@vger.kernel.org
Cc: tglx@linutronix.de, mingo@elte.hu, Chirag Kantharia,
Lucas De Marchi, Ralf Baechle, ISS StorageDev
> -----Original Message-----
> From: Yong Zhang [mailto:yong.zhang0@gmail.com]
> Sent: Wednesday, September 07, 2011 3:10 AM
> To: linux-kernel@vger.kernel.org
> Cc: tglx@linutronix.de; mingo@elte.hu; Miller, Mike (OS Dev); Chirag
> Kantharia; Lucas De Marchi; Yong Zhang; Ralf Baechle; ISS StorageDev
> Subject: [PATCH 29/62] block: irq: Remove IRQF_DISABLED
>
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Mike Miller <mike.miller@hp.com>
> ---
> drivers/block/cciss.c | 4 ++--
> drivers/block/cpqarray.c | 2 +-
> drivers/block/hd.c | 7 +------
> drivers/block/mg_disk.c | 2 +-
> 4 files changed, 5 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
> index 8f4ef65..ca23653 100644
> --- a/drivers/block/cciss.c
> +++ b/drivers/block/cciss.c
> @@ -4844,7 +4844,7 @@ static int cciss_request_irq(ctlr_info_t *h,
> {
> if (h->msix_vector || h->msi_vector) {
> if (!request_irq(h->intr[PERF_MODE_INT], msixhandler,
> - IRQF_DISABLED, h->devname, h))
> + 0, h->devname, h))
> return 0;
> dev_err(&h->pdev->dev, "Unable to get msi irq %d"
> " for %s\n", h->intr[PERF_MODE_INT],
> @@ -4853,7 +4853,7 @@ static int cciss_request_irq(ctlr_info_t *h,
> }
>
> if (!request_irq(h->intr[PERF_MODE_INT], intxhandler,
> - IRQF_DISABLED, h->devname, h))
> + 0, h->devname, h))
> return 0;
> dev_err(&h->pdev->dev, "Unable to get irq %d for %s\n",
> h->intr[PERF_MODE_INT], h->devname);
> diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
> index b2fceb5..33afbd7 100644
> --- a/drivers/block/cpqarray.c
> +++ b/drivers/block/cpqarray.c
> @@ -406,7 +406,7 @@ static int __devinit cpqarray_register_ctlr( int i,
> struct pci_dev *pdev)
> }
> hba[i]->access.set_intr_mask(hba[i], 0);
> if (request_irq(hba[i]->intr, do_ida_intr,
> - IRQF_DISABLED|IRQF_SHARED, hba[i]->devname, hba[i]))
> + IRQF_SHARED, hba[i]->devname, hba[i]))
> {
> printk(KERN_ERR "cpqarray: Unable to get irq %d for %s\n",
> hba[i]->intr, hba[i]->devname);
> diff --git a/drivers/block/hd.c b/drivers/block/hd.c
> index b52c9ca..c30d1f9 100644
> --- a/drivers/block/hd.c
> +++ b/drivers/block/hd.c
> @@ -696,11 +696,6 @@ static const struct block_device_operations hd_fops
> = {
> };
>
> /*
> - * This is the hard disk IRQ description. The IRQF_DISABLED in sa_flags
> - * means we run the IRQ-handler with interrupts disabled: this is bad
> for
> - * interrupt latency, but anything else has led to problems on some
> - * machines.
> - *
> * We enable interrupts in some of the routines after making sure it's
> * safe.
> */
> @@ -762,7 +757,7 @@ static int __init hd_init(void)
> p->cyl, p->head, p->sect);
> }
>
> - if (request_irq(HD_IRQ, hd_interrupt, IRQF_DISABLED, "hd", NULL)) {
> + if (request_irq(HD_IRQ, hd_interrupt, 0, "hd", NULL)) {
> printk("hd: unable to get IRQ%d for the hard disk driver\n",
> HD_IRQ);
> goto out1;
> diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
> index 76fa3de..3c80cba 100644
> --- a/drivers/block/mg_disk.c
> +++ b/drivers/block/mg_disk.c
> @@ -930,7 +930,7 @@ static int mg_probe(struct platform_device
> *plat_dev)
> goto probe_err_3b;
> }
> err = request_irq(host->irq, mg_irq,
> - IRQF_DISABLED | IRQF_TRIGGER_RISING,
> + IRQF_TRIGGER_RISING,
> MG_DEV_NAME, host);
> if (err) {
> printk(KERN_ERR "%s:%d fail (request_irq err=%d)\n",
> --
> 1.7.4.1
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 33/62] dmaengine: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-34-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 15:02 ` Vinod Koul
2011-09-11 21:38 ` Linus Walleij
1 sibling, 0 replies; 70+ messages in thread
From: Vinod Koul @ 2011-09-07 15:02 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Linus Walleij, mingo, tglx, Dan Williams,
linux-arm-kernel
On Wed, 2011-09-07 at 16:10 +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> drivers/dma/amba-pl08x.c | 2 +-
> drivers/dma/coh901318.c | 2 +-
> drivers/dma/shdma.c | 4 ++--
> 3 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
> index be21e3f..3688256 100644
> --- a/drivers/dma/amba-pl08x.c
> +++ b/drivers/dma/amba-pl08x.c
> @@ -1930,7 +1930,7 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
> writel(0x000000FF, pl08x->base + PL080_ERR_CLEAR);
> writel(0x000000FF, pl08x->base + PL080_TC_CLEAR);
>
> - ret = request_irq(adev->irq[0], pl08x_irq, IRQF_DISABLED,
> + ret = request_irq(adev->irq[0], pl08x_irq, 0,
> DRIVER_NAME, pl08x);
> if (ret) {
> dev_err(&adev->dev, "%s failed to request interrupt %d\n",
> diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c
> index 4234f41..1dd9455 100644
> --- a/drivers/dma/coh901318.c
> +++ b/drivers/dma/coh901318.c
> @@ -1506,7 +1506,7 @@ static int __init coh901318_probe(struct platform_device *pdev)
> if (irq < 0)
> goto err_no_irq;
>
> - err = request_irq(irq, dma_irq_handler, IRQF_DISABLED,
> + err = request_irq(irq, dma_irq_handler, 0,
> "coh901318", base);
> if (err) {
> dev_crit(&pdev->dev,
> diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c
> index 7f49235..8c137d2 100644
> --- a/drivers/dma/shdma.c
> +++ b/drivers/dma/shdma.c
> @@ -1106,7 +1106,7 @@ static void sh_dmae_chan_remove(struct sh_dmae_device *shdev)
> static int __init sh_dmae_probe(struct platform_device *pdev)
> {
> struct sh_dmae_pdata *pdata = pdev->dev.platform_data;
> - unsigned long irqflags = IRQF_DISABLED,
> + unsigned long irqflags = 0,
> chan_flag[SH_DMAC_MAX_CHANNELS] = {};
> int errirq, chan_irq[SH_DMAC_MAX_CHANNELS];
> int err, i, irq_cnt = 0, irqres = 0, irq_cap = 0;
> @@ -1266,7 +1266,7 @@ static int __init sh_dmae_probe(struct platform_device *pdev)
> IORESOURCE_IRQ_SHAREABLE)
> chan_flag[irq_cnt] = IRQF_SHARED;
> else
> - chan_flag[irq_cnt] = IRQF_DISABLED;
> + chan_flag[irq_cnt] = 0;
> dev_dbg(&pdev->dev,
> "Found IRQ %d for channel %d\n",
> i, irq_cnt);
Acked-by: Vinod Koul <vinod.koul@linux.intel.com>
--
~Vinod
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 51/62] powerpc/ps3: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-52-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 17:04 ` Geoff Levand
0 siblings, 0 replies; 70+ messages in thread
From: Geoff Levand @ 2011-09-07 17:04 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, tglx, mingo, linuxppc-dev, cbe-oss-dev
On 09/07/2011 01:10 AM, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> drivers/ps3/ps3-vuart.c | 2 +-
> drivers/ps3/ps3stor_lib.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
Acked-by: Geoff Levand <geoff@infradead.org>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-21-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 17:12 ` David Miller
2011-09-07 17:31 ` Thomas Gleixner
0 siblings, 1 reply; 70+ messages in thread
From: David Miller @ 2011-09-07 17:12 UTC (permalink / raw)
To: yong.zhang0; +Cc: linux-kernel, tglx, mingo, joe, sparclinux
From: Yong Zhang <yong.zhang0@gmail.com>
Date: Wed, 7 Sep 2011 16:10:17 +0800
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
How are things working now, if that is the case?
Specifically in the ldc_bind() case, we're passing iRQF_DISABLED here
so that the IRQ is not turned on when we request the IRQ, we later do
enable_irq() on these after we've take the spinlock in this function.
The IRQ cannot be allowed to be delivered between the request_irq()
call and the enable_irq() calls.
This sequence is necessary to deal with some lock ordering issues.
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 60/62] sound: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-61-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 17:12 ` Mark Brown
0 siblings, 0 replies; 70+ messages in thread
From: Mark Brown @ 2011-09-07 17:12 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Russell King, Eric Miao, Geoff Levand, Liam Girdwood, Jassi Brar,
Sangbeom Kim, Joe Perches, Uwe Kleine-König, Jiri Kosina,
Lucas De Marchi, Peter Ujfalusi, Jarkko Nikula, Axel Lin,
Wan ZongShun, Kuninori Morimoto, Paul Mundt, Simon Horman,
Grant Likely, alsa-devel, linux-arm-kernel, linuxppc-dev,
cbe-oss-dev
On Wed, Sep 07, 2011 at 04:10:57PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 17:12 ` [PATCH 20/62] sparc: " David Miller
@ 2011-09-07 17:31 ` Thomas Gleixner
2011-09-07 17:33 ` Thomas Gleixner
0 siblings, 1 reply; 70+ messages in thread
From: Thomas Gleixner @ 2011-09-07 17:31 UTC (permalink / raw)
To: David Miller; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
On Wed, 7 Sep 2011, David Miller wrote:
> From: Yong Zhang <yong.zhang0@gmail.com>
> Date: Wed, 7 Sep 2011 16:10:17 +0800
>
> > This flag is a NOOP and can be removed now.
> >
> > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
>
> How are things working now, if that is the case?
>
> Specifically in the ldc_bind() case, we're passing iRQF_DISABLED here
> so that the IRQ is not turned on when we request the IRQ, we later do
> enable_irq() on these after we've take the spinlock in this function.
>
> The IRQ cannot be allowed to be delivered between the request_irq()
> call and the enable_irq() calls.
>
> This sequence is necessary to deal with some lock ordering issues.
IRQF_DISABLED was telling the core code that the interrupt must run
with interrupts disabled. As we enforced running all handlers with
interrupts disabled the flag is meaningless. It was defined as 0
anyway.
What you need to prevent that request_irq() enables the interrupt
unconditionally, is to set IRQ_NOAUTOEN on the interrupt, which can't
be handed in to request_irq(). You want to call
irq_set_status_flags(irq, IRQ_NOAUTOEN);
for that irq. That tells request_irq() to leave the interrupt disabled
and you have to explicitely enable it. That has not changed since we
generalized the irq core code back in 2006.
Thanks,
tglx
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 17:31 ` Thomas Gleixner
@ 2011-09-07 17:33 ` Thomas Gleixner
2011-09-07 17:51 ` David Miller
0 siblings, 1 reply; 70+ messages in thread
From: Thomas Gleixner @ 2011-09-07 17:33 UTC (permalink / raw)
To: David Miller; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
On Wed, 7 Sep 2011, Thomas Gleixner wrote:
> On Wed, 7 Sep 2011, David Miller wrote:
>
> > From: Yong Zhang <yong.zhang0@gmail.com>
> > Date: Wed, 7 Sep 2011 16:10:17 +0800
> >
> > > This flag is a NOOP and can be removed now.
> > >
> > > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> >
> > How are things working now, if that is the case?
> >
> > Specifically in the ldc_bind() case, we're passing iRQF_DISABLED here
> > so that the IRQ is not turned on when we request the IRQ, we later do
> > enable_irq() on these after we've take the spinlock in this function.
> >
> > The IRQ cannot be allowed to be delivered between the request_irq()
> > call and the enable_irq() calls.
> >
> > This sequence is necessary to deal with some lock ordering issues.
>
> IRQF_DISABLED was telling the core code that the interrupt must run
> with interrupts disabled. As we enforced running all handlers with
> interrupts disabled the flag is meaningless. It was defined as 0
> anyway.
>
> What you need to prevent that request_irq() enables the interrupt
> unconditionally, is to set IRQ_NOAUTOEN on the interrupt, which can't
> be handed in to request_irq(). You want to call
>
> irq_set_status_flags(irq, IRQ_NOAUTOEN);
>
> for that irq. That tells request_irq() to leave the interrupt disabled
> and you have to explicitely enable it. That has not changed since we
> generalized the irq core code back in 2006.
If that's an issue, then we can create an IRQF_NOAUTOEN flag, which
can be handed into request_irq().
Thanks,
tglx
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 53/62] spi: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-54-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 17:37 ` Grant Likely
0 siblings, 0 replies; 70+ messages in thread
From: Grant Likely @ 2011-09-07 17:37 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, tglx, mingo, spi-devel-general
On Wed, Sep 07, 2011 at 04:10:50PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
> ---
> drivers/spi/spi-bfin5xx.c | 2 +-
> drivers/spi/spi-coldfire-qspi.c | 2 +-
> drivers/spi/spi-ppc4xx.c | 2 +-
> drivers/spi/spi-sh-msiof.c | 2 +-
> drivers/spi/spi-sh.c | 2 +-
> 5 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/spi/spi-bfin5xx.c b/drivers/spi/spi-bfin5xx.c
> index b8d25f2..3b83ff8 100644
> --- a/drivers/spi/spi-bfin5xx.c
> +++ b/drivers/spi/spi-bfin5xx.c
> @@ -1098,7 +1098,7 @@ static int bfin_spi_setup(struct spi_device *spi)
>
> if (chip->pio_interrupt && !drv_data->irq_requested) {
> ret = request_irq(drv_data->spi_irq, bfin_spi_pio_irq_handler,
> - IRQF_DISABLED, "BFIN_SPI", drv_data);
> + 0, "BFIN_SPI", drv_data);
> if (ret) {
> dev_err(&spi->dev, "Unable to register spi IRQ\n");
> goto error;
> diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c
> index ae2cd1c..7397c4d 100644
> --- a/drivers/spi/spi-coldfire-qspi.c
> +++ b/drivers/spi/spi-coldfire-qspi.c
> @@ -487,7 +487,7 @@ static int __devinit mcfqspi_probe(struct platform_device *pdev)
> goto fail2;
> }
>
> - status = request_irq(mcfqspi->irq, mcfqspi_irq_handler, IRQF_DISABLED,
> + status = request_irq(mcfqspi->irq, mcfqspi_irq_handler, 0,
> pdev->name, mcfqspi);
> if (status) {
> dev_dbg(&pdev->dev, "request_irq failed\n");
> diff --git a/drivers/spi/spi-ppc4xx.c b/drivers/spi/spi-ppc4xx.c
> index b267fd9..8ec43e0 100644
> --- a/drivers/spi/spi-ppc4xx.c
> +++ b/drivers/spi/spi-ppc4xx.c
> @@ -514,7 +514,7 @@ static int __init spi_ppc4xx_of_probe(struct platform_device *op)
> /* Request IRQ */
> hw->irqnum = irq_of_parse_and_map(np, 0);
> ret = request_irq(hw->irqnum, spi_ppc4xx_int,
> - IRQF_DISABLED, "spi_ppc4xx_of", (void *)hw);
> + 0, "spi_ppc4xx_of", (void *)hw);
> if (ret) {
> dev_err(dev, "unable to allocate interrupt\n");
> goto free_gpios;
> diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
> index e00d94b..e38554f 100644
> --- a/drivers/spi/spi-sh-msiof.c
> +++ b/drivers/spi/spi-sh-msiof.c
> @@ -635,7 +635,7 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
> goto err2;
> }
>
> - ret = request_irq(i, sh_msiof_spi_irq, IRQF_DISABLED,
> + ret = request_irq(i, sh_msiof_spi_irq, 0,
> dev_name(&pdev->dev), p);
> if (ret) {
> dev_err(&pdev->dev, "unable to request irq\n");
> diff --git a/drivers/spi/spi-sh.c b/drivers/spi/spi-sh.c
> index 9eedd71..e0343d4 100644
> --- a/drivers/spi/spi-sh.c
> +++ b/drivers/spi/spi-sh.c
> @@ -484,7 +484,7 @@ static int __devinit spi_sh_probe(struct platform_device *pdev)
> goto error2;
> }
>
> - ret = request_irq(irq, spi_sh_irq, IRQF_DISABLED, "spi_sh", ss);
> + ret = request_irq(irq, spi_sh_irq, 0, "spi_sh", ss);
> if (ret < 0) {
> dev_err(&pdev->dev, "request_irq error\n");
> goto error3;
> --
> 1.7.4.1
>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 17:33 ` Thomas Gleixner
@ 2011-09-07 17:51 ` David Miller
2011-09-07 17:57 ` Thomas Gleixner
0 siblings, 1 reply; 70+ messages in thread
From: David Miller @ 2011-09-07 17:51 UTC (permalink / raw)
To: tglx; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 7 Sep 2011 19:33:52 +0200 (CEST)
>
>
> On Wed, 7 Sep 2011, Thomas Gleixner wrote:
>
>> On Wed, 7 Sep 2011, David Miller wrote:
>>
>> > From: Yong Zhang <yong.zhang0@gmail.com>
>> > Date: Wed, 7 Sep 2011 16:10:17 +0800
>> >
>> > > This flag is a NOOP and can be removed now.
>> > >
>> > > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
>> >
>> > How are things working now, if that is the case?
>> >
>> > Specifically in the ldc_bind() case, we're passing iRQF_DISABLED here
>> > so that the IRQ is not turned on when we request the IRQ, we later do
>> > enable_irq() on these after we've take the spinlock in this function.
>> >
>> > The IRQ cannot be allowed to be delivered between the request_irq()
>> > call and the enable_irq() calls.
>> >
>> > This sequence is necessary to deal with some lock ordering issues.
>>
>> IRQF_DISABLED was telling the core code that the interrupt must run
>> with interrupts disabled. As we enforced running all handlers with
>> interrupts disabled the flag is meaningless. It was defined as 0
>> anyway.
>>
>> What you need to prevent that request_irq() enables the interrupt
>> unconditionally, is to set IRQ_NOAUTOEN on the interrupt, which can't
>> be handed in to request_irq(). You want to call
>>
>> irq_set_status_flags(irq, IRQ_NOAUTOEN);
>>
>> for that irq. That tells request_irq() to leave the interrupt disabled
>> and you have to explicitely enable it. That has not changed since we
>> generalized the irq core code back in 2006.
>
> If that's an issue, then we can create an IRQF_NOAUTOEN flag, which
> can be handed into request_irq().
Actually, the issue is that I wanted the interrupt handler to run with
interrupts disabled.
We had big problems when openning thousands of virtual network
devices, each with their own unique IRQ, and pointed all at the same
cpu, and we'd get IRQ stack overflows.
See commit c58543c869606532c2382f027d6466f4672ea756
So this change to make IRQF_DISABLED a nop has reintroduced this bug.
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 17:51 ` David Miller
@ 2011-09-07 17:57 ` Thomas Gleixner
2011-09-07 18:14 ` David Miller
0 siblings, 1 reply; 70+ messages in thread
From: Thomas Gleixner @ 2011-09-07 17:57 UTC (permalink / raw)
To: David Miller; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
On Wed, 7 Sep 2011, David Miller wrote:
> From: Thomas Gleixner <tglx@linutronix.de>
> Date: Wed, 7 Sep 2011 19:33:52 +0200 (CEST)
>
> We had big problems when openning thousands of virtual network
> devices, each with their own unique IRQ, and pointed all at the same
> cpu, and we'd get IRQ stack overflows.
>
> See commit c58543c869606532c2382f027d6466f4672ea756
>
> So this change to make IRQF_DISABLED a nop has reintroduced this bug.
See commit e58aa3d2d0cc01ad8d6f7f640a0670433f794922
We run ALL interrupt handlers with interrupts disabled for that reason
and we even check and yell when an interrupt handler returns with
interrupts enabled. That's why IRQF_DISABLED became meaningless.
Thanks,
tglx
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 17:57 ` Thomas Gleixner
@ 2011-09-07 18:14 ` David Miller
2011-09-07 18:43 ` Thomas Gleixner
0 siblings, 1 reply; 70+ messages in thread
From: David Miller @ 2011-09-07 18:14 UTC (permalink / raw)
To: tglx; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 7 Sep 2011 19:57:21 +0200 (CEST)
> On Wed, 7 Sep 2011, David Miller wrote:
>> From: Thomas Gleixner <tglx@linutronix.de>
>> Date: Wed, 7 Sep 2011 19:33:52 +0200 (CEST)
>>
>> We had big problems when openning thousands of virtual network
>> devices, each with their own unique IRQ, and pointed all at the same
>> cpu, and we'd get IRQ stack overflows.
>>
>> See commit c58543c869606532c2382f027d6466f4672ea756
>>
>> So this change to make IRQF_DISABLED a nop has reintroduced this bug.
>
> See commit e58aa3d2d0cc01ad8d6f7f640a0670433f794922
>
> We run ALL interrupt handlers with interrupts disabled for that reason
> and we even check and yell when an interrupt handler returns with
> interrupts enabled. That's why IRQF_DISABLED became meaningless.
Awesome.
Can I politely ask that a reference to that commit and something like
your paragraph here explaining things is added to these IRQF_DISABLED
removal patches?
Thanks!
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 18:14 ` David Miller
@ 2011-09-07 18:43 ` Thomas Gleixner
2011-09-08 3:15 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Thomas Gleixner @ 2011-09-07 18:43 UTC (permalink / raw)
To: David Miller; +Cc: yong.zhang0, linux-kernel, mingo, joe, sparclinux
On Wed, 7 Sep 2011, David Miller wrote:
> From: Thomas Gleixner <tglx@linutronix.de>
> Date: Wed, 7 Sep 2011 19:57:21 +0200 (CEST)
>
> > On Wed, 7 Sep 2011, David Miller wrote:
> >> From: Thomas Gleixner <tglx@linutronix.de>
> >> Date: Wed, 7 Sep 2011 19:33:52 +0200 (CEST)
> >>
> >> We had big problems when openning thousands of virtual network
> >> devices, each with their own unique IRQ, and pointed all at the same
> >> cpu, and we'd get IRQ stack overflows.
> >>
> >> See commit c58543c869606532c2382f027d6466f4672ea756
> >>
> >> So this change to make IRQF_DISABLED a nop has reintroduced this bug.
> >
> > See commit e58aa3d2d0cc01ad8d6f7f640a0670433f794922
> >
> > We run ALL interrupt handlers with interrupts disabled for that reason
> > and we even check and yell when an interrupt handler returns with
> > interrupts enabled. That's why IRQF_DISABLED became meaningless.
>
> Awesome.
>
> Can I politely ask that a reference to that commit and something like
> your paragraph here explaining things is added to these IRQF_DISABLED
> removal patches?
That's a good idea. I'll let sed loose on the changelogs when I pick
them up.
Thanks,
tglx
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 05/62] avr32: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-6-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-07 20:29 ` Hans-Christian Egtvedt
0 siblings, 0 replies; 70+ messages in thread
From: Hans-Christian Egtvedt @ 2011-09-07 20:29 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, tglx, mingo, Haavard Skinnemoen, John Stultz
Around Wed 07 Sep 2011 16:10:02 +0800 or thereabout, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
Oki.
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
>
Thanks.
Acked-by: Hans-Christian Egtvedt <egtvedt@samfundet.no>
<snipp diff>
--
mvh
Hans-Christian Egtvedt
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 38/62] Input: irq: Remove IRQF_DISABLED
2011-09-07 8:10 ` [PATCH 38/62] Input: " Yong Zhang
@ 2011-09-07 23:21 ` Dmitry Torokhov
0 siblings, 0 replies; 70+ messages in thread
From: Dmitry Torokhov @ 2011-09-07 23:21 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Michael Hennerich, Wan ZongShun,
Alessandro Rubini, Ben Dooks, Kukjin Kim, Lucas De Marchi,
Axel Lin, Eric Miao, Mark F. Brown, Ben Hutchings,
Krzysztof Hałasa, Julia Lawall, Sylvestre Ledru,
Christoph Fritz, Paul Mundt, Tejun Heo, device-drivers-devel,
linux-input, linux-arm-kernel
On Wed, Sep 07, 2011 at 04:10:35PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
Applied, thanks Yong.
--
Dmitry
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 20/62] sparc: irq: Remove IRQF_DISABLED
2011-09-07 18:43 ` Thomas Gleixner
@ 2011-09-08 3:15 ` Yong Zhang
0 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-08 3:15 UTC (permalink / raw)
To: Thomas Gleixner, David Miller; +Cc: linux-kernel, mingo, joe, sparclinux
On Wed, Sep 07, 2011 at 08:43:56PM +0200, Thomas Gleixner wrote:
> On Wed, 7 Sep 2011, David Miller wrote:
>
> > From: Thomas Gleixner <tglx@linutronix.de>
> > Date: Wed, 7 Sep 2011 19:57:21 +0200 (CEST)
> >
> > > On Wed, 7 Sep 2011, David Miller wrote:
> > >> From: Thomas Gleixner <tglx@linutronix.de>
> > >> Date: Wed, 7 Sep 2011 19:33:52 +0200 (CEST)
> > >>
> > >> We had big problems when openning thousands of virtual network
> > >> devices, each with their own unique IRQ, and pointed all at the same
> > >> cpu, and we'd get IRQ stack overflows.
> > >>
> > >> See commit c58543c869606532c2382f027d6466f4672ea756
> > >>
> > >> So this change to make IRQF_DISABLED a nop has reintroduced this bug.
> > >
> > > See commit e58aa3d2d0cc01ad8d6f7f640a0670433f794922
> > >
> > > We run ALL interrupt handlers with interrupts disabled for that reason
> > > and we even check and yell when an interrupt handler returns with
> > > interrupts enabled. That's why IRQF_DISABLED became meaningless.
> >
> > Awesome.
> >
> > Can I politely ask that a reference to that commit and something like
> > your paragraph here explaining things is added to these IRQF_DISABLED
> > removal patches?
I should have shown more in the commit log, thus this kind of misleading
could be avoided. Sorry Dave.
>
> That's a good idea. I'll let sed loose on the changelogs when I pick
> them up.
Thanks Thomas.
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 12/62] m64k: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-13-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 3:18 ` Greg Ungerer
2011-09-09 15:05 ` Geert Uytterhoeven
0 siblings, 1 reply; 70+ messages in thread
From: Greg Ungerer @ 2011-09-08 3:18 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Geert Uytterhoeven, Sam Creasey,
Greg Ungerer, Lucas De Marchi, linux-m68k
On 07/09/11 18:10, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang<yong.zhang0@gmail.com>
Looks ok to me:
Acked-by: Greg Ungerer <gerg@uclinux.org>
Regards
Greg
> ---
> arch/m68k/include/asm/floppy.h | 2 +-
> arch/m68k/include/asm/irq.h | 4 ++--
> arch/m68k/include/asm/sun3xflop.h | 2 +-
> arch/m68k/platform/68328/timers.c | 2 +-
> arch/m68k/platform/68360/config.c | 2 +-
> arch/m68k/platform/coldfire/pit.c | 2 +-
> arch/m68k/platform/coldfire/sltimers.c | 4 ++--
> arch/m68k/platform/coldfire/timers.c | 4 ++--
> 8 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/arch/m68k/include/asm/floppy.h b/arch/m68k/include/asm/floppy.h
> index 697d503..47365b1 100644
> --- a/arch/m68k/include/asm/floppy.h
> +++ b/arch/m68k/include/asm/floppy.h
> @@ -85,7 +85,7 @@ static int fd_request_irq(void)
> {
> if(MACH_IS_Q40)
> return request_irq(FLOPPY_IRQ, floppy_hardint,
> - IRQF_DISABLED, "floppy", floppy_hardint);
> + 0, "floppy", floppy_hardint);
> else if(MACH_IS_SUN3X)
> return sun3xflop_request_irq();
> return -ENXIO;
> diff --git a/arch/m68k/include/asm/irq.h b/arch/m68k/include/asm/irq.h
> index 69ed0d74..35de598 100644
> --- a/arch/m68k/include/asm/irq.h
> +++ b/arch/m68k/include/asm/irq.h
> @@ -60,8 +60,8 @@ struct pt_regs;
>
> /*
> * various flags for request_irq() - the Amiga now uses the standard
> - * mechanism like all other architectures - IRQF_DISABLED and
> - * IRQF_SHARED are your friends.
> + * mechanism like all other architectures - IRQF_SHARED etc.
> + * are your friends.
> */
> #ifndef MACH_AMIGA_ONLY
> #define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */
> diff --git a/arch/m68k/include/asm/sun3xflop.h b/arch/m68k/include/asm/sun3xflop.h
> index 32c45f8..80f8f9f 100644
> --- a/arch/m68k/include/asm/sun3xflop.h
> +++ b/arch/m68k/include/asm/sun3xflop.h
> @@ -208,7 +208,7 @@ static int sun3xflop_request_irq(void)
> if(!once) {
> once = 1;
> error = request_irq(FLOPPY_IRQ, sun3xflop_hardint,
> - IRQF_DISABLED, "floppy", NULL);
> + 0, "floppy", NULL);
> return ((error == 0) ? 0 : -1);
> } else return 0;
> }
> diff --git a/arch/m68k/platform/68328/timers.c b/arch/m68k/platform/68328/timers.c
> index 309f725..d135b26 100644
> --- a/arch/m68k/platform/68328/timers.c
> +++ b/arch/m68k/platform/68328/timers.c
> @@ -69,7 +69,7 @@ static irqreturn_t hw_tick(int irq, void *dummy)
>
> static struct irqaction m68328_timer_irq = {
> .name = "timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = hw_tick,
> };
>
> diff --git a/arch/m68k/platform/68360/config.c b/arch/m68k/platform/68360/config.c
> index 9dd5bca..c67f1c3 100644
> --- a/arch/m68k/platform/68360/config.c
> +++ b/arch/m68k/platform/68360/config.c
> @@ -58,7 +58,7 @@ static irqreturn_t hw_tick(int irq, void *dummy)
>
> static struct irqaction m68360_timer_irq = {
> .name = "timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = hw_tick,
> };
>
> diff --git a/arch/m68k/platform/coldfire/pit.c b/arch/m68k/platform/coldfire/pit.c
> index c2b9809..c69b71a 100644
> --- a/arch/m68k/platform/coldfire/pit.c
> +++ b/arch/m68k/platform/coldfire/pit.c
> @@ -118,7 +118,7 @@ static irqreturn_t pit_tick(int irq, void *dummy)
>
> static struct irqaction pit_irq = {
> .name = "timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = pit_tick,
> };
>
> diff --git a/arch/m68k/platform/coldfire/sltimers.c b/arch/m68k/platform/coldfire/sltimers.c
> index 6a85daf..2168dda 100644
> --- a/arch/m68k/platform/coldfire/sltimers.c
> +++ b/arch/m68k/platform/coldfire/sltimers.c
> @@ -51,7 +51,7 @@ irqreturn_t mcfslt_profile_tick(int irq, void *dummy)
>
> static struct irqaction mcfslt_profile_irq = {
> .name = "profile timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = mcfslt_profile_tick,
> };
>
> @@ -91,7 +91,7 @@ static irqreturn_t mcfslt_tick(int irq, void *dummy)
>
> static struct irqaction mcfslt_timer_irq = {
> .name = "timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = mcfslt_tick,
> };
>
> diff --git a/arch/m68k/platform/coldfire/timers.c b/arch/m68k/platform/coldfire/timers.c
> index 60242f6..687a38f 100644
> --- a/arch/m68k/platform/coldfire/timers.c
> +++ b/arch/m68k/platform/coldfire/timers.c
> @@ -62,7 +62,7 @@ static irqreturn_t mcftmr_tick(int irq, void *dummy)
>
> static struct irqaction mcftmr_timer_irq = {
> .name = "timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = mcftmr_tick,
> };
>
> @@ -150,7 +150,7 @@ irqreturn_t coldfire_profile_tick(int irq, void *dummy)
>
> static struct irqaction coldfire_profile_irq = {
> .name = "profile timer",
> - .flags = IRQF_DISABLED | IRQF_TIMER,
> + .flags = IRQF_TIMER,
> .handler = coldfire_profile_tick,
> };
>
--
------------------------------------------------------------------------
Greg Ungerer -- Principal Engineer EMAIL: gerg@snapgear.com
SnapGear Group, McAfee PHONE: +61 7 3435 2888
8 Gardner Close FAX: +61 7 3217 5323
Milton, QLD, 4064, Australia WEB: http://www.SnapGear.com
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [uclinux-dist-devel] [PATCH 06/62] Blackfin: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-7-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 8:12 ` Bob Liu
0 siblings, 0 replies; 70+ messages in thread
From: Bob Liu @ 2011-09-08 8:12 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Yi Li, Mike Frysinger, Michael Hennerich,
David S. Miller, John Stultz, Graf Yang, Torben Hohn,
KOSAKI Motohiro, uclinux-dist-devel, tglx, Barry Song, mingo
On Wed, Sep 7, 2011 at 4:10 PM, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Looks good, I'll apply it to arch tree of blackfin.
Acked-by: Bob Liu <lliubbo@kernel.org>
Thanks
-Bob
> ---
> arch/blackfin/kernel/time-ts.c | 4 ++--
> arch/blackfin/kernel/time.c | 1 -
> arch/blackfin/mach-bf537/boards/cm_bf537e.c | 2 +-
> arch/blackfin/mach-bf537/boards/cm_bf537u.c | 2 +-
> arch/blackfin/mach-bf537/boards/stamp.c | 2 +-
> arch/blackfin/mach-bf537/boards/tcm_bf537.c | 2 +-
> arch/blackfin/mach-bf561/boards/cm_bf561.c | 2 +-
> arch/blackfin/mach-bf561/smp.c | 2 +-
> 8 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/arch/blackfin/kernel/time-ts.c b/arch/blackfin/kernel/time-ts.c
> index 9e9b60d..73940b7 100644
> --- a/arch/blackfin/kernel/time-ts.c
> +++ b/arch/blackfin/kernel/time-ts.c
> @@ -188,7 +188,7 @@ irqreturn_t bfin_gptmr0_interrupt(int irq, void *dev_id)
>
> static struct irqaction gptmr0_irq = {
> .name = "Blackfin GPTimer0",
> - .flags = IRQF_DISABLED | IRQF_TIMER | \
> + .flags = IRQF_TIMER | \
> IRQF_IRQPOLL | IRQF_PERCPU,
> .handler = bfin_gptmr0_interrupt,
> };
> @@ -297,7 +297,7 @@ irqreturn_t bfin_coretmr_interrupt(int irq, void *dev_id)
>
> static struct irqaction coretmr_irq = {
> .name = "Blackfin CoreTimer",
> - .flags = IRQF_DISABLED | IRQF_TIMER | \
> + .flags = IRQF_TIMER | \
> IRQF_IRQPOLL | IRQF_PERCPU,
> .handler = bfin_coretmr_interrupt,
> };
> diff --git a/arch/blackfin/kernel/time.c b/arch/blackfin/kernel/time.c
> index ceb2bf6..2310b24 100644
> --- a/arch/blackfin/kernel/time.c
> +++ b/arch/blackfin/kernel/time.c
> @@ -25,7 +25,6 @@
>
> static struct irqaction bfin_timer_irq = {
> .name = "Blackfin Timer Tick",
> - .flags = IRQF_DISABLED
> };
>
> #if defined(CONFIG_IPIPE)
> diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537e.c b/arch/blackfin/mach-bf537/boards/cm_bf537e.c
> index 44fd840..9fb20d6 100644
> --- a/arch/blackfin/mach-bf537/boards/cm_bf537e.c
> +++ b/arch/blackfin/mach-bf537/boards/cm_bf537e.c
> @@ -605,7 +605,7 @@ static struct platform_device bfin_mac_device = {
>
> static struct pata_platform_info bfin_pata_platform_data = {
> .ioport_shift = 2,
> - .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
> + .irq_type = IRQF_TRIGGER_HIGH,
> };
>
> static struct resource bfin_pata_resources[] = {
> diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537u.c b/arch/blackfin/mach-bf537/boards/cm_bf537u.c
> index 1b4ac5c..5ba389f 100644
> --- a/arch/blackfin/mach-bf537/boards/cm_bf537u.c
> +++ b/arch/blackfin/mach-bf537/boards/cm_bf537u.c
> @@ -570,7 +570,7 @@ static struct platform_device bfin_mac_device = {
>
> static struct pata_platform_info bfin_pata_platform_data = {
> .ioport_shift = 2,
> - .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
> + .irq_type = IRQF_TRIGGER_HIGH,
> };
>
> static struct resource bfin_pata_resources[] = {
> diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c
> index b52e672..b971e58 100644
> --- a/arch/blackfin/mach-bf537/boards/stamp.c
> +++ b/arch/blackfin/mach-bf537/boards/stamp.c
> @@ -2388,7 +2388,7 @@ static struct platform_device bfin_sport1_uart_device = {
> #define PATA_INT IRQ_PF5
> static struct pata_platform_info bfin_pata_platform_data = {
> .ioport_shift = 1,
> - .irq_flags = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
> + .irq_flags = IRQF_TRIGGER_HIGH,
> };
>
> static struct resource bfin_pata_resources[] = {
> diff --git a/arch/blackfin/mach-bf537/boards/tcm_bf537.c b/arch/blackfin/mach-bf537/boards/tcm_bf537.c
> index 9b7287a..2da0316 100644
> --- a/arch/blackfin/mach-bf537/boards/tcm_bf537.c
> +++ b/arch/blackfin/mach-bf537/boards/tcm_bf537.c
> @@ -572,7 +572,7 @@ static struct platform_device bfin_mac_device = {
>
> static struct pata_platform_info bfin_pata_platform_data = {
> .ioport_shift = 2,
> - .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
> + .irq_type = IRQF_TRIGGER_HIGH,
> };
>
> static struct resource bfin_pata_resources[] = {
> diff --git a/arch/blackfin/mach-bf561/boards/cm_bf561.c b/arch/blackfin/mach-bf561/boards/cm_bf561.c
> index e4f397d..c1b72f2 100644
> --- a/arch/blackfin/mach-bf561/boards/cm_bf561.c
> +++ b/arch/blackfin/mach-bf561/boards/cm_bf561.c
> @@ -348,7 +348,7 @@ static struct platform_device bfin_sir0_device = {
>
> static struct pata_platform_info bfin_pata_platform_data = {
> .ioport_shift = 2,
> - .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
> + .irq_type = IRQF_TRIGGER_HIGH,
> };
>
> static struct resource bfin_pata_resources[] = {
> diff --git a/arch/blackfin/mach-bf561/smp.c b/arch/blackfin/mach-bf561/smp.c
> index 85abd8b..db22401 100644
> --- a/arch/blackfin/mach-bf561/smp.c
> +++ b/arch/blackfin/mach-bf561/smp.c
> @@ -114,7 +114,7 @@ void __init platform_request_ipi(int irq, void *handler)
> int ret;
> const char *name = (irq == IRQ_SUPPLE_0) ? supple0 : supple1;
>
> - ret = request_irq(irq, handler, IRQF_DISABLED | IRQF_PERCPU, name, handler);
> + ret = request_irq(irq, handler, IRQF_PERCPU, name, handler);
> if (ret)
> panic("Cannot request %s for IPI service", name);
> }
> --
> 1.7.4.1
>
> _______________________________________________
> Uclinux-dist-devel mailing list
> Uclinux-dist-devel@blackfin.uclinux.org
> https://blackfin.uclinux.org/mailman/listinfo/uclinux-dist-devel
>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 25/62] staging: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-26-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 10:40 ` Marc Dietich
2011-09-08 13:58 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Marc Dietich @ 2011-09-08 10:40 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Greg Kroah-Hartman, Jarod Wilson,
Mauro Carvalho Chehab, Namhyung Kim, Palash Bandyopadhyay,
Joe Perches, Ruslan Pisarev, Ilia Mirkin, Hans Verkuil, Bob Beers,
Ralph Loader, Tejun Heo, Greg Dietsche, Jiri Kosina,
Vitaliy Ivanov, devel
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> drivers/staging/cx25821/cx25821-alsa.c | 2 +-
> drivers/staging/cx25821/cx25821-audio-upstream.c | 2 +-
> drivers/staging/cx25821/cx25821-core.c | 2 +-
> .../staging/cx25821/cx25821-video-upstream-ch2.c | 2 +-
> drivers/staging/cx25821/cx25821-video-upstream.c | 2 +-
> drivers/staging/cxt1e1/linux.c | 6 ------
> drivers/staging/lirc/lirc_serial.c | 2 +-
> drivers/staging/lirc/lirc_sir.c | 2 +-
> drivers/staging/nvec/nvec.c | 2 +-
> 9 files changed, 8 insertions(+), 14 deletions(-)
>
> [...]
>
> diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
> index 72258e8..6210c95 100644
> --- a/drivers/staging/nvec/nvec.c
> +++ b/drivers/staging/nvec/nvec.c
> @@ -339,7 +339,7 @@ static int __devinit tegra_nvec_probe(struct
> platform_device *pdev)
>
> tegra_init_i2c_slave(pdata, i2c_regs, i2c_clk);
>
> - err = request_irq(nvec->irq, i2c_interrupt, IRQF_DISABLED, "nvec", nvec);
> + err = request_irq(nvec->irq, i2c_interrupt, 0, "nvec", nvec);
> if(err) {
> dev_err(nvec->dev, "couldn't request irq");
> goto failed;
This is already fixed in
http://driverdev.linuxdriverproject.org/pipermail/devel/2011-August/018960.html
which went into the staging tree (which is currently not available).
Marc
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
[not found] ` <1315383059-3673-3-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 10:53 ` Clemens Ladisch
2011-09-08 13:37 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-08 10:53 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
Yong Zhang wrote:
> Now snd_mpu401_uart_new() parameter 'irq_flags' take two role
> in it: one is the condition to request_irq and the other is
> the real irq_flags which will be transfered to request_irq().
>
> So add another parameter 'want_irq' to take the role of the
> first one, this will make it easy to remove IRQF_DISABLED.
Please note that the irq number is also intended to pass this
information:
> * @irq: the irq number, -1 if no interrupt for mpu
> ...
> - if (irq >= 0 && irq_flags) {
> if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
Of course, most of snd_mpu401_uart_new()'s users get this wrong and use
0 instead of -1, relying on the irq_flags parameter only. But if these
are fixed to use irq == -1, we get the same effect without having to
introduce another parameter.
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-32-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 10:55 ` Clemens Ladisch
2011-09-08 15:29 ` Corey Minyard
2011-09-08 16:04 ` Arnd Bergmann
2 siblings, 0 replies; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-08 10:55 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Corey Minyard, Mark Gross,
Lucas De Marchi, Arnd Bergmann, openipmi-developer
Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> drivers/char/hpet.c | 2 +-
> ...
> diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
> index 0833896..10f3f04 100644
> --- a/drivers/char/hpet.c
> +++ b/drivers/char/hpet.c
> @@ -500,7 +500,7 @@ static int hpet_ioctl_ieon(struct hpet_dev *devp)
>
> sprintf(devp->hd_name, "hpet%d", (int)(devp - hpetp->hp_dev));
> irq_flags = devp->hd_flags & HPET_SHARED_IRQ
> - ? IRQF_SHARED : IRQF_DISABLED;
> + ? IRQF_SHARED : 0;
> if (request_irq(irq, hpet_interrupt, irq_flags,
> devp->hd_name, (void *)devp)) {
> printk(KERN_ERR "hpet: IRQ %d is not free\n", irq);
> ...
Acked-by: Clemens Ladisch <clemens@ladisch.de>
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-08 10:53 ` [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags Clemens Ladisch
@ 2011-09-08 13:37 ` Yong Zhang
2011-09-08 13:58 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-08 13:37 UTC (permalink / raw)
To: Clemens Ladisch
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
On Thu, Sep 08, 2011 at 12:53:14PM +0200, Clemens Ladisch wrote:
> Yong Zhang wrote:
> > Now snd_mpu401_uart_new() parameter 'irq_flags' take two role
> > in it: one is the condition to request_irq and the other is
> > the real irq_flags which will be transfered to request_irq().
> >
> > So add another parameter 'want_irq' to take the role of the
> > first one, this will make it easy to remove IRQF_DISABLED.
>
> Please note that the irq number is also intended to pass this
> information:
Yes.
this is a bit subtle:
* @irq: the irq number, -1 if no interrupt for mpu
This semantic of 'irq' is kept by the callers IMHO.
* @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
So irq_flags has other meaning--if the irq is already reserved.
Maybe my imprecise description make some kind of misunderstanding.
Seems 'irq_reserved' is more meaningful than 'want_irq', yes?
>
> > * @irq: the irq number, -1 if no interrupt for mpu
> > ...
> > - if (irq >= 0 && irq_flags) {
> > if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
>
> Of course, most of snd_mpu401_uart_new()'s users get this wrong and use
> 0 instead of -1, relying on the irq_flags parameter only. But if these
> are fixed to use irq == -1, we get the same effect without having to
> introduce another parameter.
Hmm, precisely IRQF_DISABLED imply irq is not reserved in some caller.
BTW, I'm not familiar with mpu401, so maybe I'm missing something here.
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-08 13:37 ` Yong Zhang
@ 2011-09-08 13:58 ` Clemens Ladisch
2011-09-08 14:45 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-08 13:58 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
Yong Zhang wrote:
> On Thu, Sep 08, 2011 at 12:53:14PM +0200, Clemens Ladisch wrote:
>> Yong Zhang wrote:
>> > Now snd_mpu401_uart_new() parameter 'irq_flags' take two role
>> > in it: one is the condition to request_irq and the other is
>> > the real irq_flags which will be transfered to request_irq().
>> >
>> > So add another parameter 'want_irq' to take the role of the
>> > first one, this will make it easy to remove IRQF_DISABLED.
>>
>> Please note that the irq number is also intended to pass this
>> information:
>
> Yes.
>
> this is a bit subtle:
> * @irq: the irq number, -1 if no interrupt for mpu
>
> This semantic of 'irq' is kept by the callers IMHO.
>
> * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
>
> So irq_flags has other meaning--if the irq is already reserved.
> Maybe my imprecise description make some kind of misunderstanding.
The wording is just sloppy.
> BTW, I'm not familiar with mpu401, so maybe I'm missing something here.
The MPU-401 in UART mode is a very simple and stupid MIDI interface,
which is used on very many sound cards. Depending on the actual
hardware implementation, it gets its own interrupt which may be
exclusive or sharable, or it is integrated into the interrupt handling
of the main sound card which means that the sound driver has to call the
mpu401 interrupt handler explicitly.
Here, "no interrupt" and "already reserved" actually mean the same thing,
i.e., that the interrupt handling is the responsibility of some other
driver.
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 25/62] staging: irq: Remove IRQF_DISABLED
2011-09-08 10:40 ` [PATCH 25/62] staging: " Marc Dietich
@ 2011-09-08 13:58 ` Yong Zhang
2011-09-08 14:52 ` Greg KH
0 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-08 13:58 UTC (permalink / raw)
To: Marc Dietich
Cc: linux-kernel, tglx, mingo, Greg Kroah-Hartman, Jarod Wilson,
Mauro Carvalho Chehab, Namhyung Kim, Palash Bandyopadhyay,
Joe Perches, Ruslan Pisarev, Ilia Mirkin, Hans Verkuil, Bob Beers,
Ralph Loader, Tejun Heo, Greg Dietsche, Jiri Kosina,
Vitaliy Ivanov, devel
On Thu, Sep 08, 2011 at 12:40:48PM +0200, Marc Dietich wrote:
> > This flag is a NOOP and can be removed now.
> >
> > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> > ---
> > drivers/staging/cx25821/cx25821-alsa.c | 2 +-
> > drivers/staging/cx25821/cx25821-audio-upstream.c | 2 +-
> > drivers/staging/cx25821/cx25821-core.c | 2 +-
> > .../staging/cx25821/cx25821-video-upstream-ch2.c | 2 +-
> > drivers/staging/cx25821/cx25821-video-upstream.c | 2 +-
> > drivers/staging/cxt1e1/linux.c | 6 ------
> > drivers/staging/lirc/lirc_serial.c | 2 +-
> > drivers/staging/lirc/lirc_sir.c | 2 +-
> > drivers/staging/nvec/nvec.c | 2 +-
> > 9 files changed, 8 insertions(+), 14 deletions(-)
> >
> > [...]
> >
> > diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
> > index 72258e8..6210c95 100644
> > --- a/drivers/staging/nvec/nvec.c
> > +++ b/drivers/staging/nvec/nvec.c
> > @@ -339,7 +339,7 @@ static int __devinit tegra_nvec_probe(struct
> > platform_device *pdev)
> >
> > tegra_init_i2c_slave(pdata, i2c_regs, i2c_clk);
> >
> > - err = request_irq(nvec->irq, i2c_interrupt, IRQF_DISABLED, "nvec", nvec);
> > + err = request_irq(nvec->irq, i2c_interrupt, 0, "nvec", nvec);
> > if(err) {
> > dev_err(nvec->dev, "couldn't request irq");
> > goto failed;
>
> This is already fixed in
> http://driverdev.linuxdriverproject.org/pipermail/devel/2011-August/018960.html
> which went into the staging tree (which is currently not available).
Thanks for pointing it out.
IMHO, the conflict is easy to fix. And if necessary, I could send a new
version :)
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-08 13:58 ` Clemens Ladisch
@ 2011-09-08 14:45 ` Yong Zhang
2011-09-08 20:27 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-08 14:45 UTC (permalink / raw)
To: Clemens Ladisch
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
On Thu, Sep 08, 2011 at 03:58:45PM +0200, Clemens Ladisch wrote:
>
> The MPU-401 in UART mode is a very simple and stupid MIDI interface,
> which is used on very many sound cards. Depending on the actual
> hardware implementation, it gets its own interrupt which may be
> exclusive or sharable, or it is integrated into the interrupt handling
> of the main sound card which means that the sound driver has to call the
> mpu401 interrupt handler explicitly.
>
> Here, "no interrupt" and "already reserved" actually mean the same thing,
> i.e., that the interrupt handling is the responsibility of some other
> driver.
Thanks. If my understanding is correct, in below combination:
irq irq_flags
1) >=0 >0 /* valid */
2) >=0 =0 /* invalid, irq should be '-1' */
3) -1 >0 /* valid, irq_flags just mean real irq_falgs,
but actually there is no irq */
4) -1 =0 /* valid */
my comment will be true, and we could simplify snd_mpu401_uart_new()
like below:
- if (irq >= 0 && irq_flags) {
+ if (irq >= 0) {
right?
And then we should audit all the callers of snd_mpu401_uart_new()
to check if they provide the cerrect irq number, but IMOH, that
would more difficult than keeping 'want_irq/irq_reserved'.
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 25/62] staging: irq: Remove IRQF_DISABLED
2011-09-08 13:58 ` Yong Zhang
@ 2011-09-08 14:52 ` Greg KH
2011-09-09 1:12 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Greg KH @ 2011-09-08 14:52 UTC (permalink / raw)
To: Yong Zhang
Cc: Marc Dietich, linux-kernel, tglx, mingo, Jarod Wilson,
Mauro Carvalho Chehab, Namhyung Kim, Palash Bandyopadhyay,
Joe Perches, Ruslan Pisarev, Ilia Mirkin, Hans Verkuil, Bob Beers,
Ralph Loader, Tejun Heo, Greg Dietsche, Jiri Kosina,
Vitaliy Ivanov, devel
On Thu, Sep 08, 2011 at 09:58:54PM +0800, Yong Zhang wrote:
> On Thu, Sep 08, 2011 at 12:40:48PM +0200, Marc Dietich wrote:
> > > This flag is a NOOP and can be removed now.
> > >
> > > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> > > ---
> > > drivers/staging/cx25821/cx25821-alsa.c | 2 +-
> > > drivers/staging/cx25821/cx25821-audio-upstream.c | 2 +-
> > > drivers/staging/cx25821/cx25821-core.c | 2 +-
> > > .../staging/cx25821/cx25821-video-upstream-ch2.c | 2 +-
> > > drivers/staging/cx25821/cx25821-video-upstream.c | 2 +-
> > > drivers/staging/cxt1e1/linux.c | 6 ------
> > > drivers/staging/lirc/lirc_serial.c | 2 +-
> > > drivers/staging/lirc/lirc_sir.c | 2 +-
> > > drivers/staging/nvec/nvec.c | 2 +-
> > > 9 files changed, 8 insertions(+), 14 deletions(-)
> > >
> > > [...]
> > >
> > > diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
> > > index 72258e8..6210c95 100644
> > > --- a/drivers/staging/nvec/nvec.c
> > > +++ b/drivers/staging/nvec/nvec.c
> > > @@ -339,7 +339,7 @@ static int __devinit tegra_nvec_probe(struct
> > > platform_device *pdev)
> > >
> > > tegra_init_i2c_slave(pdata, i2c_regs, i2c_clk);
> > >
> > > - err = request_irq(nvec->irq, i2c_interrupt, IRQF_DISABLED, "nvec", nvec);
> > > + err = request_irq(nvec->irq, i2c_interrupt, 0, "nvec", nvec);
> > > if(err) {
> > > dev_err(nvec->dev, "couldn't request irq");
> > > goto failed;
> >
> > This is already fixed in
> > http://driverdev.linuxdriverproject.org/pipermail/devel/2011-August/018960.html
> > which went into the staging tree (which is currently not available).
>
> Thanks for pointing it out.
>
> IMHO, the conflict is easy to fix. And if necessary, I could send a new
> version :)
I'll try to work it out, and if I have problems, I'll ask for a new
version once linux-next gets back up and running.
greg k-h
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-32-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:55 ` [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED Clemens Ladisch
@ 2011-09-08 15:29 ` Corey Minyard
2011-09-08 16:04 ` Arnd Bergmann
2 siblings, 0 replies; 70+ messages in thread
From: Corey Minyard @ 2011-09-08 15:29 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Clemens Ladisch, Mark Gross,
Lucas De Marchi, Arnd Bergmann, openipmi-developer
On 09/07/2011 03:10 AM, Yong Zhang wrote:
> diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
> index 9397ab4..44e8da3 100644
> --- a/drivers/char/ipmi/ipmi_si_intf.c
> +++ b/drivers/char/ipmi/ipmi_si_intf.c
> @@ -1336,7 +1336,7 @@ static int std_irq_setup(struct smi_info *info)
> if (info->si_type == SI_BT) {
> rv = request_irq(info->irq,
> si_bt_irq_handler,
> - IRQF_SHARED | IRQF_DISABLED,
> + IRQF_SHARED,
> DEVICE_NAME,
> info);
> if (!rv)
> @@ -1346,7 +1346,7 @@ static int std_irq_setup(struct smi_info *info)
> } else
> rv = request_irq(info->irq,
> si_irq_handler,
> - IRQF_SHARED | IRQF_DISABLED,
> + IRQF_SHARED,
> DEVICE_NAME,
> info);
> if (rv) {
>
Ok by me.
Acked-by: Corey Minyard <cminyard@mvista.com>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-32-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:55 ` [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED Clemens Ladisch
2011-09-08 15:29 ` Corey Minyard
@ 2011-09-08 16:04 ` Arnd Bergmann
2 siblings, 0 replies; 70+ messages in thread
From: Arnd Bergmann @ 2011-09-08 16:04 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Clemens Ladisch, Corey Minyard,
Mark Gross, Lucas De Marchi, openipmi-developer
On Wednesday 07 September 2011, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 17/62] powerpc: irq: Remove IRQF_DISABLED
2011-09-07 8:10 ` [PATCH 17/62] powerpc: " Yong Zhang
@ 2011-09-08 16:41 ` Arnd Bergmann
0 siblings, 0 replies; 70+ messages in thread
From: Arnd Bergmann @ 2011-09-08 16:41 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Benjamin Herrenschmidt, Paul Mackerras,
Geoff Levand, Milton Miller, Michael Ellerman, Kumar Gala,
Scott Wood, Meador Inge, Grant Likely, linuxppc-dev, cbe-oss-dev
On Wednesday 07 September 2011, Yong Zhang wrote:
>
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> arch/powerpc/include/asm/floppy.h | 4 ++--
> arch/powerpc/include/asm/xics.h | 4 ++--
> arch/powerpc/kernel/smp.c | 2 +-
> arch/powerpc/platforms/cell/beat.c | 2 +-
> arch/powerpc/platforms/cell/celleb_scc_pciex.c | 2 +-
> arch/powerpc/platforms/cell/iommu.c | 3 +--
> arch/powerpc/platforms/cell/pmu.c | 2 +-
> arch/powerpc/platforms/cell/spu_base.c | 9 +++------
Acked-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-08 14:45 ` Yong Zhang
@ 2011-09-08 20:27 ` Clemens Ladisch
2011-09-09 1:31 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-08 20:27 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
Yong Zhang wrote:
> On Thu, Sep 08, 2011 at 03:58:45PM +0200, Clemens Ladisch wrote:
> > ...
> > Here, "no interrupt" and "already reserved" actually mean the same thing,
> > i.e., that the interrupt handling is the responsibility of some other
> > driver.
Sorry, after checking the code, I've realized that my description was
wrong. irq_flags==0 ("already reserved") means that snd_mpu401_uart_new
should not try to allocate the interrupt, while irq==-1 ("no interrupt")
means that the device never issues mpu401 interrupts, so that the mpu401
code must use a timer to poll the device.
I'll write a patch that changes this function so that irq<0 means
"already reserved", and that "no interrupt" gets another bit in the
info_flags parameter.
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED
[not found] ` <1315383059-3673-62-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-08 21:38 ` Randy Dunlap
2011-09-09 1:38 ` Yong Zhang
2011-09-09 1:48 ` [UPDATED] " Yong Zhang
0 siblings, 2 replies; 70+ messages in thread
From: Randy Dunlap @ 2011-09-08 21:38 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, tglx, mingo, Jesse Barnes, linux-pci, linux-doc
On 09/07/11 01:10, Yong Zhang wrote:
> IRQF_DISABLED is a NOOP now, place where suggest to use this
> flag also doesn't make sense anymore.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> Documentation/PCI/MSI-HOWTO.txt | 21 ---------------------
> Documentation/scsi/ncr53c8xx.txt | 4 +++-
> Documentation/scsi/tmscsim.txt | 4 ++--
> 3 files changed, 5 insertions(+), 24 deletions(-)
> diff --git a/Documentation/scsi/ncr53c8xx.txt b/Documentation/scsi/ncr53c8xx.txt
> index cda5f8f..654b34c 100644
> --- a/Documentation/scsi/ncr53c8xx.txt
> +++ b/Documentation/scsi/ncr53c8xx.txt
> @@ -786,7 +786,9 @@ port address 0x1400.
> irqm:1 same as initial settings (assumed BIOS settings)
> irqm:2 always totem pole
> irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq
> - irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq
> + irqm:0x20 driver will not use IRQF_DISABLED(Does not make sense
> + anymore since genirq will keep irq disabled and the flag
will not use IRQF_DISABLED (does not make sense
any more
> + is dead from linux-2.6.36) flag when requesting irq
>
> (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
>
> diff --git a/Documentation/scsi/tmscsim.txt b/Documentation/scsi/tmscsim.txt
> index 61c0531..45cfd63 100644
> --- a/Documentation/scsi/tmscsim.txt
> +++ b/Documentation/scsi/tmscsim.txt
> @@ -108,8 +108,8 @@ MHz PCI bus works for me, though, but I don't recommend using higher clocks
> than the 33.33 MHz being in the PCI spec.
>
> If you want to share the IRQ with another device and the driver refuses to
> -do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to
> -IRQF_SHARED | IRQF_DISABLED.
> +do so, you should find out what's the mismatch between the shared irqs,
do so, you should IRQs,
> +and CONFIG_DEBUG_SHIRQ may give you more help.
>
>
> 3.Features
--
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 25/62] staging: irq: Remove IRQF_DISABLED
2011-09-08 14:52 ` Greg KH
@ 2011-09-09 1:12 ` Yong Zhang
0 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-09 1:12 UTC (permalink / raw)
To: Greg KH
Cc: Marc Dietich, linux-kernel, tglx, mingo, Jarod Wilson,
Mauro Carvalho Chehab, Namhyung Kim, Palash Bandyopadhyay,
Joe Perches, Ruslan Pisarev, Ilia Mirkin, Hans Verkuil, Bob Beers,
Ralph Loader, Tejun Heo, Greg Dietsche, Jiri Kosina,
Vitaliy Ivanov, devel
On Thu, Sep 08, 2011 at 07:52:10AM -0700, Greg KH wrote:
>
> I'll try to work it out,
Thanks Greg.
> and if I have problems, I'll ask for a new
> version once linux-next gets back up and running.
No problem :)
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-08 20:27 ` Clemens Ladisch
@ 2011-09-09 1:31 ` Yong Zhang
2011-09-11 15:10 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-09 1:31 UTC (permalink / raw)
To: Clemens Ladisch
Cc: linux-kernel, tglx, mingo, Jaroslav Kysela, Takashi Iwai,
Uwe Kleine-König, Jiri Kosina, Andreas Mohr, Lucas De Marchi,
Julia Lawall, Ondrej Zary, Dan Carpenter, Joe Perches, alsa-devel
On Thu, Sep 08, 2011 at 10:27:43PM +0200, Clemens Ladisch wrote:
> Yong Zhang wrote:
> > On Thu, Sep 08, 2011 at 03:58:45PM +0200, Clemens Ladisch wrote:
> > > ...
> > > Here, "no interrupt" and "already reserved" actually mean the same thing,
> > > i.e., that the interrupt handling is the responsibility of some other
> > > driver.
>
> Sorry, after checking the code, I've realized that my description was
> wrong. irq_flags==0 ("already reserved") means that snd_mpu401_uart_new
> should not try to allocate the interrupt, while irq==-1 ("no interrupt")
> means that the device never issues mpu401 interrupts, so that the mpu401
> code must use a timer to poll the device.
>
> I'll write a patch that changes this function so that irq<0 means
> "already reserved", and that "no interrupt" gets another bit in the
> info_flags parameter.
Sounds good.
So my patch will be based on yours; or if you have other plan,
how about let's take this patch as a temporary workaroud?
Anyway, you decide it :)
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED
2011-09-08 21:38 ` [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED Randy Dunlap
@ 2011-09-09 1:38 ` Yong Zhang
2011-09-09 1:48 ` [UPDATED] " Yong Zhang
1 sibling, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-09 1:38 UTC (permalink / raw)
To: Randy Dunlap
Cc: linux-kernel, tglx, mingo, Jesse Barnes, linux-pci, linux-doc
On Thu, Sep 08, 2011 at 02:38:33PM -0700, Randy Dunlap wrote:
> On 09/07/11 01:10, Yong Zhang wrote:
> > IRQF_DISABLED is a NOOP now, place where suggest to use this
> > flag also doesn't make sense anymore.
> >
> > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> > ---
> > Documentation/PCI/MSI-HOWTO.txt | 21 ---------------------
> > Documentation/scsi/ncr53c8xx.txt | 4 +++-
> > Documentation/scsi/tmscsim.txt | 4 ++--
> > 3 files changed, 5 insertions(+), 24 deletions(-)
>
> > diff --git a/Documentation/scsi/ncr53c8xx.txt b/Documentation/scsi/ncr53c8xx.txt
> > index cda5f8f..654b34c 100644
> > --- a/Documentation/scsi/ncr53c8xx.txt
> > +++ b/Documentation/scsi/ncr53c8xx.txt
> > @@ -786,7 +786,9 @@ port address 0x1400.
> > irqm:1 same as initial settings (assumed BIOS settings)
> > irqm:2 always totem pole
> > irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq
> > - irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq
> > + irqm:0x20 driver will not use IRQF_DISABLED(Does not make sense
> > + anymore since genirq will keep irq disabled and the flag
>
> will not use IRQF_DISABLED (does not make sense
> any more
Updated.
>
> > + is dead from linux-2.6.36) flag when requesting irq
Ah, should be linux-2.6.35 here.
> >
> > (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
> >
> > diff --git a/Documentation/scsi/tmscsim.txt b/Documentation/scsi/tmscsim.txt
> > index 61c0531..45cfd63 100644
> > --- a/Documentation/scsi/tmscsim.txt
> > +++ b/Documentation/scsi/tmscsim.txt
> > @@ -108,8 +108,8 @@ MHz PCI bus works for me, though, but I don't recommend using higher clocks
> > than the 33.33 MHz being in the PCI spec.
> >
> > If you want to share the IRQ with another device and the driver refuses to
> > -do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to
> > -IRQF_SHARED | IRQF_DISABLED.
> > +do so, you should find out what's the mismatch between the shared irqs,
>
> do so, you should IRQs,
Updated.
Thanks Randy.
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* [UPDATED] [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED
2011-09-08 21:38 ` [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED Randy Dunlap
2011-09-09 1:38 ` Yong Zhang
@ 2011-09-09 1:48 ` Yong Zhang
2011-09-09 8:25 ` Rolf Eike Beer
1 sibling, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-09 1:48 UTC (permalink / raw)
To: Randy Dunlap
Cc: linux-kernel, tglx, mingo, Jesse Barnes, linux-pci, linux-doc
IRQF_DISABLED is a NOOP now, place where suggest to use this
flag also doesn't make sense any more.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
---
Documentation/PCI/MSI-HOWTO.txt | 21 ---------------------
Documentation/scsi/ncr53c8xx.txt | 4 +++-
Documentation/scsi/tmscsim.txt | 4 ++--
3 files changed, 5 insertions(+), 24 deletions(-)
diff --git a/Documentation/PCI/MSI-HOWTO.txt b/Documentation/PCI/MSI-HOWTO.txt
index 53e6fca..b3f514d 100644
--- a/Documentation/PCI/MSI-HOWTO.txt
+++ b/Documentation/PCI/MSI-HOWTO.txt
@@ -255,27 +255,6 @@ as many vectors for MSI as it could for MSI-X. On some platforms, MSI
interrupts must all be targeted at the same set of CPUs whereas MSI-X
interrupts can all be targeted at different CPUs.
-4.5.2 Spinlocks
-
-Most device drivers have a per-device spinlock which is taken in the
-interrupt handler. With pin-based interrupts or a single MSI, it is not
-necessary to disable interrupts (Linux guarantees the same interrupt will
-not be re-entered). If a device uses multiple interrupts, the driver
-must disable interrupts while the lock is held. If the device sends
-a different interrupt, the driver will deadlock trying to recursively
-acquire the spinlock.
-
-There are two solutions. The first is to take the lock with
-spin_lock_irqsave() or spin_lock_irq() (see
-Documentation/DocBook/kernel-locking). The second is to specify
-IRQF_DISABLED to request_irq() so that the kernel runs the entire
-interrupt routine with interrupts disabled.
-
-If your MSI interrupt routine does not hold the lock for the whole time
-it is running, the first solution may be best. The second solution is
-normally preferred as it avoids making two transitions from interrupt
-disabled to enabled and back again.
-
4.6 How to tell whether MSI/MSI-X is enabled on a device
Using 'lspci -v' (as root) may show some devices with "MSI", "Message
diff --git a/Documentation/scsi/ncr53c8xx.txt b/Documentation/scsi/ncr53c8xx.txt
index cda5f8f..c5a9904 100644
--- a/Documentation/scsi/ncr53c8xx.txt
+++ b/Documentation/scsi/ncr53c8xx.txt
@@ -786,7 +786,9 @@ port address 0x1400.
irqm:1 same as initial settings (assumed BIOS settings)
irqm:2 always totem pole
irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq
- irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq
+ irqm:0x20 driver will not use IRQF_DISABLED (does not make sense
+ any more since genirq will keep irq disabled and the flag
+ is dead from linux-2.6.35) flag when requesting irq
(Bits 0x10 and 0x20 can be combined with hardware irq mode option)
diff --git a/Documentation/scsi/tmscsim.txt b/Documentation/scsi/tmscsim.txt
index 61c0531..1dee219 100644
--- a/Documentation/scsi/tmscsim.txt
+++ b/Documentation/scsi/tmscsim.txt
@@ -108,8 +108,8 @@ MHz PCI bus works for me, though, but I don't recommend using higher clocks
than the 33.33 MHz being in the PCI spec.
If you want to share the IRQ with another device and the driver refuses to
-do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to
-IRQF_SHARED | IRQF_DISABLED.
+do so, you should find out what's the mismatch between the shared IRQs,
+and CONFIG_DEBUG_SHIRQ may give you more help.
3.Features
--
1.7.4.1
^ permalink raw reply related [flat|nested] 70+ messages in thread
* Re: [PATCH 36/62] i2c: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-37-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 7:59 ` Wolfram Sang
2011-09-11 21:36 ` Linus Walleij
2011-09-19 8:44 ` Barry Song
2 siblings, 0 replies; 70+ messages in thread
From: Wolfram Sang @ 2011-09-09 7:59 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Dave Airlie, linux-i2c, Sonic Zhang, Kukjin Kim,
Joe Perches, mingo, Jean Delvare (PC drivers, core),
Alessandro Rubini, Nobuhiro Iwamatsu, Lucas De Marchi,
Magnus Damm, Simon Horman, Ben Dooks (embedded platforms), tglx,
linux-arm-kernel, Linus Walleij, Jiri Kosina, Paul Mundt,
STEricsson, uclinux-dist-devel, Guennadi Liakhovetski
[-- Attachment #1: Type: text/plain, Size: 374 bytes --]
On Wed, Sep 07, 2011 at 04:10:33PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 58/62] watchdog: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-59-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 8:01 ` Wolfram Sang
2011-09-11 21:37 ` Linus Walleij
1 sibling, 0 replies; 70+ messages in thread
From: Wolfram Sang @ 2011-09-09 8:01 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, linux-watchdog, Wim Van Sebroeck, tglx, mingo,
linux-arm-kernel, Linus Walleij
[-- Attachment #1: Type: text/plain, Size: 374 bytes --]
On Wed, Sep 07, 2011 at 04:10:55PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 44/62] mtd: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-45-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 8:03 ` Wolfram Sang
0 siblings, 0 replies; 70+ messages in thread
From: Wolfram Sang @ 2011-09-09 8:03 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Artem Bityutskiy, Baruch Siach, Eric Miao,
Samuel Ortiz, John Ogness, Lei Wen, Sascha Hauer, Haojian Zhuang,
Dmitry Eremin-Solenikov, linux-mtd, Andres Salomon, Jamie Iles,
tglx, David Woodhouse, mingo
[-- Attachment #1: Type: text/plain, Size: 374 bytes --]
On Wed, Sep 07, 2011 at 04:10:41PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 47/62] pcmcia: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-48-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 8:04 ` Wolfram Sang
0 siblings, 0 replies; 70+ messages in thread
From: Wolfram Sang @ 2011-09-09 8:04 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Marcelo Roberto Jimenez, linux-pcmcia,
Dominik Brodowski, Tejun Heo, Joe Perches, Russell King, tglx,
mingo
[-- Attachment #1: Type: text/plain, Size: 374 bytes --]
On Wed, Sep 07, 2011 at 04:10:44PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [UPDATED] [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED
2011-09-09 1:48 ` [UPDATED] " Yong Zhang
@ 2011-09-09 8:25 ` Rolf Eike Beer
2011-09-09 8:41 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Rolf Eike Beer @ 2011-09-09 8:25 UTC (permalink / raw)
To: Yong Zhang
Cc: Randy Dunlap, linux-kernel, tglx, mingo, Jesse Barnes, linux-pci,
linux-doc
> IRQF_DISABLED is a NOOP now, place where suggest to use this
> flag also doesn't make sense any more.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> ---
> Documentation/PCI/MSI-HOWTO.txt | 21 ---------------------
> Documentation/scsi/ncr53c8xx.txt | 4 +++-
> Documentation/scsi/tmscsim.txt | 4 ++--
> 3 files changed, 5 insertions(+), 24 deletions(-)
>
> diff --git a/Documentation/PCI/MSI-HOWTO.txt
> b/Documentation/PCI/MSI-HOWTO.txt
> index 53e6fca..b3f514d 100644
> --- a/Documentation/PCI/MSI-HOWTO.txt
> +++ b/Documentation/PCI/MSI-HOWTO.txt
> @@ -255,27 +255,6 @@ as many vectors for MSI as it could for MSI-X. On
> some platforms, MSI
> interrupts must all be targeted at the same set of CPUs whereas MSI-X
> interrupts can all be targeted at different CPUs.
>
> -4.5.2 Spinlocks
> -
> -Most device drivers have a per-device spinlock which is taken in the
> -interrupt handler. With pin-based interrupts or a single MSI, it is not
> -necessary to disable interrupts (Linux guarantees the same interrupt will
> -not be re-entered). If a device uses multiple interrupts, the driver
> -must disable interrupts while the lock is held. If the device sends
> -a different interrupt, the driver will deadlock trying to recursively
> -acquire the spinlock.
> -
> -There are two solutions. The first is to take the lock with
> -spin_lock_irqsave() or spin_lock_irq() (see
> -Documentation/DocBook/kernel-locking). The second is to specify
> -IRQF_DISABLED to request_irq() so that the kernel runs the entire
> -interrupt routine with interrupts disabled.
> -
> -If your MSI interrupt routine does not hold the lock for the whole time
> -it is running, the first solution may be best. The second solution is
> -normally preferred as it avoids making two transitions from interrupt
> -disabled to enabled and back again.
Is this whole section really obsolete now? Or is it only the part that
suggests IRQF_DISABLED?
Eike
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [UPDATED] [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED
2011-09-09 8:25 ` Rolf Eike Beer
@ 2011-09-09 8:41 ` Yong Zhang
0 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-09 8:41 UTC (permalink / raw)
To: Rolf Eike Beer
Cc: Randy Dunlap, linux-kernel, tglx, mingo, Jesse Barnes, linux-pci,
linux-doc
On Fri, Sep 09, 2011 at 10:25:18AM +0200, Rolf Eike Beer wrote:
> > IRQF_DISABLED is a NOOP now, place where suggest to use this
> > flag also doesn't make sense any more.
> >
> > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> > ---
> > Documentation/PCI/MSI-HOWTO.txt | 21 ---------------------
> > Documentation/scsi/ncr53c8xx.txt | 4 +++-
> > Documentation/scsi/tmscsim.txt | 4 ++--
> > 3 files changed, 5 insertions(+), 24 deletions(-)
> >
> > diff --git a/Documentation/PCI/MSI-HOWTO.txt
> > b/Documentation/PCI/MSI-HOWTO.txt
> > index 53e6fca..b3f514d 100644
> > --- a/Documentation/PCI/MSI-HOWTO.txt
> > +++ b/Documentation/PCI/MSI-HOWTO.txt
> > @@ -255,27 +255,6 @@ as many vectors for MSI as it could for MSI-X. On
> > some platforms, MSI
> > interrupts must all be targeted at the same set of CPUs whereas MSI-X
> > interrupts can all be targeted at different CPUs.
> >
> > -4.5.2 Spinlocks
> > -
> > -Most device drivers have a per-device spinlock which is taken in the
> > -interrupt handler. With pin-based interrupts or a single MSI, it is not
> > -necessary to disable interrupts (Linux guarantees the same interrupt will
> > -not be re-entered). If a device uses multiple interrupts, the driver
> > -must disable interrupts while the lock is held. If the device sends
> > -a different interrupt, the driver will deadlock trying to recursively
> > -acquire the spinlock.
> > -
> > -There are two solutions. The first is to take the lock with
> > -spin_lock_irqsave() or spin_lock_irq() (see
> > -Documentation/DocBook/kernel-locking). The second is to specify
> > -IRQF_DISABLED to request_irq() so that the kernel runs the entire
> > -interrupt routine with interrupts disabled.
> > -
> > -If your MSI interrupt routine does not hold the lock for the whole time
> > -it is running, the first solution may be best. The second solution is
> > -normally preferred as it avoids making two transitions from interrupt
> > -disabled to enabled and back again.
>
> Is this whole section really obsolete now? Or is it only the part that
> suggests IRQF_DISABLED?
The whole paragraph is about how to avoid the deadlock when we handle an
interrupt another is rising. And the two solutions both intend to
disable irqs. But it is implied by current genirq (genirq will keep
irqs disabled when calling the action handler).
So IMHO, we need not to mention the spinlock any more.
Thanks,
Yong
>
> Eike
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Only stand for myself
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 54/62] TTY: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-55-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 9:49 ` Tobias Klauser
2011-09-22 23:04 ` Greg KH
1 sibling, 0 replies; 70+ messages in thread
From: Tobias Klauser @ 2011-09-09 9:49 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Greg Kroah-Hartman, Alan Cox,
Sonic Zhang, Mikael Starvik, Jesper Nilsson, Lucas De Marchi,
Jesper Juhl, Benjamin Herrenschmidt, Jiri Kosina, linuxppc-dev,
linux-serial, nios2-dev, uclinux-dist-devel, linux-cris-kernel
On 2011-09-07 at 10:10:51 +0200, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
For altera_jtaguart and altera_uart:
Acked-by: Tobias Klauser <tklauser@distanz.ch>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 12/62] m64k: irq: Remove IRQF_DISABLED
2011-09-08 3:18 ` [PATCH 12/62] m64k: " Greg Ungerer
@ 2011-09-09 15:05 ` Geert Uytterhoeven
2011-09-10 2:01 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Geert Uytterhoeven @ 2011-09-09 15:05 UTC (permalink / raw)
To: Yong Zhang
Cc: Greg Ungerer, linux-kernel, tglx, mingo, Sam Creasey,
Greg Ungerer, Lucas De Marchi, linux-m68k
On Thu, Sep 8, 2011 at 05:18, Greg Ungerer <gerg@snapgear.com> wrote:
> On 07/09/11 18:10, Yong Zhang wrote:
>>
>> This flag is a NOOP and can be removed now.
>>
>> Signed-off-by: Yong Zhang<yong.zhang0@gmail.com>
>
> Looks ok to me:
>
> Acked-by: Greg Ungerer <gerg@uclinux.org>
Except for the subject, it's m68k, not m64k ;-)
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Sorry, I missed the introductary email [0/62]. But do you expect the individual
maintainers to take these patches, or are you just collecting Acks?
>> ---
>> arch/m68k/include/asm/floppy.h | 2 +-
>> arch/m68k/include/asm/irq.h | 4 ++--
>> arch/m68k/include/asm/sun3xflop.h | 2 +-
>> arch/m68k/platform/68328/timers.c | 2 +-
>> arch/m68k/platform/68360/config.c | 2 +-
>> arch/m68k/platform/coldfire/pit.c | 2 +-
>> arch/m68k/platform/coldfire/sltimers.c | 4 ++--
>> arch/m68k/platform/coldfire/timers.c | 4 ++--
>> 8 files changed, 11 insertions(+), 11 deletions(-)
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] 70+ messages in thread
* Re: [PATCH 07/62] cris: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-8-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-09 15:10 ` Jesper Nilsson
0 siblings, 0 replies; 70+ messages in thread
From: Jesper Nilsson @ 2011-09-09 15:10 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@elte.hu,
Mikael Starvik, Arnd Bergmann, Andrew Morton, WANG Cong,
Lucas De Marchi, Torben Hohn, KOSAKI Motohiro, Russell King,
Martin Schwidefsky, Ralf Baechle, Eric Dumazet, linux-cris-kernel
On Wed, Sep 07, 2011 at 10:10:04AM +0200, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
For the CRIS parts:
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
/^JN - Jesper Nilsson
--
Jesper Nilsson -- jesper.nilsson@axis.com
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 12/62] m64k: irq: Remove IRQF_DISABLED
2011-09-09 15:05 ` Geert Uytterhoeven
@ 2011-09-10 2:01 ` Yong Zhang
0 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-10 2:01 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg Ungerer, linux-kernel, tglx, mingo, Sam Creasey,
Greg Ungerer, Lucas De Marchi, linux-m68k
On Fri, Sep 09, 2011 at 05:05:15PM +0200, Geert Uytterhoeven wrote:
> On Thu, Sep 8, 2011 at 05:18, Greg Ungerer <gerg@snapgear.com> wrote:
> > On 07/09/11 18:10, Yong Zhang wrote:
> >>
> >> This flag is a NOOP and can be removed now.
> >>
> >> Signed-off-by: Yong Zhang<yong.zhang0@gmail.com>
> >
> > Looks ok to me:
> >
> > Acked-by: Greg Ungerer <gerg@uclinux.org>
>
> Except for the subject, it's m68k, not m64k ;-)
Sorry for the typo.
>
> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
>
> Sorry, I missed the introductary email [0/62].
I sent it out, but seems it didn't reach LKML due to the compromise
of kernel.org.
> But do you expect the individual
> maintainers to take these patches, or are you just collecting Acks?
Quoted from Thomas's reply to Ralf (MIPS):
[ We can hold off the "remove the define" patch until 3.2-rc1 and push
it along with everything which hasn't been merged until then.
Alternatively I can pick the whole MIPS bunch as well. I let Ralf
decide. ]
So the same rule here, you can decide it :)
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-09 1:31 ` Yong Zhang
@ 2011-09-11 15:10 ` Clemens Ladisch
2011-09-12 10:47 ` Takashi Iwai
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-11 15:10 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, Jaroslav Kysela, Takashi Iwai, alsa-devel
Yong Zhang wrote:
> On Thu, Sep 08, 2011 at 10:27:43PM +0200, Clemens Ladisch wrote:
> > I'll write a patch that changes this function so that irq<0 means
> > "already reserved", and that "no interrupt" gets another bit in the
> > info_flags parameter.
>
> So my patch will be based on yours;
Here you are; any IRQF changes should now be trivial.
Regards,
Clemens
--8<---------------------------------------------------------------->8--
[PATCH] ALSA: mpu401: clean up interrupt specification
The semantics of snd_mpu401_uart_new()'s interrupt parameters are
somewhat counterintuitive: To prevent the function from allocating its
own interrupt, either the irq number must be invalid, or the irq_flags
parameter must be zero. At the same time, the irq parameter being
invalid specifies that the mpu401 code has to work without an interrupt
allocated by the caller. This implies that, if there is an interrupt
and it is allocated by the caller, the irq parameter must be set to
a valid-looking number which then isn't actually used.
With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
which forces us to handle the parameters differently.
This patch introduces a new flag MPU401_INFO_RX_POLL for interrupt-less
operation, and makes the decision to allocate the interrupt to depend
only on the irq parameter.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
---
Documentation/DocBook/writing-an-alsa-driver.tmpl | 20 ++++++++++++--------
include/sound/mpu401.h | 4 ++--
sound/drivers/mpu401/mpu401.c | 6 +++---
sound/drivers/mpu401/mpu401_uart.c | 13 ++++++-------
sound/isa/ad1816a/ad1816a.c | 5 +++--
sound/isa/als100.c | 10 +++++++---
sound/isa/azt2320.c | 3 ++-
sound/isa/cmi8330.c | 3 ++-
sound/isa/cs423x/cs4231.c | 9 ++++++---
sound/isa/cs423x/cs4236.c | 9 ++++++---
sound/isa/es18xx.c | 2 +-
sound/isa/galaxy/galaxy.c | 3 ++-
sound/isa/gus/gusextreme.c | 3 ++-
sound/isa/opl3sa2.c | 2 +-
sound/isa/sb/jazz16.c | 10 +++++++---
sound/isa/sb/sb16.c | 2 +-
sound/isa/sc6000.c | 7 +++++--
sound/isa/wavefront/wavefront.c | 5 ++++-
sound/pci/als4000.c | 2 +-
sound/pci/au88x0/au88x0_mpu401.c | 4 ++--
sound/pci/azt3328.c | 2 +-
sound/pci/cmipci.c | 2 +-
sound/pci/es1938.c | 2 +-
sound/pci/es1968.c | 2 +-
sound/pci/fm801.c | 2 +-
sound/pci/ice1712/ice1712.c | 4 ++--
sound/pci/maestro3.c | 2 +-
sound/pci/oxygen/oxygen_lib.c | 2 +-
sound/pci/riptide/riptide.c | 2 +-
sound/pci/sonicvibes.c | 2 +-
sound/pci/trident/trident.c | 2 +-
sound/pci/via82xx.c | 2 +-
sound/pci/ymfpci/ymfpci.c | 2 +-
33 files changed, 89 insertions(+), 61 deletions(-)
diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
index 598c22f..24e21d0 100644
--- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
+++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
@@ -4343,6 +4343,12 @@ struct _snd_pcm_runtime {
by itself to start processing the output stream in the irq handler.
</para>
+ <para>
+ If the card doesn't generate UART interrupts, add the
+ <constant>MPU401_INFO_RX_POLL</constant> flag. Then a timer
+ interrupt will be invoked for polling.
+ </para>
+
<para>
Usually, the port address corresponds to the command port and
port + 1 corresponds to the data port. If not, you may change
@@ -4375,14 +4381,12 @@ struct _snd_pcm_runtime {
</para>
<para>
- The 6th argument specifies the irq number for UART. If the irq
- is already allocated, pass 0 to the 7th argument
- (<parameter>irq_flags</parameter>). Otherwise, pass the flags
- for irq allocation
- (<constant>SA_XXX</constant> bits) to it, and the irq will be
- reserved by the mpu401-uart layer. If the card doesn't generate
- UART interrupts, pass -1 as the irq number. Then a timer
- interrupt will be invoked for polling.
+ The 6th argument specifies the irq number that will be allocated.
+ Pass the irq flags for calling <function>request_irq()</function>
+ (<constant>IRQF_XXX</constant> bits) in the 7th argument.
+ If no interrupt is to be allocated (because your code is already
+ allocating it, or because the device does not use interrupts),
+ pass -1 and 0 instead.
</para>
</section>
diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h
index 1f1d53f..43e24b2 100644
--- a/include/sound/mpu401.h
+++ b/include/sound/mpu401.h
@@ -50,6 +50,7 @@
#define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */
#define MPU401_INFO_MMIO (1 << 3) /* MMIO access */
#define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */
+#define MPU401_INFO_RX_POLL (1 << 5) /* no RX interrupt; use timer */
#define MPU401_INFO_NO_ACK (1 << 6) /* No ACK cmd needed */
#define MPU401_MODE_BIT_INPUT 0
@@ -73,8 +74,7 @@ struct snd_mpu401 {
unsigned long port; /* base port of MPU-401 chip */
unsigned long cport; /* port + 1 (usually) */
struct resource *res; /* port resource */
- int irq; /* IRQ number of MPU-401 chip (-1 = poll) */
+ int irq; /* IRQ number of MPU-401 chip */
- int irq_flags;
unsigned long mode; /* MPU401_MODE_XXXX */
int timer_invoked;
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
index 149d05a..4917ea1 100644
--- a/sound/drivers/mpu401/mpu401.c
+++ b/sound/drivers/mpu401/mpu401.c
@@ -85,9 +85,9 @@ static int snd_mpu401_create(int dev, struct snd_card **rcard)
strcat(card->longname, "polled");
}
- err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev], 0,
- irq[dev], irq[dev] >= 0 ? IRQF_DISABLED : 0,
- NULL);
+ err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev],
+ irq[dev] >= 0 ? 0 : MPU401_INFO_RX_POLL,
+ irq[dev], IRQF_DISABLED, NULL);
if (err < 0) {
printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]);
goto _err;
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
index 2af0999..5642f8f 100644
--- a/sound/drivers/mpu401/mpu401_uart.c
+++ b/sound/drivers/mpu401/mpu401_uart.c
@@ -3,7 +3,7 @@
* Routines for control of MPU-401 in UART mode
*
* MPU-401 supports UART mode which is not capable generate transmit
- * interrupts thus output is done via polling. Also, if irq < 0, then
+ * interrupts thus output is done via polling. Without interrupt,
* input is done also via polling. Do not expect good performance.
*
*
@@ -374,7 +374,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
/* first time - flush FIFO */
while (max-- > 0)
mpu->read(mpu, MPU401D(mpu));
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_RX_POLL)
snd_mpu401_uart_add_timer(mpu, 1);
}
@@ -383,7 +383,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
snd_mpu401_uart_input_read(mpu);
spin_unlock_irqrestore(&mpu->input_lock, flags);
} else {
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_RX_POLL)
snd_mpu401_uart_remove_timer(mpu, 1);
clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode);
}
@@ -496,7 +496,7 @@ static struct snd_rawmidi_ops snd_mpu401_uart_input =
static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
{
struct snd_mpu401 *mpu = rmidi->private_data;
- if (mpu->irq_flags && mpu->irq >= 0)
+ if (mpu->irq >= 0)
free_irq(mpu->irq, (void *) mpu);
release_and_free_resource(mpu->res);
kfree(mpu);
@@ -510,7 +510,7 @@ static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
* @port: the base address of MPU401 port
* @info_flags: bitflags MPU401_INFO_XXX
* @irq: the irq number, -1 if no interrupt for mpu
- * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
+ * @irq_flags: the irq request flags (IRQF_XXX)
* @rrawmidi: the pointer to store the new rawmidi instance
*
* Creates a new MPU-401 instance.
@@ -577,7 +577,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
mpu->cport = port + 2;
else
mpu->cport = port + 1;
- if (irq >= 0 && irq_flags) {
+ if (irq >= 0) {
if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
"MPU401 UART", (void *) mpu)) {
snd_printk(KERN_ERR "mpu401_uart: "
@@ -588,7 +588,6 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
}
mpu->info_flags = info_flags;
mpu->irq = irq;
- mpu->irq_flags = irq_flags;
if (card->shortname[0])
snprintf(rmidi->name, sizeof(rmidi->name), "%s MIDI",
card->shortname);
diff --git a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c
index 3cb75bc..490d51f 100644
--- a/sound/isa/ad1816a/ad1816a.c
+++ b/sound/isa/ad1816a/ad1816a.c
@@ -203,9 +203,10 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
}
if (mpu_port[dev] > 0) {
+ int mpu_flags = mpu_irq[dev] >= 0 ? 0 : MPU401_INFO_RX_POLL;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port[dev], 0, mpu_irq[dev], IRQF_DISABLED,
- NULL) < 0)
+ mpu_port[dev], mpu_flags,
+ mpu_irq[dev], IRQF_DISABLED, NULL) < 0)
printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n", mpu_port[dev]);
}
diff --git a/sound/isa/als100.c b/sound/isa/als100.c
index 20becc8..3355609 100644
--- a/sound/isa/als100.c
+++ b/sound/isa/als100.c
@@ -245,18 +245,22 @@ static int __devinit snd_card_als100_probe(int dev,
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
int mpu_type = MPU401_HW_ALS100;
+ int mpu_flags = 0;
- if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
+ if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
mpu_irq[dev] = -1;
+ mpu_flags = MPU401_INFO_RX_POLL;
+ }
if (pid->driver_data == SB_HW_DT019X)
mpu_type = MPU401_HW_MPU401;
if (snd_mpu401_uart_new(card, 0,
mpu_type,
- mpu_port[dev], 0,
+ mpu_port[dev],
+ mpu_flags,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
+ IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
}
diff --git a/sound/isa/azt2320.c b/sound/isa/azt2320.c
index aac8dc1..4dc2dc9 100644
--- a/sound/isa/azt2320.c
+++ b/sound/isa/azt2320.c
@@ -232,8 +232,9 @@ static int __devinit snd_card_azt2320_probe(int dev,
}
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
+ int mpu_flags = mpu_irq[dev] >= 0 ? 0 : MPU401_INFO_RX_POLL;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_AZT2320,
- mpu_port[dev], 0,
+ mpu_port[dev], mpu_flags,
mpu_irq[dev], IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c
index fe79a16..7829aaa 100644
--- a/sound/isa/cmi8330.c
+++ b/sound/isa/cmi8330.c
@@ -595,8 +595,9 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
}
if (mpuport[dev] != SNDRV_AUTO_PORT) {
+ int mpuflags = mpuirq[dev] >= 0 ? 0 : MPU401_INFO_RX_POLL;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpuport[dev], 0, mpuirq[dev],
+ mpuport[dev], mpuflags, mpuirq[dev],
IRQF_DISABLED, NULL) < 0)
printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n",
mpuport[dev]);
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
index cb9153e..6ae72ea 100644
--- a/sound/isa/cs423x/cs4231.c
+++ b/sound/isa/cs423x/cs4231.c
@@ -127,11 +127,14 @@ static int __devinit snd_cs4231_probe(struct device *dev, unsigned int n)
goto out;
if (mpu_port[n] > 0 && mpu_port[n] != SNDRV_AUTO_PORT) {
+ int mpu_flags = 0;
- if (mpu_irq[n] == SNDRV_AUTO_IRQ)
+ if (mpu_irq[n] == SNDRV_AUTO_IRQ) {
mpu_irq[n] = -1;
+ mpu_flags = MPU401_INFO_RX_POLL;
+ }
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
- mpu_port[n], 0, mpu_irq[n],
- mpu_irq[n] >= 0 ? IRQF_DISABLED : 0,
+ mpu_port[n], mpu_flags, mpu_irq[n],
+ IRQF_DISABLED,
NULL) < 0)
dev_warn(dev, "MPU401 not detected\n");
}
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
index 999dc1e..71994df 100644
--- a/sound/isa/cs423x/cs4236.c
+++ b/sound/isa/cs423x/cs4236.c
@@ -445,12 +445,15 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
}
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
+ int mpu_flags = 0;
- if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
+ if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
mpu_irq[dev] = -1;
+ mpu_flags = MPU401_INFO_RX_POLL;
+ }
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
- mpu_port[dev], 0,
+ mpu_port[dev], mpu_flags,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
+ IRQF_DISABLED, NULL) < 0)
printk(KERN_WARNING IDENT ": MPU401 not detected\n");
}
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index fb4d6b3..106760f 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -2161,7 +2161,7 @@ static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
mpu_port[dev], 0,
- irq[dev], 0, &chip->rmidi);
+ -1, 0, &chip->rmidi);
if (err < 0)
return err;
}
diff --git a/sound/isa/galaxy/galaxy.c b/sound/isa/galaxy/galaxy.c
index ee54df0..645deff 100644
--- a/sound/isa/galaxy/galaxy.c
+++ b/sound/isa/galaxy/galaxy.c
@@ -584,8 +584,9 @@ static int __devinit snd_galaxy_probe(struct device *dev, unsigned int n)
goto error;
if (mpu_port[n] >= 0) {
+ int mpu_flags = mpu_irq[n] >= 0 ? 0 : MPU401_INFO_RX_POLL;
err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port[n], 0, mpu_irq[n],
+ mpu_port[n], mpu_flags, mpu_irq[n],
IRQF_DISABLED, NULL);
if (err < 0)
goto error;
diff --git a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c
index 008e8e5..872b659 100644
--- a/sound/isa/gus/gusextreme.c
+++ b/sound/isa/gus/gusextreme.c
@@ -316,8 +316,9 @@ static int __devinit snd_gusextreme_probe(struct device *dev, unsigned int n)
}
if (es1688->mpu_port >= 0x300) {
+ int mpu_flags = mpu_irq[n] >= 0 ? 0 : MPU401_INFO_RX_POLL;
error = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688,
- es1688->mpu_port, 0,
+ es1688->mpu_port, mpu_flags,
mpu_irq[n], IRQF_DISABLED, NULL);
if (error < 0)
goto out;
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index 9b915e2..38dc53b 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -708,7 +708,7 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
if (midi_port[dev] >= 0x300 && midi_port[dev] < 0x340) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_OPL3SA2,
midi_port[dev], 0,
- xirq, 0, &chip->rmidi)) < 0)
+ -1, 0, &chip->rmidi)) < 0)
return err;
}
sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
index 8ccbcdd..49ee7db 100644
--- a/sound/isa/sb/jazz16.c
+++ b/sound/isa/sb/jazz16.c
@@ -315,14 +315,18 @@ static int __devinit snd_jazz16_probe(struct device *devptr, unsigned int dev)
goto err_free;
}
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
+ int mpu_flags = 0;
+
- if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
+ if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
mpu_irq[dev] = -1;
+ mpu_flags = MPU401_INFO_RX_POLL;
+ }
if (snd_mpu401_uart_new(card, 0,
MPU401_HW_MPU401,
- mpu_port[dev], 0,
+ mpu_port[dev], mpu_flags,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
+ IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR "no MPU-401 device at 0x%lx\n",
mpu_port[dev]);
diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
index 4d1c5a3..8d751ba 100644
--- a/sound/isa/sb/sb16.c
+++ b/sound/isa/sb/sb16.c
@@ -395,7 +395,7 @@ static int __devinit snd_sb16_probe(struct snd_card *card, int dev)
if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB,
chip->mpu_port, 0,
- xirq, 0, &chip->rmidi)) < 0)
+ -1, 0, &chip->rmidi)) < 0)
return err;
chip->rmidi_callback = snd_mpu401_uart_interrupt;
}
diff --git a/sound/isa/sc6000.c b/sound/isa/sc6000.c
index 9a8bbf6..6f778cf 100644
--- a/sound/isa/sc6000.c
+++ b/sound/isa/sc6000.c
@@ -653,11 +653,14 @@ static int __devinit snd_sc6000_probe(struct device *devptr, unsigned int dev)
}
if (mpu_port[dev] != SNDRV_AUTO_PORT) {
+ int mpu_flags = 0;
- if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
+ if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
mpu_irq[dev] = -1;
+ mpu_flags = MPU401_INFO_RX_POLL;
+ }
if (snd_mpu401_uart_new(card, 0,
MPU401_HW_MPU401,
- mpu_port[dev], 0,
+ mpu_port[dev], mpu_flags,
mpu_irq[dev], IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR "no MPU-401 device at 0x%lx ?\n",
diff --git a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c
index 711670e..dc2548f 100644
--- a/sound/isa/wavefront/wavefront.c
+++ b/sound/isa/wavefront/wavefront.c
@@ -447,8 +447,11 @@ snd_wavefront_probe (struct snd_card *card, int dev)
/* -------- CS4232 MPU-401 interface -------- */
if (cs4232_mpu_port[dev] > 0 && cs4232_mpu_port[dev] != SNDRV_AUTO_PORT) {
+ int mpu_flags = 0;
+ if (cs4232_mpu_irq[dev] < 0)
+ mpu_flags = MPU401_INFO_RX_POLL;
err = snd_mpu401_uart_new(card, midi_dev, MPU401_HW_CS4232,
- cs4232_mpu_port[dev], 0,
+ cs4232_mpu_port[dev], mpu_flags,
cs4232_mpu_irq[dev], IRQF_DISABLED,
NULL);
if (err < 0) {
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index a9c1af3..8f65858 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -932,7 +932,7 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000,
iobase + ALS4K_IOB_30_MIDI_DATA,
MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi)) < 0) {
+ -1, 0, &chip->rmidi)) < 0) {
printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n",
iobase + ALS4K_IOB_30_MIDI_DATA);
goto out_err;
diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
index 0dc8d25..344d329 100644
--- a/sound/pci/au88x0/au88x0_mpu401.c
+++ b/sound/pci/au88x0/au88x0_mpu401.c
@@ -84,7 +84,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
#ifdef VORTEX_MPU401_LEGACY
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330,
- 0, 0, 0, &rmidi)) != 0) {
+ 0, -1, 0, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
@@ -95,7 +95,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port,
MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO,
- 0, 0, &rmidi)) != 0) {
+ -1, 0, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
index 579fc0d..9c5461a 100644
--- a/sound/pci/azt3328.c
+++ b/sound/pci/azt3328.c
@@ -2653,7 +2653,7 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
err = snd_mpu401_uart_new(
card, 0,
MPU401_HW_AZT2320, chip->mpu_io, MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi
+ -1, 0, &chip->rmidi
);
if (err < 0) {
snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n",
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 9cf99fb..5e89278 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -3229,7 +3229,7 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
iomidi,
(integrated_midi ?
MPU401_INFO_INTEGRATED : 0),
- cm->irq, 0, &cm->rmidi)) < 0) {
+ -1, 0, &cm->rmidi)) < 0) {
printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
}
}
diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
index 26a5a2f..09d3af6 100644
--- a/sound/pci/es1938.c
+++ b/sound/pci/es1938.c
@@ -1855,7 +1855,7 @@ static int __devinit snd_es1938_probe(struct pci_dev *pci,
}
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
chip->mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ -1, 0, &chip->rmidi) < 0) {
printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
} else {
// this line is vital for MIDI interrupt handling on ess-solo1
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index 99ea932..16d897b 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -2844,7 +2844,7 @@ static int __devinit snd_es1968_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
chip->io_port + ESM_MPU401_PORT,
MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ -1, 0, &chip->rmidi)) < 0) {
printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
}
}
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index f9123f0..746568e 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -1307,7 +1307,7 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
FM801_REG(chip, MPU401_DATA),
MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ -1, 0, &chip->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
index 0ccc0eb..051fc08 100644
--- a/sound/pci/ice1712/ice1712.c
+++ b/sound/pci/ice1712/ice1712.c
@@ -2749,7 +2749,7 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712,
ICEREG(ice, MPU1_CTRL),
(c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[0]);
+ -1, 0, &ice->rmidi[0]);
if (err < 0) {
snd_card_free(card);
return err;
@@ -2765,7 +2765,7 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712,
ICEREG(ice, MPU2_CTRL),
(c->mpu401_2_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[1]);
+ -1, 0, &ice->rmidi[1]);
if (err < 0) {
snd_card_free(card);
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 0378126..9c8dd1d 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2821,7 +2821,7 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401,
chip->iobase + MPU401_DATA_PORT,
MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi);
+ -1, 0, &chip->rmidi);
if (err < 0)
printk(KERN_WARNING "maestro3: no MIDI support.\n");
#endif
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index 82311fc..4882c62 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -685,7 +685,7 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
info_flags |= MPU401_INFO_INPUT;
err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
chip->addr + OXYGEN_MPU401,
- info_flags, 0, 0,
+ info_flags, -1, 0,
&chip->midi);
if (err < 0)
goto err_card;
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index e34ae14..1af64a1 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -2109,7 +2109,7 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
val = mpu_port[dev];
pci_write_config_word(chip->pci, PCI_EXT_MPU_Base, val);
err = snd_mpu401_uart_new(card, 0, MPU401_HW_RIPTIDE,
- val, 0, chip->irq, 0,
+ val, 0, -1, 0,
&chip->rmidi);
if (err < 0)
snd_printk(KERN_WARNING
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index 2571a67..3da90cd 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -1494,7 +1494,7 @@ static int __devinit snd_sonic_probe(struct pci_dev *pci,
}
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES,
sonic->midi_port, MPU401_INFO_INTEGRATED,
- sonic->irq, 0,
+ -1, 0,
&midi_uart)) < 0) {
snd_card_free(card);
return err;
diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
index d8a128f..8ea70b9 100644
--- a/sound/pci/trident/trident.c
+++ b/sound/pci/trident/trident.c
@@ -149,7 +149,7 @@ static int __devinit snd_trident_probe(struct pci_dev *pci,
(err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
trident->midi_port,
MPU401_INFO_INTEGRATED,
- trident->irq, 0, &trident->rmidi)) < 0) {
+ -1, 0, &trident->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index f03fd62..7575ff8 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -2069,7 +2069,7 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
if (chip->mpu_res) {
if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ -1, 0, &chip->rmidi) < 0) {
printk(KERN_WARNING "unable to initialize MPU-401"
" at 0x%lx, skipping\n", mpu_port);
legacy &= ~VIA_FUNC_ENABLE_MIDI;
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 511d576..ad974fd 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -306,7 +306,7 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
mpu_port[dev],
MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rawmidi)) < 0) {
+ -1, 0, &chip->rawmidi)) < 0) {
printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]);
legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */
pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
^ permalink raw reply related [flat|nested] 70+ messages in thread
* Re: [PATCH 36/62] i2c: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-37-git-send-email-yong.zhang0@gmail.com>
2011-09-09 7:59 ` [PATCH 36/62] i2c: " Wolfram Sang
@ 2011-09-11 21:36 ` Linus Walleij
2011-09-19 8:44 ` Barry Song
2 siblings, 0 replies; 70+ messages in thread
From: Linus Walleij @ 2011-09-11 21:36 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Dave Airlie, linux-i2c, Sonic Zhang, Kukjin Kim,
Joe Perches, mingo, Jean Delvare (PC drivers, core),
Alessandro Rubini, Nobuhiro Iwamatsu, Lucas De Marchi,
Magnus Damm, Simon Horman, Ben Dooks (embedded platforms), tglx,
linux-arm-kernel, Linus Walleij, Jiri Kosina, Paul Mundt,
STEricsson, uclinux-dist-devel, Guennadi Liakhovetski
On Wed, Sep 7, 2011 at 10:10 AM, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 58/62] watchdog: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-59-git-send-email-yong.zhang0@gmail.com>
2011-09-09 8:01 ` [PATCH 58/62] watchdog: " Wolfram Sang
@ 2011-09-11 21:37 ` Linus Walleij
1 sibling, 0 replies; 70+ messages in thread
From: Linus Walleij @ 2011-09-11 21:37 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, linux-watchdog, Wim Van Sebroeck, tglx, mingo,
linux-arm-kernel, Linus Walleij
On Wed, Sep 7, 2011 at 10:10 AM, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Thanks,
Linus Walleij
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 33/62] dmaengine: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-34-git-send-email-yong.zhang0@gmail.com>
2011-09-07 15:02 ` [PATCH 33/62] dmaengine: " Vinod Koul
@ 2011-09-11 21:38 ` Linus Walleij
1 sibling, 0 replies; 70+ messages in thread
From: Linus Walleij @ 2011-09-11 21:38 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Linus Walleij, Vinod Koul, mingo, tglx,
Dan Williams, linux-arm-kernel
On Wed, Sep 7, 2011 at 10:10 AM, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 52/62] rtc: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-53-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-11 21:38 ` Linus Walleij
0 siblings, 0 replies; 70+ messages in thread
From: Linus Walleij @ 2011-09-11 21:38 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Alessandro Zummo, Linus Walleij, Wan ZongShun,
rtc-linux, tglx, Guan Xuetao, mingo, linux-arm-kernel
On Wed, Sep 7, 2011 at 10:10 AM, Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Thanks,
Linus Walleij
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-11 15:10 ` Clemens Ladisch
@ 2011-09-12 10:47 ` Takashi Iwai
2011-09-12 13:16 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Takashi Iwai @ 2011-09-12 10:47 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
At Sun, 11 Sep 2011 17:10:36 +0200,
Clemens Ladisch wrote:
>
> diff --git a/sound/isa/als100.c b/sound/isa/als100.c
> index 20becc8..3355609 100644
> --- a/sound/isa/als100.c
> +++ b/sound/isa/als100.c
> @@ -245,18 +245,22 @@ static int __devinit snd_card_als100_probe(int dev,
>
> if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
> int mpu_type = MPU401_HW_ALS100;
> + int mpu_flags = 0;
>
> - if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
> + if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
> mpu_irq[dev] = -1;
> + mpu_flags = MPU401_INFO_RX_POLL;
> + }
When mpu_irq[dev] is set to -1, it won't work.
Instead of setting mpu_flag in this if block, you'd need another check
of mpu_irq[], i.e.
if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
mpu_irq[dev] = -1;
if (mpu_irq[dev] < 0)
mpu_flags = MPU401_INFO_RX_POLL;
The similar problems are found in other places, too.
thanks,
Takashi
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-12 10:47 ` Takashi Iwai
@ 2011-09-12 13:16 ` Clemens Ladisch
2011-09-12 20:23 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-12 13:16 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
Takashi Iwai wrote:
> Clemens Ladisch wrote:
> > --- a/sound/isa/als100.c
> > +++ b/sound/isa/als100.c
> > @@ -245,18 +245,22 @@ static int __devinit snd_card_als100_probe(int dev,
> >
> > if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
> > int mpu_type = MPU401_HW_ALS100;
> > + int mpu_flags = 0;
> >
> > - if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
> > + if (mpu_irq[dev] == SNDRV_AUTO_IRQ) {
> > mpu_irq[dev] = -1;
> > + mpu_flags = MPU401_INFO_RX_POLL;
> > + }
>
> When mpu_irq[dev] is set to -1, it won't work.
Thanks for noticing this!
> Instead of setting mpu_flag in this if block, you'd need another check
> of mpu_irq[], i.e.
>
> if (mpu_irq[dev] == SNDRV_AUTO_IRQ)
> mpu_irq[dev] = -1;
> if (mpu_irq[dev] < 0)
> mpu_flags = MPU401_INFO_RX_POLL;
I didn't like all the duplicated code I added to the ISA drivers, and
the more code it becomes, the less I like it.
But it should be possible to avoid this duplication:
snd_mpu401_uart_new() needs to differentiate between three cases:
1) allocate a separate interrupt;
2) do not allocate, use the callback from the driver's interrupt handler;
3) do not allocate, use a timer for polling.
Case 1) is indicated by a valid irq number, the other two cases need
a flag. All drivers that might use polling switch between 1) or 3),
while 2) is always used unconditionally. So if we have this flag for 2)
instead of 3), no additional logic is needed in the drivers.
(Furthermore, snd_mpu401_uart_new() could check for SNDRV_AUTO_IRQ
instead of letting all drivers do this, and the hardware and info_flags
parameters could be merged. But this can wait for later.)
I'll have a new patch until tomorrow.
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-12 13:16 ` Clemens Ladisch
@ 2011-09-12 20:23 ` Clemens Ladisch
2011-09-13 7:12 ` Takashi Iwai
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-12 20:23 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
I wrote:
> I'll have a new patch until tomorrow.
--8<---------------------------------------------------------------->8--
ALSA: mpu401: clean up interrupt specification
The semantics of snd_mpu401_uart_new()'s interrupt parameters are
somewhat counterintuitive: To prevent the function from allocating its
own interrupt, either the irq number must be invalid, or the irq_flags
parameter must be zero. At the same time, the irq parameter being
invalid specifies that the mpu401 code has to work without an interrupt
allocated by the caller. This implies that, if there is an interrupt
and it is allocated by the caller, the irq parameter must be set to
a valid-looking number which then isn't actually used.
With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
which forces us to handle the parameters differently.
This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
device interrupt is handled by the caller, and makes the allocation of
the interrupt to depend only on the irq parameter.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
---
Documentation/DocBook/writing-an-alsa-driver.tmpl | 33 +++++++++++++---------
include/sound/mpu401.h | 6 ++--
sound/drivers/mpu401/mpu401.c | 3 --
sound/drivers/mpu401/mpu401_uart.c | 17 ++++++-----
sound/isa/als100.c | 2 -
sound/isa/cs423x/cs4231.c | 2 -
sound/isa/cs423x/cs4236.c | 2 -
sound/isa/es18xx.c | 4 +-
sound/isa/opl3sa2.c | 5 ++-
sound/isa/sb/jazz16.c | 2 -
sound/isa/sb/sb16.c | 5 ++-
sound/pci/als4000.c | 5 ++-
sound/pci/au88x0/au88x0_mpu401.c | 6 ++--
sound/pci/azt3328.c | 5 ++-
sound/pci/cmipci.c | 5 ++-
sound/pci/es1938.c | 5 ++-
sound/pci/es1968.c | 5 ++-
sound/pci/fm801.c | 5 ++-
sound/pci/ice1712/ice1712.c | 10 ++++--
sound/pci/maestro3.c | 4 +-
sound/pci/oxygen/oxygen_lib.c | 5 ++-
sound/pci/riptide/riptide.c | 2 -
sound/pci/sonicvibes.c | 6 ++--
sound/pci/trident/trident.c | 5 ++-
sound/pci/via82xx.c | 5 ++-
sound/pci/ymfpci/ymfpci.c | 5 ++-
26 files changed, 92 insertions(+), 67 deletions(-)
diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
index 598c22f..31ccd27 100644
--- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
+++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
@@ -4343,6 +4343,13 @@ struct _snd_pcm_runtime {
by itself to start processing the output stream in the irq handler.
</para>
+ <para>
+ If the MPU-401 interface shares its interrupt with the other logical
+ devices on the card, set <constant>MPU401_INFO_IRQ_HOOK</constant>
+ (see <link linkend="midi-interface-interrupt-handler"><citetitle>
+ below</citetitle></link>).
+ </para>
+
<para>
Usually, the port address corresponds to the command port and
port + 1 corresponds to the data port. If not, you may change
@@ -4375,14 +4382,13 @@ struct _snd_pcm_runtime {
</para>
<para>
- The 6th argument specifies the irq number for UART. If the irq
- is already allocated, pass 0 to the 7th argument
- (<parameter>irq_flags</parameter>). Otherwise, pass the flags
- for irq allocation
- (<constant>SA_XXX</constant> bits) to it, and the irq will be
- reserved by the mpu401-uart layer. If the card doesn't generate
- UART interrupts, pass -1 as the irq number. Then a timer
- interrupt will be invoked for polling.
+ The 6th argument specifies the irq number that will be allocated.
+ Pass the irq flags for calling <function>request_irq()</function>
+ (<constant>IRQF_XXX</constant> bits) in the 7th argument.
+ If no interrupt is to be allocated (because your code is already
+ allocating it, or because the device does not use interrupts),
+ pass -1 and 0 instead. For a MPU-401 device without an interrupt,
+ a polling timer will be used instead.
</para>
</section>
@@ -4390,12 +4396,13 @@ struct _snd_pcm_runtime {
<title>Interrupt Handler</title>
<para>
When the interrupt is allocated in
- <function>snd_mpu401_uart_new()</function>, the private
+ <function>snd_mpu401_uart_new()</function>, a private
interrupt handler is used, hence you don't have anything else to do
- than creating the mpu401 stuff. Otherwise, you have to call
- <function>snd_mpu401_uart_interrupt()</function> explicitly when
- a UART interrupt is invoked and checked in your own interrupt
- handler.
+ than creating the mpu401 stuff. Otherwise, you have to set
+ <constant>MPU401_INFO_IRQ_HOOK</constant>, and call
+ <function>snd_mpu401_uart_interrupt()</function> explicitly from your
+ own interrupt handler when it has determined that a UART interrupt
+ has occurred.
</para>
<para>
diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h
index 1f1d53f..8f26148 100644
--- a/include/sound/mpu401.h
+++ b/include/sound/mpu401.h
@@ -50,7 +50,10 @@
#define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */
#define MPU401_INFO_MMIO (1 << 3) /* MMIO access */
#define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */
+#define MPU401_INFO_IRQ_HOOK (1 << 5) /* mpu401 irq handler is called
+ from driver irq handler */
#define MPU401_INFO_NO_ACK (1 << 6) /* No ACK cmd needed */
+#define MPU401_INFO_USE_TIMER (1 << 15) /* internal */
#define MPU401_MODE_BIT_INPUT 0
#define MPU401_MODE_BIT_OUTPUT 1
@@ -73,8 +76,7 @@ struct snd_mpu401 {
unsigned long port; /* base port of MPU-401 chip */
unsigned long cport; /* port + 1 (usually) */
struct resource *res; /* port resource */
- int irq; /* IRQ number of MPU-401 chip (-1 = poll) */
- int irq_flags;
+ int irq; /* IRQ number of MPU-401 chip */
unsigned long mode; /* MPU401_MODE_XXXX */
int timer_invoked;
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
index 149d05a..4133e0d 100644
--- a/sound/drivers/mpu401/mpu401.c
+++ b/sound/drivers/mpu401/mpu401.c
@@ -86,8 +86,7 @@ static int snd_mpu401_create(int dev, struct snd_card **rcard)
}
err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev], 0,
- irq[dev], irq[dev] >= 0 ? IRQF_DISABLED : 0,
- NULL);
+ irq[dev], IRQF_DISABLED, NULL);
if (err < 0) {
printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]);
goto _err;
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
index 2af0999..893a94f 100644
--- a/sound/drivers/mpu401/mpu401_uart.c
+++ b/sound/drivers/mpu401/mpu401_uart.c
@@ -3,7 +3,7 @@
* Routines for control of MPU-401 in UART mode
*
* MPU-401 supports UART mode which is not capable generate transmit
- * interrupts thus output is done via polling. Also, if irq < 0, then
+ * interrupts thus output is done via polling. Without interrupt,
* input is done also via polling. Do not expect good performance.
*
*
@@ -374,7 +374,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
/* first time - flush FIFO */
while (max-- > 0)
mpu->read(mpu, MPU401D(mpu));
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_USE_TIMER)
snd_mpu401_uart_add_timer(mpu, 1);
}
@@ -383,7 +383,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
snd_mpu401_uart_input_read(mpu);
spin_unlock_irqrestore(&mpu->input_lock, flags);
} else {
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_USE_TIMER)
snd_mpu401_uart_remove_timer(mpu, 1);
clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode);
}
@@ -496,7 +496,7 @@ static struct snd_rawmidi_ops snd_mpu401_uart_input =
static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
{
struct snd_mpu401 *mpu = rmidi->private_data;
- if (mpu->irq_flags && mpu->irq >= 0)
+ if (mpu->irq >= 0)
free_irq(mpu->irq, (void *) mpu);
release_and_free_resource(mpu->res);
kfree(mpu);
@@ -509,8 +509,8 @@ static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
* @hardware: the hardware type, MPU401_HW_XXXX
* @port: the base address of MPU401 port
* @info_flags: bitflags MPU401_INFO_XXX
- * @irq: the irq number, -1 if no interrupt for mpu
- * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
+ * @irq: the irq number, -1 if not to be allocated
+ * @irq_flags: the irq request flags (IRQF_XXX)
* @rrawmidi: the pointer to store the new rawmidi instance
*
* Creates a new MPU-401 instance.
@@ -577,7 +577,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
mpu->cport = port + 2;
else
mpu->cport = port + 1;
- if (irq >= 0 && irq_flags) {
+ if (irq >= 0) {
if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
"MPU401 UART", (void *) mpu)) {
snd_printk(KERN_ERR "mpu401_uart: "
@@ -586,9 +586,10 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
return -EBUSY;
}
}
+ if (irq < 0 && !(info_flags & MPU401_INFO_IRQ_HOOK))
+ info_flags |= MPU401_INFO_USE_TIMER;
mpu->info_flags = info_flags;
mpu->irq = irq;
- mpu->irq_flags = irq_flags;
if (card->shortname[0])
snprintf(rmidi->name, sizeof(rmidi->name), "%s MIDI",
card->shortname);
diff --git a/sound/isa/als100.c b/sound/isa/als100.c
index 20becc8..efa071c 100644
--- a/sound/isa/als100.c
+++ b/sound/isa/als100.c
@@ -256,7 +256,7 @@ static int __devinit snd_card_als100_probe(int dev,
mpu_type,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
+ IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
}
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
index cb9153e..6c24248 100644
--- a/sound/isa/cs423x/cs4231.c
+++ b/sound/isa/cs423x/cs4231.c
@@ -131,7 +131,7 @@ static int __devinit snd_cs4231_probe(struct device *dev, unsigned int n)
mpu_irq[n] = -1;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
mpu_port[n], 0, mpu_irq[n],
- mpu_irq[n] >= 0 ? IRQF_DISABLED : 0,
+ IRQF_DISABLED,
NULL) < 0)
dev_warn(dev, "MPU401 not detected\n");
}
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
index 999dc1e..17c9a3e 100644
--- a/sound/isa/cs423x/cs4236.c
+++ b/sound/isa/cs423x/cs4236.c
@@ -450,7 +450,7 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
+ IRQF_DISABLED, NULL) < 0)
printk(KERN_WARNING IDENT ": MPU401 not detected\n");
}
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index fb4d6b3..f5f3071 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -2160,8 +2160,8 @@ static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
- mpu_port[dev], 0,
- irq[dev], 0, &chip->rmidi);
+ mpu_port[dev], MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi);
if (err < 0)
return err;
}
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index 9b915e2..2003c67 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -707,8 +707,9 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
}
if (midi_port[dev] >= 0x300 && midi_port[dev] < 0x340) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_OPL3SA2,
- midi_port[dev], 0,
- xirq, 0, &chip->rmidi)) < 0)
+ midi_port[dev],
+ MPU401_INFO_IRQ_HOOK, -1, 0,
+ &chip->rmidi)) < 0)
return err;
}
sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
index 8ccbcdd..fbd8c16 100644
--- a/sound/isa/sb/jazz16.c
+++ b/sound/isa/sb/jazz16.c
@@ -322,7 +322,7 @@ static int __devinit snd_jazz16_probe(struct device *devptr, unsigned int dev)
MPU401_HW_MPU401,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
+ IRQF_DISABLED,
NULL) < 0)
snd_printk(KERN_ERR "no MPU-401 device at 0x%lx\n",
mpu_port[dev]);
diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
index 4d1c5a3..b10f021 100644
--- a/sound/isa/sb/sb16.c
+++ b/sound/isa/sb/sb16.c
@@ -394,8 +394,9 @@ static int __devinit snd_sb16_probe(struct snd_card *card, int dev)
if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB,
- chip->mpu_port, 0,
- xirq, 0, &chip->rmidi)) < 0)
+ chip->mpu_port,
+ MPU401_INFO_IRQ_HOOK, -1, 0,
+ &chip->rmidi)) < 0)
return err;
chip->rmidi_callback = snd_mpu401_uart_interrupt;
}
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index a9c1af3..507434b 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -931,8 +931,9 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000,
iobase + ALS4K_IOB_30_MIDI_DATA,
- MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi)) < 0) {
printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n",
iobase + ALS4K_IOB_30_MIDI_DATA);
goto out_err;
diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
index 0dc8d25..fc2133b 100644
--- a/sound/pci/au88x0/au88x0_mpu401.c
+++ b/sound/pci/au88x0/au88x0_mpu401.c
@@ -84,7 +84,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
#ifdef VORTEX_MPU401_LEGACY
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330,
- 0, 0, 0, &rmidi)) != 0) {
+ MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
@@ -94,8 +94,8 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
port = (unsigned long)(vortex->mmio + VORTEX_MIDI_DATA);
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port,
- MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO,
- 0, 0, &rmidi)) != 0) {
+ MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO |
+ MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
index 579fc0d..b80e87b 100644
--- a/sound/pci/azt3328.c
+++ b/sound/pci/azt3328.c
@@ -2652,8 +2652,9 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
since our hardware ought to be similar, thus use same ID. */
err = snd_mpu401_uart_new(
card, 0,
- MPU401_HW_AZT2320, chip->mpu_io, MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi
+ MPU401_HW_AZT2320, chip->mpu_io,
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi
);
if (err < 0) {
snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n",
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 9cf99fb..4776790 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -3228,8 +3228,9 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
iomidi,
(integrated_midi ?
- MPU401_INFO_INTEGRATED : 0),
- cm->irq, 0, &cm->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED : 0) |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &cm->rmidi)) < 0) {
printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
}
}
diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
index 26a5a2f..8f4ddc3 100644
--- a/sound/pci/es1938.c
+++ b/sound/pci/es1938.c
@@ -1854,8 +1854,9 @@ static int __devinit snd_es1938_probe(struct pci_dev *pci,
}
}
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- chip->mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ chip->mpu_port,
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi) < 0) {
printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
} else {
// this line is vital for MIDI interrupt handling on ess-solo1
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index 99ea932..b6397d0 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -2843,8 +2843,9 @@ static int __devinit snd_es1968_probe(struct pci_dev *pci,
if (enable_mpu[dev]) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
chip->io_port + ESM_MPU401_PORT,
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi)) < 0) {
printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
}
}
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index f9123f0..34a3414 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -1306,8 +1306,9 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
}
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
FM801_REG(chip, MPU401_DATA),
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
index 0ccc0eb..a1d9815 100644
--- a/sound/pci/ice1712/ice1712.c
+++ b/sound/pci/ice1712/ice1712.c
@@ -2748,8 +2748,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
if (!c->no_mpu401) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712,
ICEREG(ice, MPU1_CTRL),
- (c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[0]);
+ c->mpu401_1_info_flags |
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, 0, &ice->rmidi[0]);
if (err < 0) {
snd_card_free(card);
return err;
@@ -2764,8 +2765,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
/* 2nd port used */
err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712,
ICEREG(ice, MPU2_CTRL),
- (c->mpu401_2_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[1]);
+ c->mpu401_2_info_flags |
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, 0, &ice->rmidi[1]);
if (err < 0) {
snd_card_free(card);
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 0378126..3e5f0bd 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2820,8 +2820,8 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
/* TODO enable MIDI IRQ and I/O */
err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401,
chip->iobase + MPU401_DATA_PORT,
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi);
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rmidi);
if (err < 0)
printk(KERN_WARNING "maestro3: no MIDI support.\n");
#endif
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index 82311fc..4aa3a80 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -678,14 +678,15 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
goto err_card;
if (chip->model.device_config & (MIDI_OUTPUT | MIDI_INPUT)) {
- unsigned int info_flags = MPU401_INFO_INTEGRATED;
+ unsigned int info_flags =
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK;
if (chip->model.device_config & MIDI_OUTPUT)
info_flags |= MPU401_INFO_OUTPUT;
if (chip->model.device_config & MIDI_INPUT)
info_flags |= MPU401_INFO_INPUT;
err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
chip->addr + OXYGEN_MPU401,
- info_flags, 0, 0,
+ info_flags, -1, 0,
&chip->midi);
if (err < 0)
goto err_card;
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index e34ae14..0c2bc68 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -2109,7 +2109,7 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
val = mpu_port[dev];
pci_write_config_word(chip->pci, PCI_EXT_MPU_Base, val);
err = snd_mpu401_uart_new(card, 0, MPU401_HW_RIPTIDE,
- val, 0, chip->irq, 0,
+ val, MPU401_INFO_IRQ_HOOK, -1, 0,
&chip->rmidi);
if (err < 0)
snd_printk(KERN_WARNING
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index 2571a67..a439f17 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -1493,8 +1493,10 @@ static int __devinit snd_sonic_probe(struct pci_dev *pci,
return err;
}
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES,
- sonic->midi_port, MPU401_INFO_INTEGRATED,
- sonic->irq, 0,
+ sonic->midi_port,
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0,
&midi_uart)) < 0) {
snd_card_free(card);
return err;
diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
index d8a128f..6406a18 100644
--- a/sound/pci/trident/trident.c
+++ b/sound/pci/trident/trident.c
@@ -148,8 +148,9 @@ static int __devinit snd_trident_probe(struct pci_dev *pci,
if (trident->device != TRIDENT_DEVICE_ID_SI7018 &&
(err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
trident->midi_port,
- MPU401_INFO_INTEGRATED,
- trident->irq, 0, &trident->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &trident->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index f03fd62..d2204ed 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -2068,8 +2068,9 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg);
if (chip->mpu_res) {
if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
- mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ mpu_port, MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK, -1, 0,
+ &chip->rmidi) < 0) {
printk(KERN_WARNING "unable to initialize MPU-401"
" at 0x%lx, skipping\n", mpu_port);
legacy &= ~VIA_FUNC_ENABLE_MIDI;
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 511d576..553aa57 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -305,8 +305,9 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
if (chip->mpu_res) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
mpu_port[dev],
- MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rawmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, 0, &chip->rawmidi)) < 0) {
printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]);
legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */
pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
^ permalink raw reply related [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-12 20:23 ` Clemens Ladisch
@ 2011-09-13 7:12 ` Takashi Iwai
2011-09-13 8:17 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Takashi Iwai @ 2011-09-13 7:12 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
At Mon, 12 Sep 2011 22:23:16 +0200,
Clemens Ladisch wrote:
>
> I wrote:
> > I'll have a new patch until tomorrow.
>
> --8<---------------------------------------------------------------->8--
> ALSA: mpu401: clean up interrupt specification
>
> The semantics of snd_mpu401_uart_new()'s interrupt parameters are
> somewhat counterintuitive: To prevent the function from allocating its
> own interrupt, either the irq number must be invalid, or the irq_flags
> parameter must be zero. At the same time, the irq parameter being
> invalid specifies that the mpu401 code has to work without an interrupt
> allocated by the caller. This implies that, if there is an interrupt
> and it is allocated by the caller, the irq parameter must be set to
> a valid-looking number which then isn't actually used.
>
> With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
> which forces us to handle the parameters differently.
>
> This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
> device interrupt is handled by the caller, and makes the allocation of
> the interrupt to depend only on the irq parameter.
>
> Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
This patch looks better indeed.
However, if we are going to remove IRQF_DISABLED in near future, and
all the callers use IRQF_DISABLED when requesting an irq, why not
remove this argument now? Then the IRQF_DISABLED-removal patch will
touch less code.
The irq registration in snd_mpu401_uart_new() is just for convenience
for ISA-type devices, and any other devices that need special IRQ
flags (if any) would require other irq handler, thus not necessarily
to be registered inside snd_mpu401_uart_new().
thanks,
Takashi
> ---
> Documentation/DocBook/writing-an-alsa-driver.tmpl | 33 +++++++++++++---------
> include/sound/mpu401.h | 6 ++--
> sound/drivers/mpu401/mpu401.c | 3 --
> sound/drivers/mpu401/mpu401_uart.c | 17 ++++++-----
> sound/isa/als100.c | 2 -
> sound/isa/cs423x/cs4231.c | 2 -
> sound/isa/cs423x/cs4236.c | 2 -
> sound/isa/es18xx.c | 4 +-
> sound/isa/opl3sa2.c | 5 ++-
> sound/isa/sb/jazz16.c | 2 -
> sound/isa/sb/sb16.c | 5 ++-
> sound/pci/als4000.c | 5 ++-
> sound/pci/au88x0/au88x0_mpu401.c | 6 ++--
> sound/pci/azt3328.c | 5 ++-
> sound/pci/cmipci.c | 5 ++-
> sound/pci/es1938.c | 5 ++-
> sound/pci/es1968.c | 5 ++-
> sound/pci/fm801.c | 5 ++-
> sound/pci/ice1712/ice1712.c | 10 ++++--
> sound/pci/maestro3.c | 4 +-
> sound/pci/oxygen/oxygen_lib.c | 5 ++-
> sound/pci/riptide/riptide.c | 2 -
> sound/pci/sonicvibes.c | 6 ++--
> sound/pci/trident/trident.c | 5 ++-
> sound/pci/via82xx.c | 5 ++-
> sound/pci/ymfpci/ymfpci.c | 5 ++-
> 26 files changed, 92 insertions(+), 67 deletions(-)
>
>
> diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
> index 598c22f..31ccd27 100644
> --- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
> +++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
> @@ -4343,6 +4343,13 @@ struct _snd_pcm_runtime {
> by itself to start processing the output stream in the irq handler.
> </para>
>
> + <para>
> + If the MPU-401 interface shares its interrupt with the other logical
> + devices on the card, set <constant>MPU401_INFO_IRQ_HOOK</constant>
> + (see <link linkend="midi-interface-interrupt-handler"><citetitle>
> + below</citetitle></link>).
> + </para>
> +
> <para>
> Usually, the port address corresponds to the command port and
> port + 1 corresponds to the data port. If not, you may change
> @@ -4375,14 +4382,13 @@ struct _snd_pcm_runtime {
> </para>
>
> <para>
> - The 6th argument specifies the irq number for UART. If the irq
> - is already allocated, pass 0 to the 7th argument
> - (<parameter>irq_flags</parameter>). Otherwise, pass the flags
> - for irq allocation
> - (<constant>SA_XXX</constant> bits) to it, and the irq will be
> - reserved by the mpu401-uart layer. If the card doesn't generate
> - UART interrupts, pass -1 as the irq number. Then a timer
> - interrupt will be invoked for polling.
> + The 6th argument specifies the irq number that will be allocated.
> + Pass the irq flags for calling <function>request_irq()</function>
> + (<constant>IRQF_XXX</constant> bits) in the 7th argument.
> + If no interrupt is to be allocated (because your code is already
> + allocating it, or because the device does not use interrupts),
> + pass -1 and 0 instead. For a MPU-401 device without an interrupt,
> + a polling timer will be used instead.
> </para>
> </section>
>
> @@ -4390,12 +4396,13 @@ struct _snd_pcm_runtime {
> <title>Interrupt Handler</title>
> <para>
> When the interrupt is allocated in
> - <function>snd_mpu401_uart_new()</function>, the private
> + <function>snd_mpu401_uart_new()</function>, a private
> interrupt handler is used, hence you don't have anything else to do
> - than creating the mpu401 stuff. Otherwise, you have to call
> - <function>snd_mpu401_uart_interrupt()</function> explicitly when
> - a UART interrupt is invoked and checked in your own interrupt
> - handler.
> + than creating the mpu401 stuff. Otherwise, you have to set
> + <constant>MPU401_INFO_IRQ_HOOK</constant>, and call
> + <function>snd_mpu401_uart_interrupt()</function> explicitly from your
> + own interrupt handler when it has determined that a UART interrupt
> + has occurred.
> </para>
>
> <para>
> diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h
> index 1f1d53f..8f26148 100644
> --- a/include/sound/mpu401.h
> +++ b/include/sound/mpu401.h
> @@ -50,7 +50,10 @@
> #define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */
> #define MPU401_INFO_MMIO (1 << 3) /* MMIO access */
> #define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */
> +#define MPU401_INFO_IRQ_HOOK (1 << 5) /* mpu401 irq handler is called
> + from driver irq handler */
> #define MPU401_INFO_NO_ACK (1 << 6) /* No ACK cmd needed */
> +#define MPU401_INFO_USE_TIMER (1 << 15) /* internal */
>
> #define MPU401_MODE_BIT_INPUT 0
> #define MPU401_MODE_BIT_OUTPUT 1
> @@ -73,8 +76,7 @@ struct snd_mpu401 {
> unsigned long port; /* base port of MPU-401 chip */
> unsigned long cport; /* port + 1 (usually) */
> struct resource *res; /* port resource */
> - int irq; /* IRQ number of MPU-401 chip (-1 = poll) */
> - int irq_flags;
> + int irq; /* IRQ number of MPU-401 chip */
>
> unsigned long mode; /* MPU401_MODE_XXXX */
> int timer_invoked;
> diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
> index 149d05a..4133e0d 100644
> --- a/sound/drivers/mpu401/mpu401.c
> +++ b/sound/drivers/mpu401/mpu401.c
> @@ -86,8 +86,7 @@ static int snd_mpu401_create(int dev, struct snd_card **rcard)
> }
>
> err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev], 0,
> - irq[dev], irq[dev] >= 0 ? IRQF_DISABLED : 0,
> - NULL);
> + irq[dev], IRQF_DISABLED, NULL);
> if (err < 0) {
> printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]);
> goto _err;
> diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
> index 2af0999..893a94f 100644
> --- a/sound/drivers/mpu401/mpu401_uart.c
> +++ b/sound/drivers/mpu401/mpu401_uart.c
> @@ -3,7 +3,7 @@
> * Routines for control of MPU-401 in UART mode
> *
> * MPU-401 supports UART mode which is not capable generate transmit
> - * interrupts thus output is done via polling. Also, if irq < 0, then
> + * interrupts thus output is done via polling. Without interrupt,
> * input is done also via polling. Do not expect good performance.
> *
> *
> @@ -374,7 +374,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
> /* first time - flush FIFO */
> while (max-- > 0)
> mpu->read(mpu, MPU401D(mpu));
> - if (mpu->irq < 0)
> + if (mpu->info_flags & MPU401_INFO_USE_TIMER)
> snd_mpu401_uart_add_timer(mpu, 1);
> }
>
> @@ -383,7 +383,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
> snd_mpu401_uart_input_read(mpu);
> spin_unlock_irqrestore(&mpu->input_lock, flags);
> } else {
> - if (mpu->irq < 0)
> + if (mpu->info_flags & MPU401_INFO_USE_TIMER)
> snd_mpu401_uart_remove_timer(mpu, 1);
> clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode);
> }
> @@ -496,7 +496,7 @@ static struct snd_rawmidi_ops snd_mpu401_uart_input =
> static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
> {
> struct snd_mpu401 *mpu = rmidi->private_data;
> - if (mpu->irq_flags && mpu->irq >= 0)
> + if (mpu->irq >= 0)
> free_irq(mpu->irq, (void *) mpu);
> release_and_free_resource(mpu->res);
> kfree(mpu);
> @@ -509,8 +509,8 @@ static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
> * @hardware: the hardware type, MPU401_HW_XXXX
> * @port: the base address of MPU401 port
> * @info_flags: bitflags MPU401_INFO_XXX
> - * @irq: the irq number, -1 if no interrupt for mpu
> - * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
> + * @irq: the irq number, -1 if not to be allocated
> + * @irq_flags: the irq request flags (IRQF_XXX)
> * @rrawmidi: the pointer to store the new rawmidi instance
> *
> * Creates a new MPU-401 instance.
> @@ -577,7 +577,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
> mpu->cport = port + 2;
> else
> mpu->cport = port + 1;
> - if (irq >= 0 && irq_flags) {
> + if (irq >= 0) {
> if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
> "MPU401 UART", (void *) mpu)) {
> snd_printk(KERN_ERR "mpu401_uart: "
> @@ -586,9 +586,10 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
> return -EBUSY;
> }
> }
> + if (irq < 0 && !(info_flags & MPU401_INFO_IRQ_HOOK))
> + info_flags |= MPU401_INFO_USE_TIMER;
> mpu->info_flags = info_flags;
> mpu->irq = irq;
> - mpu->irq_flags = irq_flags;
> if (card->shortname[0])
> snprintf(rmidi->name, sizeof(rmidi->name), "%s MIDI",
> card->shortname);
> diff --git a/sound/isa/als100.c b/sound/isa/als100.c
> index 20becc8..efa071c 100644
> --- a/sound/isa/als100.c
> +++ b/sound/isa/als100.c
> @@ -256,7 +256,7 @@ static int __devinit snd_card_als100_probe(int dev,
> mpu_type,
> mpu_port[dev], 0,
> mpu_irq[dev],
> - mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
> + IRQF_DISABLED,
> NULL) < 0)
> snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
> }
> diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
> index cb9153e..6c24248 100644
> --- a/sound/isa/cs423x/cs4231.c
> +++ b/sound/isa/cs423x/cs4231.c
> @@ -131,7 +131,7 @@ static int __devinit snd_cs4231_probe(struct device *dev, unsigned int n)
> mpu_irq[n] = -1;
> if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
> mpu_port[n], 0, mpu_irq[n],
> - mpu_irq[n] >= 0 ? IRQF_DISABLED : 0,
> + IRQF_DISABLED,
> NULL) < 0)
> dev_warn(dev, "MPU401 not detected\n");
> }
> diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
> index 999dc1e..17c9a3e 100644
> --- a/sound/isa/cs423x/cs4236.c
> +++ b/sound/isa/cs423x/cs4236.c
> @@ -450,7 +450,7 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
> if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
> mpu_port[dev], 0,
> mpu_irq[dev],
> - mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
> + IRQF_DISABLED, NULL) < 0)
> printk(KERN_WARNING IDENT ": MPU401 not detected\n");
> }
>
> diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
> index fb4d6b3..f5f3071 100644
> --- a/sound/isa/es18xx.c
> +++ b/sound/isa/es18xx.c
> @@ -2160,8 +2160,8 @@ static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
>
> if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
> err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
> - mpu_port[dev], 0,
> - irq[dev], 0, &chip->rmidi);
> + mpu_port[dev], MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi);
> if (err < 0)
> return err;
> }
> diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
> index 9b915e2..2003c67 100644
> --- a/sound/isa/opl3sa2.c
> +++ b/sound/isa/opl3sa2.c
> @@ -707,8 +707,9 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
> }
> if (midi_port[dev] >= 0x300 && midi_port[dev] < 0x340) {
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_OPL3SA2,
> - midi_port[dev], 0,
> - xirq, 0, &chip->rmidi)) < 0)
> + midi_port[dev],
> + MPU401_INFO_IRQ_HOOK, -1, 0,
> + &chip->rmidi)) < 0)
> return err;
> }
> sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
> diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
> index 8ccbcdd..fbd8c16 100644
> --- a/sound/isa/sb/jazz16.c
> +++ b/sound/isa/sb/jazz16.c
> @@ -322,7 +322,7 @@ static int __devinit snd_jazz16_probe(struct device *devptr, unsigned int dev)
> MPU401_HW_MPU401,
> mpu_port[dev], 0,
> mpu_irq[dev],
> - mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
> + IRQF_DISABLED,
> NULL) < 0)
> snd_printk(KERN_ERR "no MPU-401 device at 0x%lx\n",
> mpu_port[dev]);
> diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
> index 4d1c5a3..b10f021 100644
> --- a/sound/isa/sb/sb16.c
> +++ b/sound/isa/sb/sb16.c
> @@ -394,8 +394,9 @@ static int __devinit snd_sb16_probe(struct snd_card *card, int dev)
>
> if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB,
> - chip->mpu_port, 0,
> - xirq, 0, &chip->rmidi)) < 0)
> + chip->mpu_port,
> + MPU401_INFO_IRQ_HOOK, -1, 0,
> + &chip->rmidi)) < 0)
> return err;
> chip->rmidi_callback = snd_mpu401_uart_interrupt;
> }
> diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
> index a9c1af3..507434b 100644
> --- a/sound/pci/als4000.c
> +++ b/sound/pci/als4000.c
> @@ -931,8 +931,9 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
>
> if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000,
> iobase + ALS4K_IOB_30_MIDI_DATA,
> - MPU401_INFO_INTEGRATED,
> - pci->irq, 0, &chip->rmidi)) < 0) {
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi)) < 0) {
> printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n",
> iobase + ALS4K_IOB_30_MIDI_DATA);
> goto out_err;
> diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
> index 0dc8d25..fc2133b 100644
> --- a/sound/pci/au88x0/au88x0_mpu401.c
> +++ b/sound/pci/au88x0/au88x0_mpu401.c
> @@ -84,7 +84,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
> #ifdef VORTEX_MPU401_LEGACY
> if ((temp =
> snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330,
> - 0, 0, 0, &rmidi)) != 0) {
> + MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
> hwwrite(vortex->mmio, VORTEX_CTRL,
> (hwread(vortex->mmio, VORTEX_CTRL) &
> ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
> @@ -94,8 +94,8 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
> port = (unsigned long)(vortex->mmio + VORTEX_MIDI_DATA);
> if ((temp =
> snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port,
> - MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO,
> - 0, 0, &rmidi)) != 0) {
> + MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO |
> + MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
> hwwrite(vortex->mmio, VORTEX_CTRL,
> (hwread(vortex->mmio, VORTEX_CTRL) &
> ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
> diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
> index 579fc0d..b80e87b 100644
> --- a/sound/pci/azt3328.c
> +++ b/sound/pci/azt3328.c
> @@ -2652,8 +2652,9 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
> since our hardware ought to be similar, thus use same ID. */
> err = snd_mpu401_uart_new(
> card, 0,
> - MPU401_HW_AZT2320, chip->mpu_io, MPU401_INFO_INTEGRATED,
> - pci->irq, 0, &chip->rmidi
> + MPU401_HW_AZT2320, chip->mpu_io,
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi
> );
> if (err < 0) {
> snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n",
> diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
> index 9cf99fb..4776790 100644
> --- a/sound/pci/cmipci.c
> +++ b/sound/pci/cmipci.c
> @@ -3228,8 +3228,9 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
> iomidi,
> (integrated_midi ?
> - MPU401_INFO_INTEGRATED : 0),
> - cm->irq, 0, &cm->rmidi)) < 0) {
> + MPU401_INFO_INTEGRATED : 0) |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &cm->rmidi)) < 0) {
> printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
> }
> }
> diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
> index 26a5a2f..8f4ddc3 100644
> --- a/sound/pci/es1938.c
> +++ b/sound/pci/es1938.c
> @@ -1854,8 +1854,9 @@ static int __devinit snd_es1938_probe(struct pci_dev *pci,
> }
> }
> if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
> - chip->mpu_port, MPU401_INFO_INTEGRATED,
> - chip->irq, 0, &chip->rmidi) < 0) {
> + chip->mpu_port,
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi) < 0) {
> printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
> } else {
> // this line is vital for MIDI interrupt handling on ess-solo1
> diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
> index 99ea932..b6397d0 100644
> --- a/sound/pci/es1968.c
> +++ b/sound/pci/es1968.c
> @@ -2843,8 +2843,9 @@ static int __devinit snd_es1968_probe(struct pci_dev *pci,
> if (enable_mpu[dev]) {
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
> chip->io_port + ESM_MPU401_PORT,
> - MPU401_INFO_INTEGRATED,
> - chip->irq, 0, &chip->rmidi)) < 0) {
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi)) < 0) {
> printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
> }
> }
> diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
> index f9123f0..34a3414 100644
> --- a/sound/pci/fm801.c
> +++ b/sound/pci/fm801.c
> @@ -1306,8 +1306,9 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
> }
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
> FM801_REG(chip, MPU401_DATA),
> - MPU401_INFO_INTEGRATED,
> - chip->irq, 0, &chip->rmidi)) < 0) {
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi)) < 0) {
> snd_card_free(card);
> return err;
> }
> diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
> index 0ccc0eb..a1d9815 100644
> --- a/sound/pci/ice1712/ice1712.c
> +++ b/sound/pci/ice1712/ice1712.c
> @@ -2748,8 +2748,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
> if (!c->no_mpu401) {
> err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712,
> ICEREG(ice, MPU1_CTRL),
> - (c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED),
> - ice->irq, 0, &ice->rmidi[0]);
> + c->mpu401_1_info_flags |
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> + -1, 0, &ice->rmidi[0]);
> if (err < 0) {
> snd_card_free(card);
> return err;
> @@ -2764,8 +2765,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
> /* 2nd port used */
> err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712,
> ICEREG(ice, MPU2_CTRL),
> - (c->mpu401_2_info_flags | MPU401_INFO_INTEGRATED),
> - ice->irq, 0, &ice->rmidi[1]);
> + c->mpu401_2_info_flags |
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> + -1, 0, &ice->rmidi[1]);
>
> if (err < 0) {
> snd_card_free(card);
> diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
> index 0378126..3e5f0bd 100644
> --- a/sound/pci/maestro3.c
> +++ b/sound/pci/maestro3.c
> @@ -2820,8 +2820,8 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
> /* TODO enable MIDI IRQ and I/O */
> err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401,
> chip->iobase + MPU401_DATA_PORT,
> - MPU401_INFO_INTEGRATED,
> - chip->irq, 0, &chip->rmidi);
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rmidi);
> if (err < 0)
> printk(KERN_WARNING "maestro3: no MIDI support.\n");
> #endif
> diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
> index 82311fc..4aa3a80 100644
> --- a/sound/pci/oxygen/oxygen_lib.c
> +++ b/sound/pci/oxygen/oxygen_lib.c
> @@ -678,14 +678,15 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
> goto err_card;
>
> if (chip->model.device_config & (MIDI_OUTPUT | MIDI_INPUT)) {
> - unsigned int info_flags = MPU401_INFO_INTEGRATED;
> + unsigned int info_flags =
> + MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK;
> if (chip->model.device_config & MIDI_OUTPUT)
> info_flags |= MPU401_INFO_OUTPUT;
> if (chip->model.device_config & MIDI_INPUT)
> info_flags |= MPU401_INFO_INPUT;
> err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
> chip->addr + OXYGEN_MPU401,
> - info_flags, 0, 0,
> + info_flags, -1, 0,
> &chip->midi);
> if (err < 0)
> goto err_card;
> diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
> index e34ae14..0c2bc68 100644
> --- a/sound/pci/riptide/riptide.c
> +++ b/sound/pci/riptide/riptide.c
> @@ -2109,7 +2109,7 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
> val = mpu_port[dev];
> pci_write_config_word(chip->pci, PCI_EXT_MPU_Base, val);
> err = snd_mpu401_uart_new(card, 0, MPU401_HW_RIPTIDE,
> - val, 0, chip->irq, 0,
> + val, MPU401_INFO_IRQ_HOOK, -1, 0,
> &chip->rmidi);
> if (err < 0)
> snd_printk(KERN_WARNING
> diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
> index 2571a67..a439f17 100644
> --- a/sound/pci/sonicvibes.c
> +++ b/sound/pci/sonicvibes.c
> @@ -1493,8 +1493,10 @@ static int __devinit snd_sonic_probe(struct pci_dev *pci,
> return err;
> }
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES,
> - sonic->midi_port, MPU401_INFO_INTEGRATED,
> - sonic->irq, 0,
> + sonic->midi_port,
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0,
> &midi_uart)) < 0) {
> snd_card_free(card);
> return err;
> diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
> index d8a128f..6406a18 100644
> --- a/sound/pci/trident/trident.c
> +++ b/sound/pci/trident/trident.c
> @@ -148,8 +148,9 @@ static int __devinit snd_trident_probe(struct pci_dev *pci,
> if (trident->device != TRIDENT_DEVICE_ID_SI7018 &&
> (err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
> trident->midi_port,
> - MPU401_INFO_INTEGRATED,
> - trident->irq, 0, &trident->rmidi)) < 0) {
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &trident->rmidi)) < 0) {
> snd_card_free(card);
> return err;
> }
> diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
> index f03fd62..d2204ed 100644
> --- a/sound/pci/via82xx.c
> +++ b/sound/pci/via82xx.c
> @@ -2068,8 +2068,9 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
> pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg);
> if (chip->mpu_res) {
> if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
> - mpu_port, MPU401_INFO_INTEGRATED,
> - chip->irq, 0, &chip->rmidi) < 0) {
> + mpu_port, MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK, -1, 0,
> + &chip->rmidi) < 0) {
> printk(KERN_WARNING "unable to initialize MPU-401"
> " at 0x%lx, skipping\n", mpu_port);
> legacy &= ~VIA_FUNC_ENABLE_MIDI;
> diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
> index 511d576..553aa57 100644
> --- a/sound/pci/ymfpci/ymfpci.c
> +++ b/sound/pci/ymfpci/ymfpci.c
> @@ -305,8 +305,9 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
> if (chip->mpu_res) {
> if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
> mpu_port[dev],
> - MPU401_INFO_INTEGRATED,
> - pci->irq, 0, &chip->rawmidi)) < 0) {
> + MPU401_INFO_INTEGRATED |
> + MPU401_INFO_IRQ_HOOK,
> + -1, 0, &chip->rawmidi)) < 0) {
> printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]);
> legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */
> pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-13 7:12 ` Takashi Iwai
@ 2011-09-13 8:17 ` Clemens Ladisch
2011-09-13 9:24 ` Clemens Ladisch
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-13 8:17 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
Takashi Iwai wrote:
> Clemens Ladisch wrote:
> > ALSA: mpu401: clean up interrupt specification
> >
> > The semantics of snd_mpu401_uart_new()'s interrupt parameters are
> > somewhat counterintuitive: To prevent the function from allocating its
> > own interrupt, either the irq number must be invalid, or the irq_flags
> > parameter must be zero. At the same time, the irq parameter being
> > invalid specifies that the mpu401 code has to work without an interrupt
> > allocated by the caller. This implies that, if there is an interrupt
> > and it is allocated by the caller, the irq parameter must be set to
> > a valid-looking number which then isn't actually used.
> >
> > With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
> > which forces us to handle the parameters differently.
> >
> > This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
> > device interrupt is handled by the caller, and makes the allocation of
> > the interrupt to depend only on the irq parameter.
> >
> > Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
>
> This patch looks better indeed.
>
> However, if we are going to remove IRQF_DISABLED in near future, and
> all the callers use IRQF_DISABLED when requesting an irq, why not
> remove this argument now? Then the IRQF_DISABLED-removal patch will
> touch less code.
I wanted to change only the minimum amount of code needed to make the
IRQF_DISABLED-removal patch possible, and wait with further cleanups of
snd_mpu401_uart_new() until after that patch to avoid conflicts.
However, moving the IRQF_DISABLED into snd_mpu401_uart_new() avoids
those conflicts, so it's clearly better.
Regards,
Clemens
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-13 8:17 ` Clemens Ladisch
@ 2011-09-13 9:24 ` Clemens Ladisch
2011-09-14 8:49 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Clemens Ladisch @ 2011-09-13 9:24 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Yong Zhang, linux-kernel, Jaroslav Kysela, alsa-devel
Clemens Ladisch wrote:
> Takashi Iwai wrote:
> > However, if we are going to remove IRQF_DISABLED in near future, and
> > all the callers use IRQF_DISABLED when requesting an irq, why not
> > remove this argument now? Then the IRQF_DISABLED-removal patch will
> > touch less code.
>
> I wanted to change only the minimum amount of code needed to make the
> IRQF_DISABLED-removal patch possible, and wait with further cleanups of
> snd_mpu401_uart_new() until after that patch to avoid conflicts.
>
> However, moving the IRQF_DISABLED into snd_mpu401_uart_new() avoids
> those conflicts, so it's clearly better.
completely untested:
--8<---------------------------------------------------------------->8--
ALSA: mpu401: clean up interrupt specification
The semantics of snd_mpu401_uart_new()'s interrupt parameters are
somewhat counterintuitive: To prevent the function from allocating its
own interrupt, either the irq number must be invalid, or the irq_flags
parameter must be zero. At the same time, the irq parameter being
invalid specifies that the mpu401 code has to work without an interrupt
allocated by the caller. This implies that, if there is an interrupt
and it is allocated by the caller, the irq parameter must be set to
a valid-looking number which then isn't actually used.
With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
which forces us to handle the parameters differently.
This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
device interrupt is handled by the caller, and makes the allocation of
the interrupt to depend only on the irq parameter. As suggested by
Takashi, the irq_flags parameter was dropped because, when used, it had
the constant value IRQF_DISABLED.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
---
Documentation/DocBook/writing-an-alsa-driver.tmpl | 36 +++++++++++---------
include/sound/mpu401.h | 7 ++-
sound/drivers/mpu401/mpu401.c | 3 -
sound/drivers/mpu401/mpu401_uart.c | 20 +++++------
sound/isa/ad1816a/ad1816a.c | 2 -
sound/isa/als100.c | 1
sound/isa/azt2320.c | 3 -
sound/isa/cmi8330.c | 2 -
sound/isa/cs423x/cs4231.c | 1
sound/isa/cs423x/cs4236.c | 3 -
sound/isa/es1688/es1688.c | 2 -
sound/isa/es18xx.c | 4 +-
sound/isa/galaxy/galaxy.c | 3 -
sound/isa/gus/gusextreme.c | 3 -
sound/isa/msnd/msnd_pinnacle.c | 2 -
sound/isa/opl3sa2.c | 5 +-
sound/isa/opti9xx/miro.c | 3 -
sound/isa/opti9xx/opti92x-ad1848.c | 2 -
sound/isa/sb/jazz16.c | 1
sound/isa/sb/sb16.c | 5 +-
sound/isa/sc6000.c | 3 -
sound/isa/sscape.c | 3 -
sound/isa/wavefront/wavefront.c | 3 -
sound/pci/als4000.c | 5 +-
sound/pci/au88x0/au88x0_mpu401.c | 6 +--
sound/pci/azt3328.c | 5 +-
sound/pci/cmipci.c | 5 +-
sound/pci/es1938.c | 5 +-
sound/pci/es1968.c | 5 +-
sound/pci/fm801.c | 5 +-
sound/pci/ice1712/ice1712.c | 10 +++--
sound/pci/maestro3.c | 4 +-
sound/pci/oxygen/oxygen_lib.c | 6 +--
sound/pci/riptide/riptide.c | 2 -
sound/pci/sonicvibes.c | 7 ++-
sound/pci/trident/trident.c | 5 +-
sound/pci/via82xx.c | 5 +-
sound/pci/ymfpci/ymfpci.c | 5 +-
38 files changed, 103 insertions(+), 94 deletions(-)
diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
index 598c22f..5de23c0 100644
--- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
+++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
@@ -4288,7 +4288,7 @@ struct _snd_pcm_runtime {
<![CDATA[
struct snd_rawmidi *rmidi;
snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags,
- irq, irq_flags, &rmidi);
+ irq, &rmidi);
]]>
</programlisting>
</informalexample>
@@ -4343,6 +4343,13 @@ struct _snd_pcm_runtime {
by itself to start processing the output stream in the irq handler.
</para>
+ <para>
+ If the MPU-401 interface shares its interrupt with the other logical
+ devices on the card, set <constant>MPU401_INFO_IRQ_HOOK</constant>
+ (see <link linkend="midi-interface-interrupt-handler"><citetitle>
+ below</citetitle></link>).
+ </para>
+
<para>
Usually, the port address corresponds to the command port and
port + 1 corresponds to the data port. If not, you may change
@@ -4375,14 +4382,12 @@ struct _snd_pcm_runtime {
</para>
<para>
- The 6th argument specifies the irq number for UART. If the irq
- is already allocated, pass 0 to the 7th argument
- (<parameter>irq_flags</parameter>). Otherwise, pass the flags
- for irq allocation
- (<constant>SA_XXX</constant> bits) to it, and the irq will be
- reserved by the mpu401-uart layer. If the card doesn't generate
- UART interrupts, pass -1 as the irq number. Then a timer
- interrupt will be invoked for polling.
+ The 6th argument specifies the ISA irq number that will be
+ allocated. If no interrupt is to be allocated (because your
+ code is already allocating a shared interrupt, or because the
+ device does not use interrupts), pass -1 instead.
+ For a MPU-401 device without an interrupt, a polling timer
+ will be used instead.
</para>
</section>
@@ -4390,12 +4395,13 @@ struct _snd_pcm_runtime {
<title>Interrupt Handler</title>
<para>
When the interrupt is allocated in
- <function>snd_mpu401_uart_new()</function>, the private
- interrupt handler is used, hence you don't have anything else to do
- than creating the mpu401 stuff. Otherwise, you have to call
- <function>snd_mpu401_uart_interrupt()</function> explicitly when
- a UART interrupt is invoked and checked in your own interrupt
- handler.
+ <function>snd_mpu401_uart_new()</function>, an exclusive ISA
+ interrupt handler is automatically used, hence you don't have
+ anything else to do than creating the mpu401 stuff. Otherwise, you
+ have to set <constant>MPU401_INFO_IRQ_HOOK</constant>, and call
+ <function>snd_mpu401_uart_interrupt()</function> explicitly from your
+ own interrupt handler when it has determined that a UART interrupt
+ has occurred.
</para>
<para>
diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h
index 1f1d53f..20230db 100644
--- a/include/sound/mpu401.h
+++ b/include/sound/mpu401.h
@@ -50,7 +50,10 @@
#define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */
#define MPU401_INFO_MMIO (1 << 3) /* MMIO access */
#define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */
+#define MPU401_INFO_IRQ_HOOK (1 << 5) /* mpu401 irq handler is called
+ from driver irq handler */
#define MPU401_INFO_NO_ACK (1 << 6) /* No ACK cmd needed */
+#define MPU401_INFO_USE_TIMER (1 << 15) /* internal */
#define MPU401_MODE_BIT_INPUT 0
#define MPU401_MODE_BIT_OUTPUT 1
@@ -73,8 +76,7 @@ struct snd_mpu401 {
unsigned long port; /* base port of MPU-401 chip */
unsigned long cport; /* port + 1 (usually) */
struct resource *res; /* port resource */
- int irq; /* IRQ number of MPU-401 chip (-1 = poll) */
- int irq_flags;
+ int irq; /* IRQ number of MPU-401 chip */
unsigned long mode; /* MPU401_MODE_XXXX */
int timer_invoked;
@@ -131,7 +133,6 @@ int snd_mpu401_uart_new(struct snd_card *card,
unsigned long port,
unsigned int info_flags,
int irq,
- int irq_flags,
struct snd_rawmidi ** rrawmidi);
#endif /* __SOUND_MPU401_H */
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
index 149d05a..1c02852 100644
--- a/sound/drivers/mpu401/mpu401.c
+++ b/sound/drivers/mpu401/mpu401.c
@@ -86,8 +86,7 @@ static int snd_mpu401_create(int dev, struct snd_card **rcard)
}
err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev], 0,
- irq[dev], irq[dev] >= 0 ? IRQF_DISABLED : 0,
- NULL);
+ irq[dev], NULL);
if (err < 0) {
printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]);
goto _err;
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
index 2af0999..9d01c18 100644
--- a/sound/drivers/mpu401/mpu401_uart.c
+++ b/sound/drivers/mpu401/mpu401_uart.c
@@ -3,7 +3,7 @@
* Routines for control of MPU-401 in UART mode
*
* MPU-401 supports UART mode which is not capable generate transmit
- * interrupts thus output is done via polling. Also, if irq < 0, then
+ * interrupts thus output is done via polling. Without interrupt,
* input is done also via polling. Do not expect good performance.
*
*
@@ -374,7 +374,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
/* first time - flush FIFO */
while (max-- > 0)
mpu->read(mpu, MPU401D(mpu));
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_USE_TIMER)
snd_mpu401_uart_add_timer(mpu, 1);
}
@@ -383,7 +383,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
snd_mpu401_uart_input_read(mpu);
spin_unlock_irqrestore(&mpu->input_lock, flags);
} else {
- if (mpu->irq < 0)
+ if (mpu->info_flags & MPU401_INFO_USE_TIMER)
snd_mpu401_uart_remove_timer(mpu, 1);
clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode);
}
@@ -496,7 +496,7 @@ static struct snd_rawmidi_ops snd_mpu401_uart_input =
static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
{
struct snd_mpu401 *mpu = rmidi->private_data;
- if (mpu->irq_flags && mpu->irq >= 0)
+ if (mpu->irq >= 0)
free_irq(mpu->irq, (void *) mpu);
release_and_free_resource(mpu->res);
kfree(mpu);
@@ -509,8 +509,7 @@ static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
* @hardware: the hardware type, MPU401_HW_XXXX
* @port: the base address of MPU401 port
* @info_flags: bitflags MPU401_INFO_XXX
- * @irq: the irq number, -1 if no interrupt for mpu
- * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
+ * @irq: the ISA irq number, -1 if not to be allocated
* @rrawmidi: the pointer to store the new rawmidi instance
*
* Creates a new MPU-401 instance.
@@ -525,7 +524,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
unsigned short hardware,
unsigned long port,
unsigned int info_flags,
- int irq, int irq_flags,
+ int irq,
struct snd_rawmidi ** rrawmidi)
{
struct snd_mpu401 *mpu;
@@ -577,8 +576,8 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
mpu->cport = port + 2;
else
mpu->cport = port + 1;
- if (irq >= 0 && irq_flags) {
- if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
+ if (irq >= 0) {
+ if (request_irq(irq, snd_mpu401_uart_interrupt, IRQF_DISABLED,
"MPU401 UART", (void *) mpu)) {
snd_printk(KERN_ERR "mpu401_uart: "
"unable to grab IRQ %d\n", irq);
@@ -586,9 +585,10 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
return -EBUSY;
}
}
+ if (irq < 0 && !(info_flags & MPU401_INFO_IRQ_HOOK))
+ info_flags |= MPU401_INFO_USE_TIMER;
mpu->info_flags = info_flags;
mpu->irq = irq;
- mpu->irq_flags = irq_flags;
if (card->shortname[0])
snprintf(rmidi->name, sizeof(rmidi->name), "%s MIDI",
card->shortname);
diff --git a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c
index 3cb75bc..a87a2b5 100644
--- a/sound/isa/ad1816a/ad1816a.c
+++ b/sound/isa/ad1816a/ad1816a.c
@@ -204,7 +204,7 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
if (mpu_port[dev] > 0) {
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port[dev], 0, mpu_irq[dev], IRQF_DISABLED,
+ mpu_port[dev], 0, mpu_irq[dev],
NULL) < 0)
printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n", mpu_port[dev]);
}
diff --git a/sound/isa/als100.c b/sound/isa/als100.c
index 20becc8..706effd 100644
--- a/sound/isa/als100.c
+++ b/sound/isa/als100.c
@@ -256,7 +256,6 @@ static int __devinit snd_card_als100_probe(int dev,
mpu_type,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
NULL) < 0)
snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
}
diff --git a/sound/isa/azt2320.c b/sound/isa/azt2320.c
index aac8dc1..b7bdbf3 100644
--- a/sound/isa/azt2320.c
+++ b/sound/isa/azt2320.c
@@ -234,8 +234,7 @@ static int __devinit snd_card_azt2320_probe(int dev,
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
if (snd_mpu401_uart_new(card, 0, MPU401_HW_AZT2320,
mpu_port[dev], 0,
- mpu_irq[dev], IRQF_DISABLED,
- NULL) < 0)
+ mpu_irq[dev], NULL) < 0)
snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
}
diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c
index fe79a16..dca69f8 100644
--- a/sound/isa/cmi8330.c
+++ b/sound/isa/cmi8330.c
@@ -597,7 +597,7 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
if (mpuport[dev] != SNDRV_AUTO_PORT) {
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
mpuport[dev], 0, mpuirq[dev],
- IRQF_DISABLED, NULL) < 0)
+ NULL) < 0)
printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n",
mpuport[dev]);
}
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
index cb9153e..409fa0a 100644
--- a/sound/isa/cs423x/cs4231.c
+++ b/sound/isa/cs423x/cs4231.c
@@ -131,7 +131,6 @@ static int __devinit snd_cs4231_probe(struct device *dev, unsigned int n)
mpu_irq[n] = -1;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
mpu_port[n], 0, mpu_irq[n],
- mpu_irq[n] >= 0 ? IRQF_DISABLED : 0,
NULL) < 0)
dev_warn(dev, "MPU401 not detected\n");
}
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
index 999dc1e..0dbde46 100644
--- a/sound/isa/cs423x/cs4236.c
+++ b/sound/isa/cs423x/cs4236.c
@@ -449,8 +449,7 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
mpu_irq[dev] = -1;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
mpu_port[dev], 0,
- mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
+ mpu_irq[dev], NULL) < 0)
printk(KERN_WARNING IDENT ": MPU401 not detected\n");
}
diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c
index 0cde813..5493e9e 100644
--- a/sound/isa/es1688/es1688.c
+++ b/sound/isa/es1688/es1688.c
@@ -174,7 +174,7 @@ static int __devinit snd_es1688_probe(struct snd_card *card, unsigned int n)
chip->mpu_port > 0) {
error = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688,
chip->mpu_port, 0,
- mpu_irq[n], IRQF_DISABLED, NULL);
+ mpu_irq[n], NULL);
if (error < 0)
return error;
}
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index fb4d6b3..aeee8f8 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -2160,8 +2160,8 @@ static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
- mpu_port[dev], 0,
- irq[dev], 0, &chip->rmidi);
+ mpu_port[dev], MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi);
if (err < 0)
return err;
}
diff --git a/sound/isa/galaxy/galaxy.c b/sound/isa/galaxy/galaxy.c
index ee54df0..e51d324 100644
--- a/sound/isa/galaxy/galaxy.c
+++ b/sound/isa/galaxy/galaxy.c
@@ -585,8 +585,7 @@ static int __devinit snd_galaxy_probe(struct device *dev, unsigned int n)
if (mpu_port[n] >= 0) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port[n], 0, mpu_irq[n],
- IRQF_DISABLED, NULL);
+ mpu_port[n], 0, mpu_irq[n], NULL);
if (err < 0)
goto error;
}
diff --git a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c
index 008e8e5..c4733c0 100644
--- a/sound/isa/gus/gusextreme.c
+++ b/sound/isa/gus/gusextreme.c
@@ -317,8 +317,7 @@ static int __devinit snd_gusextreme_probe(struct device *dev, unsigned int n)
if (es1688->mpu_port >= 0x300) {
error = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688,
- es1688->mpu_port, 0,
- mpu_irq[n], IRQF_DISABLED, NULL);
+ es1688->mpu_port, 0, mpu_irq[n], NULL);
if (error < 0)
goto out;
}
diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c
index 91d6023..0961e2c 100644
--- a/sound/isa/msnd/msnd_pinnacle.c
+++ b/sound/isa/msnd/msnd_pinnacle.c
@@ -600,7 +600,7 @@ static int __devinit snd_msnd_attach(struct snd_card *card)
mpu_io[0],
MPU401_MODE_INPUT |
MPU401_MODE_OUTPUT,
- mpu_irq[0], IRQF_DISABLED,
+ mpu_irq[0],
&chip->rmidi);
if (err < 0) {
printk(KERN_ERR LOGNAME
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index 9b915e2..de99f47 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -707,8 +707,9 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
}
if (midi_port[dev] >= 0x300 && midi_port[dev] < 0x340) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_OPL3SA2,
- midi_port[dev], 0,
- xirq, 0, &chip->rmidi)) < 0)
+ midi_port[dev],
+ MPU401_INFO_IRQ_HOOK, -1,
+ &chip->rmidi)) < 0)
return err;
}
sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
diff --git a/sound/isa/opti9xx/miro.c b/sound/isa/opti9xx/miro.c
index 8c24102..d94d0f3 100644
--- a/sound/isa/opti9xx/miro.c
+++ b/sound/isa/opti9xx/miro.c
@@ -1377,8 +1377,7 @@ static int __devinit snd_miro_probe(struct snd_card *card)
rmidi = NULL;
else {
error = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port, 0, miro->mpu_irq, IRQF_DISABLED,
- &rmidi);
+ mpu_port, 0, miro->mpu_irq, &rmidi);
if (error < 0)
snd_printk(KERN_WARNING "no MPU-401 device at 0x%lx?\n",
mpu_port);
diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
index c35dc68..346e12b 100644
--- a/sound/isa/opti9xx/opti92x-ad1848.c
+++ b/sound/isa/opti9xx/opti92x-ad1848.c
@@ -914,7 +914,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card)
rmidi = NULL;
else {
error = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- mpu_port, 0, mpu_irq, IRQF_DISABLED, &rmidi);
+ mpu_port, 0, mpu_irq, &rmidi);
if (error)
snd_printk(KERN_WARNING "no MPU-401 device at 0x%lx?\n",
mpu_port);
diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
index 8ccbcdd..54e3c2c 100644
--- a/sound/isa/sb/jazz16.c
+++ b/sound/isa/sb/jazz16.c
@@ -322,7 +322,6 @@ static int __devinit snd_jazz16_probe(struct device *devptr, unsigned int dev)
MPU401_HW_MPU401,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
NULL) < 0)
snd_printk(KERN_ERR "no MPU-401 device at 0x%lx\n",
mpu_port[dev]);
diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
index 4d1c5a3..237f8bd 100644
--- a/sound/isa/sb/sb16.c
+++ b/sound/isa/sb/sb16.c
@@ -394,8 +394,9 @@ static int __devinit snd_sb16_probe(struct snd_card *card, int dev)
if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB,
- chip->mpu_port, 0,
- xirq, 0, &chip->rmidi)) < 0)
+ chip->mpu_port,
+ MPU401_INFO_IRQ_HOOK, -1,
+ &chip->rmidi)) < 0)
return err;
chip->rmidi_callback = snd_mpu401_uart_interrupt;
}
diff --git a/sound/isa/sc6000.c b/sound/isa/sc6000.c
index 9a8bbf6..207c161 100644
--- a/sound/isa/sc6000.c
+++ b/sound/isa/sc6000.c
@@ -658,8 +658,7 @@ static int __devinit snd_sc6000_probe(struct device *devptr, unsigned int dev)
if (snd_mpu401_uart_new(card, 0,
MPU401_HW_MPU401,
mpu_port[dev], 0,
- mpu_irq[dev], IRQF_DISABLED,
- NULL) < 0)
+ mpu_irq[dev], NULL) < 0)
snd_printk(KERN_ERR "no MPU-401 device at 0x%lx ?\n",
mpu_port[dev]);
}
diff --git a/sound/isa/sscape.c b/sound/isa/sscape.c
index e2d5d2d..f2379e1 100644
--- a/sound/isa/sscape.c
+++ b/sound/isa/sscape.c
@@ -825,8 +825,7 @@ static int __devinit create_mpu401(struct snd_card *card, int devnum,
int err;
err = snd_mpu401_uart_new(card, devnum, MPU401_HW_MPU401, port,
- MPU401_INFO_INTEGRATED, irq, IRQF_DISABLED,
- &rawmidi);
+ MPU401_INFO_INTEGRATED, irq, &rawmidi);
if (err == 0) {
struct snd_mpu401 *mpu = rawmidi->private_data;
mpu->open_input = mpu401_open;
diff --git a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c
index 711670e..83f291d 100644
--- a/sound/isa/wavefront/wavefront.c
+++ b/sound/isa/wavefront/wavefront.c
@@ -449,8 +449,7 @@ snd_wavefront_probe (struct snd_card *card, int dev)
if (cs4232_mpu_port[dev] > 0 && cs4232_mpu_port[dev] != SNDRV_AUTO_PORT) {
err = snd_mpu401_uart_new(card, midi_dev, MPU401_HW_CS4232,
cs4232_mpu_port[dev], 0,
- cs4232_mpu_irq[dev], IRQF_DISABLED,
- NULL);
+ cs4232_mpu_irq[dev], NULL);
if (err < 0) {
snd_printk (KERN_ERR "can't allocate CS4232 MPU-401 device\n");
return err;
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index a9c1af3..0462869 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -931,8 +931,9 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000,
iobase + ALS4K_IOB_30_MIDI_DATA,
- MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi)) < 0) {
printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n",
iobase + ALS4K_IOB_30_MIDI_DATA);
goto out_err;
diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
index 0dc8d25..e6c6a0f 100644
--- a/sound/pci/au88x0/au88x0_mpu401.c
+++ b/sound/pci/au88x0/au88x0_mpu401.c
@@ -84,7 +84,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
#ifdef VORTEX_MPU401_LEGACY
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330,
- 0, 0, 0, &rmidi)) != 0) {
+ MPU401_INFO_IRQ_HOOK, -1, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
@@ -94,8 +94,8 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
port = (unsigned long)(vortex->mmio + VORTEX_MIDI_DATA);
if ((temp =
snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port,
- MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO,
- 0, 0, &rmidi)) != 0) {
+ MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO |
+ MPU401_INFO_IRQ_HOOK, -1, &rmidi)) != 0) {
hwwrite(vortex->mmio, VORTEX_CTRL,
(hwread(vortex->mmio, VORTEX_CTRL) &
~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
index 579fc0d..d24fe42 100644
--- a/sound/pci/azt3328.c
+++ b/sound/pci/azt3328.c
@@ -2652,8 +2652,9 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
since our hardware ought to be similar, thus use same ID. */
err = snd_mpu401_uart_new(
card, 0,
- MPU401_HW_AZT2320, chip->mpu_io, MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rmidi
+ MPU401_HW_AZT2320, chip->mpu_io,
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi
);
if (err < 0) {
snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n",
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 9cf99fb..da9c732 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -3228,8 +3228,9 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
iomidi,
(integrated_midi ?
- MPU401_INFO_INTEGRATED : 0),
- cm->irq, 0, &cm->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED : 0) |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &cm->rmidi)) < 0) {
printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
}
}
diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
index 26a5a2f..718a264 100644
--- a/sound/pci/es1938.c
+++ b/sound/pci/es1938.c
@@ -1854,8 +1854,9 @@ static int __devinit snd_es1938_probe(struct pci_dev *pci,
}
}
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
- chip->mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ chip->mpu_port,
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi) < 0) {
printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
} else {
// this line is vital for MIDI interrupt handling on ess-solo1
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index 99ea932..407e4ab 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -2843,8 +2843,9 @@ static int __devinit snd_es1968_probe(struct pci_dev *pci,
if (enable_mpu[dev]) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
chip->io_port + ESM_MPU401_PORT,
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi)) < 0) {
printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
}
}
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index f9123f0..c55b1b3 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -1306,8 +1306,9 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
}
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
FM801_REG(chip, MPU401_DATA),
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
index 0ccc0eb..8531b98 100644
--- a/sound/pci/ice1712/ice1712.c
+++ b/sound/pci/ice1712/ice1712.c
@@ -2748,8 +2748,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
if (!c->no_mpu401) {
err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712,
ICEREG(ice, MPU1_CTRL),
- (c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[0]);
+ c->mpu401_1_info_flags |
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, &ice->rmidi[0]);
if (err < 0) {
snd_card_free(card);
return err;
@@ -2764,8 +2765,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
/* 2nd port used */
err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712,
ICEREG(ice, MPU2_CTRL),
- (c->mpu401_2_info_flags | MPU401_INFO_INTEGRATED),
- ice->irq, 0, &ice->rmidi[1]);
+ c->mpu401_2_info_flags |
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, &ice->rmidi[1]);
if (err < 0) {
snd_card_free(card);
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 0378126..2fd4bf2 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2820,8 +2820,8 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
/* TODO enable MIDI IRQ and I/O */
err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401,
chip->iobase + MPU401_DATA_PORT,
- MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi);
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rmidi);
if (err < 0)
printk(KERN_WARNING "maestro3: no MIDI support.\n");
#endif
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index 82311fc..53e5508 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -678,15 +678,15 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
goto err_card;
if (chip->model.device_config & (MIDI_OUTPUT | MIDI_INPUT)) {
- unsigned int info_flags = MPU401_INFO_INTEGRATED;
+ unsigned int info_flags =
+ MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK;
if (chip->model.device_config & MIDI_OUTPUT)
info_flags |= MPU401_INFO_OUTPUT;
if (chip->model.device_config & MIDI_INPUT)
info_flags |= MPU401_INFO_INPUT;
err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
chip->addr + OXYGEN_MPU401,
- info_flags, 0, 0,
- &chip->midi);
+ info_flags, -1, &chip->midi);
if (err < 0)
goto err_card;
}
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index e34ae14..88cc776 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -2109,7 +2109,7 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
val = mpu_port[dev];
pci_write_config_word(chip->pci, PCI_EXT_MPU_Base, val);
err = snd_mpu401_uart_new(card, 0, MPU401_HW_RIPTIDE,
- val, 0, chip->irq, 0,
+ val, MPU401_INFO_IRQ_HOOK, -1,
&chip->rmidi);
if (err < 0)
snd_printk(KERN_WARNING
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index 2571a67..c500816 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -1493,9 +1493,10 @@ static int __devinit snd_sonic_probe(struct pci_dev *pci,
return err;
}
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES,
- sonic->midi_port, MPU401_INFO_INTEGRATED,
- sonic->irq, 0,
- &midi_uart)) < 0) {
+ sonic->midi_port,
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &midi_uart)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
index d8a128f..5e707ef 100644
--- a/sound/pci/trident/trident.c
+++ b/sound/pci/trident/trident.c
@@ -148,8 +148,9 @@ static int __devinit snd_trident_probe(struct pci_dev *pci,
if (trident->device != TRIDENT_DEVICE_ID_SI7018 &&
(err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
trident->midi_port,
- MPU401_INFO_INTEGRATED,
- trident->irq, 0, &trident->rmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &trident->rmidi)) < 0) {
snd_card_free(card);
return err;
}
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index f03fd62..35d5f43 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -2068,8 +2068,9 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg);
if (chip->mpu_res) {
if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
- mpu_port, MPU401_INFO_INTEGRATED,
- chip->irq, 0, &chip->rmidi) < 0) {
+ mpu_port, MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK, -1,
+ &chip->rmidi) < 0) {
printk(KERN_WARNING "unable to initialize MPU-401"
" at 0x%lx, skipping\n", mpu_port);
legacy &= ~VIA_FUNC_ENABLE_MIDI;
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 511d576..3253b04 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -305,8 +305,9 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
if (chip->mpu_res) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
mpu_port[dev],
- MPU401_INFO_INTEGRATED,
- pci->irq, 0, &chip->rawmidi)) < 0) {
+ MPU401_INFO_INTEGRATED |
+ MPU401_INFO_IRQ_HOOK,
+ -1, &chip->rawmidi)) < 0) {
printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]);
legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */
pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
^ permalink raw reply related [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-13 9:24 ` Clemens Ladisch
@ 2011-09-14 8:49 ` Yong Zhang
2011-09-14 9:06 ` Takashi Iwai
0 siblings, 1 reply; 70+ messages in thread
From: Yong Zhang @ 2011-09-14 8:49 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: Takashi Iwai, linux-kernel, Jaroslav Kysela, alsa-devel
On Tue, Sep 13, 2011 at 11:24:41AM +0200, Clemens Ladisch wrote:
[snip]
>
> completely untested:
>
> --8<---------------------------------------------------------------->8--
> ALSA: mpu401: clean up interrupt specification
>
> The semantics of snd_mpu401_uart_new()'s interrupt parameters are
> somewhat counterintuitive: To prevent the function from allocating its
> own interrupt, either the irq number must be invalid, or the irq_flags
> parameter must be zero. At the same time, the irq parameter being
> invalid specifies that the mpu401 code has to work without an interrupt
> allocated by the caller. This implies that, if there is an interrupt
> and it is allocated by the caller, the irq parameter must be set to
> a valid-looking number which then isn't actually used.
>
> With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
> which forces us to handle the parameters differently.
>
> This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
> device interrupt is handled by the caller, and makes the allocation of
> the interrupt to depend only on the irq parameter. As suggested by
> Takashi, the irq_flags parameter was dropped because, when used, it had
> the constant value IRQF_DISABLED.
Thanks Clemens. Your patch will eventually save much lines from mine ,
actually I only need to touch request_irq() in snd_mpu401_uart_new().
But do you have any idea by which tree this patch will go to mainline?
Thus I could make a new patch based on it :)
Thanks,
Yong
>
> Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-14 8:49 ` Yong Zhang
@ 2011-09-14 9:06 ` Takashi Iwai
2011-09-14 9:15 ` Yong Zhang
0 siblings, 1 reply; 70+ messages in thread
From: Takashi Iwai @ 2011-09-14 9:06 UTC (permalink / raw)
To: Yong Zhang; +Cc: Clemens Ladisch, linux-kernel, Jaroslav Kysela, alsa-devel
At Wed, 14 Sep 2011 16:49:57 +0800,
Yong Zhang wrote:
>
> On Tue, Sep 13, 2011 at 11:24:41AM +0200, Clemens Ladisch wrote:
> [snip]
> >
> > completely untested:
> >
> > --8<---------------------------------------------------------------->8--
> > ALSA: mpu401: clean up interrupt specification
> >
> > The semantics of snd_mpu401_uart_new()'s interrupt parameters are
> > somewhat counterintuitive: To prevent the function from allocating its
> > own interrupt, either the irq number must be invalid, or the irq_flags
> > parameter must be zero. At the same time, the irq parameter being
> > invalid specifies that the mpu401 code has to work without an interrupt
> > allocated by the caller. This implies that, if there is an interrupt
> > and it is allocated by the caller, the irq parameter must be set to
> > a valid-looking number which then isn't actually used.
> >
> > With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
> > which forces us to handle the parameters differently.
> >
> > This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
> > device interrupt is handled by the caller, and makes the allocation of
> > the interrupt to depend only on the irq parameter. As suggested by
> > Takashi, the irq_flags parameter was dropped because, when used, it had
> > the constant value IRQF_DISABLED.
>
> Thanks Clemens. Your patch will eventually save much lines from mine ,
> actually I only need to touch request_irq() in snd_mpu401_uart_new().
>
> But do you have any idea by which tree this patch will go to mainline?
> Thus I could make a new patch based on it :)
I applied Clemens' patch now to sound git tree.
The temporary location is:
git://github.com/tiwai/sound.git
In general, such cross-tree patches should be based on linux-next,
which should contain the latest subsystem tree. But as kernel.org is
down now, you can check each subsystem tree.
thanks,
Takashi
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
2011-09-14 9:06 ` Takashi Iwai
@ 2011-09-14 9:15 ` Yong Zhang
0 siblings, 0 replies; 70+ messages in thread
From: Yong Zhang @ 2011-09-14 9:15 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Clemens Ladisch, linux-kernel, Jaroslav Kysela, alsa-devel
On Wed, Sep 14, 2011 at 5:06 PM, Takashi Iwai <tiwai@suse.de> wrote:
> At Wed, 14 Sep 2011 16:49:57 +0800,
> Yong Zhang wrote:
>>
>> On Tue, Sep 13, 2011 at 11:24:41AM +0200, Clemens Ladisch wrote:
>> [snip]
>> >
>> > completely untested:
>> >
>> > --8<---------------------------------------------------------------->8--
>> > ALSA: mpu401: clean up interrupt specification
>> >
>> > The semantics of snd_mpu401_uart_new()'s interrupt parameters are
>> > somewhat counterintuitive: To prevent the function from allocating its
>> > own interrupt, either the irq number must be invalid, or the irq_flags
>> > parameter must be zero. At the same time, the irq parameter being
>> > invalid specifies that the mpu401 code has to work without an interrupt
>> > allocated by the caller. This implies that, if there is an interrupt
>> > and it is allocated by the caller, the irq parameter must be set to
>> > a valid-looking number which then isn't actually used.
>> >
>> > With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
>> > which forces us to handle the parameters differently.
>> >
>> > This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
>> > device interrupt is handled by the caller, and makes the allocation of
>> > the interrupt to depend only on the irq parameter. As suggested by
>> > Takashi, the irq_flags parameter was dropped because, when used, it had
>> > the constant value IRQF_DISABLED.
>>
>> Thanks Clemens. Your patch will eventually save much lines from mine ,
>> actually I only need to touch request_irq() in snd_mpu401_uart_new().
>>
>> But do you have any idea by which tree this patch will go to mainline?
>> Thus I could make a new patch based on it :)
>
> I applied Clemens' patch now to sound git tree.
> The temporary location is:
> git://github.com/tiwai/sound.git
>
> In general, such cross-tree patches should be based on linux-next,
> which should contain the latest subsystem tree. But as kernel.org is
> down now, you can check each subsystem tree.
Thanks for your guide, Takashi !
Will refresh my patch based on that.
Thanks,
Yong
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 41/62] mfd: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-42-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-15 19:57 ` Samuel Ortiz
0 siblings, 0 replies; 70+ messages in thread
From: Samuel Ortiz @ 2011-09-15 19:57 UTC (permalink / raw)
To: Yong Zhang; +Cc: linux-kernel, tglx, mingo
Hi Yong,
On Wed, Sep 07, 2011 at 04:10:38PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
Patch applied, thanks.
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 36/62] i2c: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-37-git-send-email-yong.zhang0@gmail.com>
2011-09-09 7:59 ` [PATCH 36/62] i2c: " Wolfram Sang
2011-09-11 21:36 ` Linus Walleij
@ 2011-09-19 8:44 ` Barry Song
2 siblings, 0 replies; 70+ messages in thread
From: Barry Song @ 2011-09-19 8:44 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, Dave Airlie, linux-i2c, Sonic Zhang, Kukjin Kim,
Joe Perches, mingo, Jean Delvare (PC drivers, core),
Alessandro Rubini, Nobuhiro Iwamatsu, Lucas De Marchi,
Magnus Damm, Simon Horman, Ben Dooks (embedded platforms), tglx,
linux-arm-kernel, Linus Walleij, Jiri Kosina, Paul Mundt,
STEricsson, uclinux-dist-devel, Guennadi Liakhovetski
2011/9/7 Yong Zhang <yong.zhang0@gmail.com>:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: Barry Song <21cnbao@gmail.com>
> ---
> drivers/i2c/busses/i2c-bfin-twi.c | 4 ++--
> drivers/i2c/busses/i2c-designware.c | 2 +-
> drivers/i2c/busses/i2c-highlander.c | 2 +-
> drivers/i2c/busses/i2c-nomadik.c | 2 +-
> drivers/i2c/busses/i2c-nuc900.c | 2 +-
> drivers/i2c/busses/i2c-pmcmsp.c | 2 +-
> drivers/i2c/busses/i2c-s3c2410.c | 2 +-
> drivers/i2c/busses/i2c-sh7760.c | 2 +-
> drivers/i2c/busses/i2c-sh_mobile.c | 2 +-
> drivers/i2c/busses/i2c-stu300.c | 2 +-
> 10 files changed, 11 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 08/62] frv: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
` (26 preceding siblings ...)
[not found] ` <1315383059-3673-42-git-send-email-yong.zhang0@gmail.com>
@ 2011-09-20 15:03 ` David Howells
2011-09-20 15:04 ` [PATCH 15/62] mn10300: " David Howells
28 siblings, 0 replies; 70+ messages in thread
From: David Howells @ 2011-09-20 15:03 UTC (permalink / raw)
To: Yong Zhang; +Cc: dhowells, linux-kernel, tglx, mingo, Torben Hohn
Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: David Howells <dhowells@redhat.com>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 15/62] mn10300: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
` (27 preceding siblings ...)
2011-09-20 15:03 ` [PATCH 08/62] frv: " David Howells
@ 2011-09-20 15:04 ` David Howells
28 siblings, 0 replies; 70+ messages in thread
From: David Howells @ 2011-09-20 15:04 UTC (permalink / raw)
To: Yong Zhang
Cc: dhowells, linux-kernel, tglx, mingo, Koichi Yasutake, Mark Salter,
John Stultz, Kiyoshi Owada, Akira Takeuchi, Andrew Morton,
Russell King, Martin Schwidefsky, linux-am33-list
Yong Zhang <yong.zhang0@gmail.com> wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Acked-by: David Howells <dhowells@redhat.com>
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 54/62] TTY: irq: Remove IRQF_DISABLED
[not found] ` <1315383059-3673-55-git-send-email-yong.zhang0@gmail.com>
2011-09-09 9:49 ` [PATCH 54/62] TTY: " Tobias Klauser
@ 2011-09-22 23:04 ` Greg KH
2011-09-22 23:08 ` Greg KH
1 sibling, 1 reply; 70+ messages in thread
From: Greg KH @ 2011-09-22 23:04 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Greg Kroah-Hartman, Alan Cox,
Tobias Klauser, Sonic Zhang, Mikael Starvik, Jesper Nilsson,
Lucas De Marchi, Jesper Juhl, Benjamin Herrenschmidt, Jiri Kosina,
linuxppc-dev, linux-serial, nios2-dev, uclinux-dist-devel,
linux-cris-kernel
On Wed, Sep 07, 2011 at 04:10:51PM +0800, Yong Zhang wrote:
> This flag is a NOOP and can be removed now.
>
> Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> Acked-by: Tobias Klauser <tklauser@distanz.ch>
> ---
> drivers/tty/amiserial.c | 2 +-
> drivers/tty/cyclades.c | 2 +-
> drivers/tty/hvc/hvc_irq.c | 2 +-
> drivers/tty/hvc/hvcs.c | 2 +-
> drivers/tty/hvc/hvsi.c | 2 +-
> drivers/tty/isicom.c | 2 +-
> drivers/tty/serial/68328serial.c | 2 +-
> drivers/tty/serial/altera_jtaguart.c | 2 +-
> drivers/tty/serial/altera_uart.c | 2 +-
> drivers/tty/serial/bfin_5xx.c | 8 ++++----
This file isn't in my tree anymore, so I can't apply this :(
^ permalink raw reply [flat|nested] 70+ messages in thread
* Re: [PATCH 54/62] TTY: irq: Remove IRQF_DISABLED
2011-09-22 23:04 ` Greg KH
@ 2011-09-22 23:08 ` Greg KH
0 siblings, 0 replies; 70+ messages in thread
From: Greg KH @ 2011-09-22 23:08 UTC (permalink / raw)
To: Yong Zhang
Cc: linux-kernel, tglx, mingo, Greg Kroah-Hartman, Alan Cox,
Tobias Klauser, Sonic Zhang, Mikael Starvik, Jesper Nilsson,
Lucas De Marchi, Jesper Juhl, Benjamin Herrenschmidt, Jiri Kosina,
linuxppc-dev, linux-serial, nios2-dev, uclinux-dist-devel,
linux-cris-kernel
On Thu, Sep 22, 2011 at 04:04:20PM -0700, Greg KH wrote:
> On Wed, Sep 07, 2011 at 04:10:51PM +0800, Yong Zhang wrote:
> > This flag is a NOOP and can be removed now.
> >
> > Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
> > Acked-by: Tobias Klauser <tklauser@distanz.ch>
> > ---
> > drivers/tty/amiserial.c | 2 +-
> > drivers/tty/cyclades.c | 2 +-
> > drivers/tty/hvc/hvc_irq.c | 2 +-
> > drivers/tty/hvc/hvcs.c | 2 +-
> > drivers/tty/hvc/hvsi.c | 2 +-
> > drivers/tty/isicom.c | 2 +-
> > drivers/tty/serial/68328serial.c | 2 +-
> > drivers/tty/serial/altera_jtaguart.c | 2 +-
> > drivers/tty/serial/altera_uart.c | 2 +-
> > drivers/tty/serial/bfin_5xx.c | 8 ++++----
>
> This file isn't in my tree anymore, so I can't apply this :(
>
Oh nevermind, I see your newer patch, I'll take that one, sorry.
greg k-h
^ permalink raw reply [flat|nested] 70+ messages in thread
end of thread, other threads:[~2011-09-22 23:08 UTC | newest]
Thread overview: 70+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1315383059-3673-9-git-send-email-yong.zhang0@gmail.com>
[not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
2011-09-07 8:10 ` [PATCH 13/62] microblaze: irq: Remove IRQF_DISABLED Yong Zhang
2011-09-07 8:10 ` [PATCH 17/62] powerpc: " Yong Zhang
2011-09-08 16:41 ` Arnd Bergmann
2011-09-07 8:10 ` [PATCH 18/62] score: " Yong Zhang
2011-09-07 8:10 ` [PATCH 24/62] xtensa: " Yong Zhang
2011-09-07 8:10 ` [PATCH 38/62] Input: " Yong Zhang
2011-09-07 23:21 ` Dmitry Torokhov
2011-09-07 8:10 ` [PATCH 39/62] ISDN: " Yong Zhang
[not found] ` <1315383059-3673-30-git-send-email-yong.zhang0@gmail.com>
2011-09-07 14:26 ` [PATCH 29/62] block: " Miller, Mike (OS Dev)
[not found] ` <1315383059-3673-34-git-send-email-yong.zhang0@gmail.com>
2011-09-07 15:02 ` [PATCH 33/62] dmaengine: " Vinod Koul
2011-09-11 21:38 ` Linus Walleij
[not found] ` <1315383059-3673-52-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:04 ` [PATCH 51/62] powerpc/ps3: " Geoff Levand
[not found] ` <1315383059-3673-21-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:12 ` [PATCH 20/62] sparc: " David Miller
2011-09-07 17:31 ` Thomas Gleixner
2011-09-07 17:33 ` Thomas Gleixner
2011-09-07 17:51 ` David Miller
2011-09-07 17:57 ` Thomas Gleixner
2011-09-07 18:14 ` David Miller
2011-09-07 18:43 ` Thomas Gleixner
2011-09-08 3:15 ` Yong Zhang
[not found] ` <1315383059-3673-61-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:12 ` [PATCH 60/62] sound: " Mark Brown
[not found] ` <1315383059-3673-54-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:37 ` [PATCH 53/62] spi: " Grant Likely
[not found] ` <1315383059-3673-6-git-send-email-yong.zhang0@gmail.com>
2011-09-07 20:29 ` [PATCH 05/62] avr32: " Hans-Christian Egtvedt
[not found] ` <1315383059-3673-13-git-send-email-yong.zhang0@gmail.com>
2011-09-08 3:18 ` [PATCH 12/62] m64k: " Greg Ungerer
2011-09-09 15:05 ` Geert Uytterhoeven
2011-09-10 2:01 ` Yong Zhang
[not found] ` <1315383059-3673-7-git-send-email-yong.zhang0@gmail.com>
2011-09-08 8:12 ` [uclinux-dist-devel] [PATCH 06/62] Blackfin: " Bob Liu
[not found] ` <1315383059-3673-26-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:40 ` [PATCH 25/62] staging: " Marc Dietich
2011-09-08 13:58 ` Yong Zhang
2011-09-08 14:52 ` Greg KH
2011-09-09 1:12 ` Yong Zhang
[not found] ` <1315383059-3673-3-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:53 ` [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags Clemens Ladisch
2011-09-08 13:37 ` Yong Zhang
2011-09-08 13:58 ` Clemens Ladisch
2011-09-08 14:45 ` Yong Zhang
2011-09-08 20:27 ` Clemens Ladisch
2011-09-09 1:31 ` Yong Zhang
2011-09-11 15:10 ` Clemens Ladisch
2011-09-12 10:47 ` Takashi Iwai
2011-09-12 13:16 ` Clemens Ladisch
2011-09-12 20:23 ` Clemens Ladisch
2011-09-13 7:12 ` Takashi Iwai
2011-09-13 8:17 ` Clemens Ladisch
2011-09-13 9:24 ` Clemens Ladisch
2011-09-14 8:49 ` Yong Zhang
2011-09-14 9:06 ` Takashi Iwai
2011-09-14 9:15 ` Yong Zhang
[not found] ` <1315383059-3673-32-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:55 ` [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED Clemens Ladisch
2011-09-08 15:29 ` Corey Minyard
2011-09-08 16:04 ` Arnd Bergmann
[not found] ` <1315383059-3673-62-git-send-email-yong.zhang0@gmail.com>
2011-09-08 21:38 ` [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED Randy Dunlap
2011-09-09 1:38 ` Yong Zhang
2011-09-09 1:48 ` [UPDATED] " Yong Zhang
2011-09-09 8:25 ` Rolf Eike Beer
2011-09-09 8:41 ` Yong Zhang
[not found] ` <1315383059-3673-45-git-send-email-yong.zhang0@gmail.com>
2011-09-09 8:03 ` [PATCH 44/62] mtd: irq: Remove IRQF_DISABLED Wolfram Sang
[not found] ` <1315383059-3673-48-git-send-email-yong.zhang0@gmail.com>
2011-09-09 8:04 ` [PATCH 47/62] pcmcia: " Wolfram Sang
[not found] ` <1315383059-3673-55-git-send-email-yong.zhang0@gmail.com>
2011-09-09 9:49 ` [PATCH 54/62] TTY: " Tobias Klauser
2011-09-22 23:04 ` Greg KH
2011-09-22 23:08 ` Greg KH
[not found] ` <1315383059-3673-8-git-send-email-yong.zhang0@gmail.com>
2011-09-09 15:10 ` [PATCH 07/62] cris: " Jesper Nilsson
[not found] ` <1315383059-3673-37-git-send-email-yong.zhang0@gmail.com>
2011-09-09 7:59 ` [PATCH 36/62] i2c: " Wolfram Sang
2011-09-11 21:36 ` Linus Walleij
2011-09-19 8:44 ` Barry Song
[not found] ` <1315383059-3673-59-git-send-email-yong.zhang0@gmail.com>
2011-09-09 8:01 ` [PATCH 58/62] watchdog: " Wolfram Sang
2011-09-11 21:37 ` Linus Walleij
[not found] ` <1315383059-3673-53-git-send-email-yong.zhang0@gmail.com>
2011-09-11 21:38 ` [PATCH 52/62] rtc: " Linus Walleij
[not found] ` <1315383059-3673-42-git-send-email-yong.zhang0@gmail.com>
2011-09-15 19:57 ` [PATCH 41/62] mfd: " Samuel Ortiz
2011-09-20 15:03 ` [PATCH 08/62] frv: " David Howells
2011-09-20 15:04 ` [PATCH 15/62] mn10300: " David Howells
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).