ide: remove IRQF_DISABLED from IRQ flags for IDE IRQ handler
IRQF_DISABLED is not needed because the first thing that ide_intr() (IDE IRQ handler) does is calling spin_lock_irqsave() which disables local IRQs (IRQ unmasking is later handled by drive->unmask). kernel/irq/handle.c: irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) ... if (!(action->flags & IRQF_DISABLED)) local_irq_enable_in_hardirq(); do { ret = action->handler(irq, action->dev_id); if (ret == IRQ_HANDLED) status |= action->flags; retval |= ret; action = action->next; } while (action); ... drivers/ide/ide-io.c: irqreturn_t ide_intr (int irq, void *dev_id) ... spin_lock_irqsave(&ide_lock, flags); ... spin_unlock(&ide_lock); ... if (drive->unmask) local_irq_enable_in_hardirq(); ... Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
d26805fd02
commit
7b5da4be37
|
@ -968,11 +968,6 @@ static int ide_init_queue(ide_drive_t *drive)
|
||||||
* Much of the code is for correctly detecting/handling irq sharing
|
* Much of the code is for correctly detecting/handling irq sharing
|
||||||
* and irq serialization situations. This is somewhat complex because
|
* and irq serialization situations. This is somewhat complex because
|
||||||
* it handles static as well as dynamic (PCMCIA) IDE interfaces.
|
* it handles static as well as dynamic (PCMCIA) IDE interfaces.
|
||||||
*
|
|
||||||
* The IRQF_DISABLED in sa_flags means ide_intr() is always entered with
|
|
||||||
* interrupts completely disabled. This can be bad for interrupt latency,
|
|
||||||
* but anything else has led to problems on some machines. We re-enable
|
|
||||||
* interrupts as much as we can safely do in most places.
|
|
||||||
*/
|
*/
|
||||||
static int init_irq (ide_hwif_t *hwif)
|
static int init_irq (ide_hwif_t *hwif)
|
||||||
{
|
{
|
||||||
|
@ -1055,17 +1050,13 @@ static int init_irq (ide_hwif_t *hwif)
|
||||||
* Allocate the irq, if not already obtained for another hwif
|
* Allocate the irq, if not already obtained for another hwif
|
||||||
*/
|
*/
|
||||||
if (!match || match->irq != hwif->irq) {
|
if (!match || match->irq != hwif->irq) {
|
||||||
int sa = IRQF_DISABLED;
|
int sa = 0;
|
||||||
#if defined(__mc68000__) || defined(CONFIG_APUS)
|
#if defined(__mc68000__) || defined(CONFIG_APUS)
|
||||||
sa = IRQF_SHARED;
|
sa = IRQF_SHARED;
|
||||||
#endif /* __mc68000__ || CONFIG_APUS */
|
#endif /* __mc68000__ || CONFIG_APUS */
|
||||||
|
|
||||||
if (IDE_CHIPSET_IS_PCI(hwif->chipset)) {
|
if (IDE_CHIPSET_IS_PCI(hwif->chipset))
|
||||||
sa = IRQF_SHARED;
|
sa = IRQF_SHARED;
|
||||||
#ifndef CONFIG_IDEPCI_SHARE_IRQ
|
|
||||||
sa |= IRQF_DISABLED;
|
|
||||||
#endif /* CONFIG_IDEPCI_SHARE_IRQ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hwif->io_ports[IDE_CONTROL_OFFSET])
|
if (hwif->io_ports[IDE_CONTROL_OFFSET])
|
||||||
/* clear nIEN */
|
/* clear nIEN */
|
||||||
|
|
Loading…
Reference in a new issue