aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-probe.c
Commit message (Collapse)AuthorAge
* ide: fix comment in init_irq()Bartlomiej Zolnierkiewicz2008-02-10
| | | | | | APUS support is gone... Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: ide_init_port() bugfixBartlomiej Zolnierkiewicz2008-02-10
| | | | | | | | | | | | | | | | | On Sunday 10 February 2008, Atsushi Nemoto wrote: > On Sun, 06 Jan 2008 18:03:10 +0100, Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> wrote: > > + /* reset DMA masks only for SFF-style DMA controllers */ > > + if ((d->host_flags && IDE_HFLAG_NO_DMA) == 0 && hwif->dma_base == 0) > > + hwif->swdma_mask = hwif->mwdma_mask = hwif->ultra_mask = 0; > > It might be too late, but "host_flags && IDE_HFLAGS_NO_DMA" seems > wrong for me. Fix regression caused by commmit c413b9b94d9a8e7548cc4b2e04b7df0439ce76fd ("ide: add struct ide_port_info instances to legacy host drivers"). Reported-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* cleanup after APUS removalAdrian Bunk2008-02-06
| | | | | | | | | | | | | After the APUS removal, some code can be removed. Signed-off-by: Adrian Bunk <bunk@kernel.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Cc: Karsten Keil <kkeil@suse.de> Cc: James Bottomley <James.Bottomley@steeleye.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* ide: add ide_read_[alt]status() inline helpersBartlomiej Zolnierkiewicz2008-02-05
| | | | | Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide-probe: remove needless Status register readsBartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | * Cache value read from the Status register in 'stat' variable in do_probe() and enable_nest(), then remove remove needless Status register reads. While at it: * Add proper KERN_* levels to printk() calls. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move create_proc_ide_drives() call to ide_device_add_all()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | * Un-static create_proc_ide_drives() and call it from ide_device_add_all(). While at it: * Rename create_proc_ide_drives() to ide_proc_port_register_devices(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move hwif->present check out from ide_proc_register_port()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | Move hwif->present check out from ide_proc_register_port() to ide_device_add_all(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: factor out devices setup from ide_acpi_init()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | | | | * Factor out devices setup from ide_acpi_init() to ide_acpi_port_init_devices(). * Call ide_acpi_port_init_devices() in ide_device_add_all(). While at it: * Remove no longer needed 'drive' field from struct ide_acpi_drive_link. There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move ide_acpi_init() call to ide_device_add_all()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: factor out devices setup from init_irq()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | * Factor out devices setup from init_irq() to ide_port_setup_devices(). While at it: * Do devices setup after printing port information. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: factor out adding drive to hwgroup from init_irq()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | Factor out adding drive to hwgroup from init_irq() to ide_add_drive_to_hwgroup(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move hwif->rqsize init from ide_init_queue() to init_irq()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | Move hwif->rqsize init from ide_init_queue() to init_irq(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: merge init_gendisk() into hwif_register_devices()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: call init_gendisk() after ide_acpi_init()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move blk_register_region() call out from init_gendisk()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | Move blk_register_region() call out from init_gendisk() to hwif_init(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: skip not present devices in init_gendisk()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | No need to initialize drive->gendev and waste memory on IDE settings for not present devices. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove incorrect init_gendisk() commentBartlomiej Zolnierkiewicz2008-02-02
| | | | Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add ->port_init_devs method to ide_hwif_tBartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | | | * Add ->port_init_devs method to ide_hwif_t for a host specific initialization of devices on a port. Call the new method from ide_port_init_devices(). * Convert ht6560b, qd65xx and opti621 host drivers to use the new ->port_init_devs method. There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add IDE_HFLAG_NO_{IO32_BIT,UNMASK_IRQS} host flagsBartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | | | | | * Use the same bit for IDE_HFLAG_CS5520 and IDE_HFLAG_VDMA host flags (both are used only by cs5520 host driver currently). * Add IDE_HFLAG_NO_IO32_BIT host flag and use it instead of ->no_io_32bit ide_hwif_t field. * Add IDE_HFLAG_NO_UNMASK_IRQS host flag, then convert dtc2278 and rz1000 host drivers to use it. There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: factor out code initializing devices from ide_init_port()Bartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | * Factor out code initializing devices from ide_init_port() to ide_port_init_devices(). * Call the new function from ide_device_add_all(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add ->cable_detect method to ide_hwif_tBartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add ->cable_detect method to ide_hwif_t. * Call the new method in ide_init_port() if: - the host supports UDMA modes > UDMA2 ('hwif->ultra_mask & 78') - DMA initialization was successful (if hwif->dma_base is not set ide_init_port() sets hwif->ultra_mask to zero) - "idex=ata66" is not used ('hwif->cbl != ATA_CBL_PATA40_SHORT') * Convert PCI host drivers to use ->cable_detect method. While at it: * Factor out cable detection to separate functions (if not already done). * hpt366.c/it8213.c/slc90e66.c: - don't check cable type if "idex=ata66" is used * pdc202xx_new.c: - add __devinit tag to pdcnew_cable_detect() * pdc202xx_old.c: - rename pdc202xx_old_cable_detect() to pdc2026x_old_cable_detect() - add __devinit tag to pdc2026x_old_cable_detect() Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add struct ide_port_info instances to legacy host driversBartlomiej Zolnierkiewicz2008-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Remove 'struct pci_dev *dev' argument from ide_hwif_setup_dma(). * Un-static ide_hwif_setup_dma() and add CONFIG_BLK_DEV_IDEDMA_PCI=n version. * Add 'const struct ide_port_info *d' argument to ide_device_add[_all](). * Factor out generic ports init from ide_pci_setup_ports() to ide_init_port(), move it to ide-probe.c and call it in in ide_device_add_all() instead of ide_pci_setup_ports(). * Move ->mate setup to ide_device_add_all() from ide_port_init(). * Add IDE_HFLAG_NO_AUTOTUNE host flag for host drivers that don't enable ->autotune currently. * Setup hwif->chipset in ide_init_port() but iff pi->chipset is set (to not override setup done by ide_hwif_configure()). * Add ETRAX host handling to ide_device_add_all(). * cmd640.c: set IDE_HFLAG_ABUSE_* also for CONFIG_BLK_DEV_CMD640_ENHANCED=n. * pmac.c: make pmac_ide_setup_dma() return an error value and move DMA masks setup to pmac_ide_setup_device(). * Add 'struct ide_port_info' instances to legacy host drivers, pass them to ide_device_add() calls and then remove open-coded ports initialization. Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move hwif_register() call out of ide_probe_port()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | | | | | | | * Add BUG_ON(hwif->present) at the start of ide_probe_port(). * Move hwif_register() call (along with setting hwif->present) from ide_probe_port() to ide_device_add_all(). As a result the port will be registered with the device tree _after_: - probing both devices (if both are present) - port reset (if hwif->reset is set) - restoring local IRQs state and re-enabling port IRQ While at it: * Rename hwif_register() to ide_register_port(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: factor out code for tuning devices from ide_probe_port()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | * Factor out code for tuning devices from ide_probe_port() to ide_port_tune_devices(). * Move ide_port_tune_devices() call from ide_probe_port() to ide_device_add_all(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move handling of I/O resources out of ide_probe_port()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | Reserve/release I/O resources in ide_device_add_all() instead of ide_probe_port(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: make probe_hwif() return an error valueBartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | | Make probe_hwif() return an error value. While at it: * Remove comment about MAX_DRIVES == 2 limitation (it is not special to probe_hwif(), it is a general assumption taken by a lot of IDE code). * Rename probe_hwif() to ide_probe_port(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: use ide_remove_port_from_hwgroup in init_irq()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: prepare init_irq() for using ide_remove_port_from_hwgroup()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | * BUG_ON() early if 'hwif->next == hwif' and there is a 'match' hwgroup. * Remove printk() for impossible condition and add a BUG_ON(hwgroup->drive) to match code in ide_unregister(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove needless zeroing of hwgroup fields from init_irq()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | | Since kmalloc_node() is called with __GFP_ZERO flag there is no need to explicitly zero hwgroup fields. While at it: * Use 'hwif' instead of 'hwif->drives[0].hwif' for kmalloc_node() call. * Fix whitespace damage. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove hwif->present manipulations from hwif_init()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | * Call hwif_init() only if hwif->present is set. * If hwif_init() fails clear hwif->present. * Remove hwif->present manipulations from hwif_init(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: move wait_hwif_ready() documentation in the right placeBartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | | | | | | * Move wait_hwif_ready() documentation before this function. * Fix trailing whitespaces. * s/wait-for-busy/wait-for-non-busy/ * Remove no longer valid comment about the current code behavior. * Docbook-ize it. * Rename wait_hwif_ready() to ide_port_wait_ready(). Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: fix handling of busy I/O resources in probe_hwif()Bartlomiej Zolnierkiewicz2008-02-01
| | | | | | | It could be that I/O resources are busy because some other host driver has already claimed them so don't unregister the devices. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: update/add my CopyrightsBartlomiej Zolnierkiewicz2008-02-01
| | | | | | The last years stuff and a trip down memory lane... Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: delete filenames/versions from commentsBartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | | | | | Delete filenames/versions from comments. I'm leaving decisions about adding DRV_VERSION defines and MODULE_VERSION()-s to maintainers of the respective drivers. While at it: * Remove unused VERSION define from ide.c. * Remove unused/stale DRV_VERSION define from au1xxx-ide.c. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: keep pointer to struct device instead of struct pci_dev in ide_hwif_tBartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | Keep pointer to struct device instead of struct pci_dev in ide_hwif_t. While on it: * Use *dev->dma_mask instead of pci_dev->dma_mask in ide_toggle_bounce(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add ide_dump_identify() debug helperBartlomiej Zolnierkiewicz2008-02-01
| | | | | | | | | | | * Add ide_dump_identify() debug helper for dumping raw identify data in the hdparm friendly format (== the identify data can be extracted from dmesg output and passed to hdparm --Istdin). * Dump identify data in ide-probe.c::do_identify() if DEBUG is enabled. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add ide_busy_sleep() helperBartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | | Add ide_busy_sleep() helper and use it in do_probe(), enable_nest() and probe_hwif(). As a nice side-effect this fixes a minor bug in do_probe() (the code was reading status register without any delay). Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add ide_set_irq() inline helperBartlomiej Zolnierkiewicz2008-01-26
| | | | | | There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: Fix build break caused by "ide: remove ideprobe_init()"Olof Johansson2008-01-26
| | | | | | | | | | | | | | | | | Fix build break of powerpc holly_defconfig: In file included from arch/powerpc/platforms/embedded6xx/holly.c:24: include/linux/ide.h:1206: error: 'CONFIG_IDE_MAX_HWIFS' undeclared here (not in a function) There's no need to have a sized array in the prototype, might as well turn it into a pointer. It could probably be argued that large parts of the include file can be covered under #ifdef CONFIG_IDE, but that's a larger undertaking. Signed-off-by: Olof Johansson <olof@lixom.net> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove ideprobe_init()Bartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | | | | | | * Rename ide_device_add() to ide_device_add_all() and make it accept 'u8 idx[MAX_HWIFS]' instead of 'u8 idx[4]' as an argument. * Add ide_device_add() wrapper for ide_device_add_all(). * Convert ide_generic_init() to use ide_device_add_all(). * Remove no longer needed ideprobe_init(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: add hwif->chipset fixup to ide_device_add()Bartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | Add hwif->chipset fixup identical to the one in ideprobe_init() to ide_device_add(). Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: fix probing for hosts with serialized or IRQ sharing interfacesBartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | | After hwif_register_devices() IDE devices are ready to be used so the way in which ide_device_add() works currently is racy for hosts with serialized / IRQ sharing interfaces. Fix ide_device_add() by looping over interfaces for probe_hwif(), hwif_init() and hwif_register_devices() operations. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: kill probe_hwif_init()Bartlomiej Zolnierkiewicz2008-01-26
| | | | | | | There should be no functionality changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: merge ->fixup and ->quirkproc methodsBartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | | | | | | | | | | | | | | | | * Assign drive->quirk_list in ->quirkproc implementations: - hpt366.c::hpt3xx_quirkproc() - pdc202xx_new.c::pdcnew_quirkproc() - pdc202xx_old.c::pdc202xx_quirkproc() * Make ->quirkproc void. * Move calling ->quirkproc from do_identify() to probe_hwif(). * Convert it821x_fixups() to it821x_quirkproc() in it821x.c. * Convert siimage_fixup() to sil_quirkproc() in siimage.c, also remove no longer needed drive->present check from is_dev_seagate_sata(). * Convert ide_undecoded_slave() to accept 'drive' instead of 'hwif' as an argument. Then convert ide_register_hw() to accept 'quirkproc' argument instead of 'fixup' one. * Remove no longer needed ->fixup method. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: merge ->dma_host_{on,off} methods into ->dma_host_set methodBartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | Merge ->dma_host_{on,off} methods into ->dma_host_set method which takes 'int on' argument. There should be no functionality changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove ->ide_dma_on and ->dma_off_quietly methods from ide_hwif_tBartlomiej Zolnierkiewicz2008-01-26
| | | | | | | | | | | | | | | | | | | | | * Make ide_dma_off_quietly() and __ide_dma_on() always available. * Drop "__" prefix from __ide_dma_on(). * Check for presence of ->dma_host_on instead of ->ide_dma_on. * Convert all users of ->ide_dma_on and ->dma_off_quietly methods to use ide_dma_on() and ide_dma_off_quietly() instead. * Remove no longer needed ->ide_dma_on and ->dma_off_quietly methods from ide_hwif_t. * Make ide_dma_on() void. There should be no functionality changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: cleanup ide_set_dma()Bartlomiej Zolnierkiewicz2008-01-25
| | | | | | | | | | | | | | | | * ->dma_off_quietly is always called before ide_set_dma() so the call can be moved inside ide_set_dma(). * ide_dma_check() doesn't touch hardware so ->dma_off_quietly call for 'rc == -1' case is redundant, remove it. * '0' and '-1' are the only values returned by ide_dma_check() so remove dead code for other cases. There should be no functionality changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove QUIRK_LIST()Bartlomiej Zolnierkiewicz2008-01-25
| | | | | Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove stale ide.h "configuration options"Bartlomiej Zolnierkiewicz2008-01-25
| | | | | | | | | | | | | | | | | | | | Remove stale ide.h "configuration options": * INITIAL_MULT_COUNT - always defined to 0 * SUPPORT_SLOW_DATA_PORTS - unused * OK_TO_RESET_CONTROLLER - always defined to 1 * DISABLE_IRQ_NOSYNC - always defined to 0 Leave SUPPORT_VLB_SYNC (defined to 0 for CRIS and FRV, otherwise to 1) for now but disallow overriding it by <asm/ide.h>. There should be no functionality changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* ide: remove IRQF_DISABLED from IRQ flags for IDE IRQ handlerBartlomiej Zolnierkiewicz2008-01-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>