|
@@ -960,6 +960,15 @@ static void save_match(ide_hwif_t *hwif, ide_hwif_t *new, ide_hwif_t **match)
|
|
|
}
|
|
|
#endif /* MAX_HWIFS > 1 */
|
|
|
|
|
|
+static inline int hwif_to_node(ide_hwif_t *hwif)
|
|
|
+{
|
|
|
+ if (hwif->pci_dev)
|
|
|
+ return pcibus_to_node(hwif->pci_dev->bus);
|
|
|
+ else
|
|
|
+ /* Add ways to determine the node of other busses here */
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* init request queue
|
|
|
*/
|
|
@@ -978,8 +987,7 @@ static int ide_init_queue(ide_drive_t *drive)
|
|
|
* do not.
|
|
|
*/
|
|
|
|
|
|
- q = blk_init_queue_node(do_ide_request, &ide_lock,
|
|
|
- pcibus_to_node(drive->hwif->pci_dev->bus));
|
|
|
+ q = blk_init_queue_node(do_ide_request, &ide_lock, hwif_to_node(hwif));
|
|
|
if (!q)
|
|
|
return 1;
|
|
|
|
|
@@ -1048,6 +1056,8 @@ static int init_irq (ide_hwif_t *hwif)
|
|
|
|
|
|
BUG_ON(in_interrupt());
|
|
|
BUG_ON(irqs_disabled());
|
|
|
+ BUG_ON(hwif == NULL);
|
|
|
+
|
|
|
down(&ide_cfg_sem);
|
|
|
hwif->hwgroup = NULL;
|
|
|
#if MAX_HWIFS > 1
|
|
@@ -1097,7 +1107,7 @@ static int init_irq (ide_hwif_t *hwif)
|
|
|
spin_unlock_irq(&ide_lock);
|
|
|
} else {
|
|
|
hwgroup = kmalloc_node(sizeof(ide_hwgroup_t), GFP_KERNEL,
|
|
|
- pcibus_to_node(hwif->drives[0].hwif->pci_dev->bus));
|
|
|
+ hwif_to_node(hwif->drives[0].hwif));
|
|
|
if (!hwgroup)
|
|
|
goto out_up;
|
|
|
|