Commit 556e58fe authored by Ravikiran G Thirumalai's avatar Ravikiran G Thirumalai Committed by Linus Torvalds

[PATCH] ide: fix kmalloc_node breakage in ide driver

Patch fixes oops caused by ide interfaces not on pci.  pcibus_to_node
causes the kernel to crash otherwise.  Patch also adds a BUG_ON to check if
hwif is NULL.
Signed-off-by: default avatarChristoph Lameter <christoph@lameter.com>
Signed-off-by: default avatarShai Fultheim <shai@scalex86.org>
Signed-off-by: default avatarRavikiran Thirumalai <kiran@scalex86.org>
Cc: Andi Kleen <ak@muc.de>
Cc: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent fd6f31c3
...@@ -960,6 +960,15 @@ static void save_match(ide_hwif_t *hwif, ide_hwif_t *new, ide_hwif_t **match) ...@@ -960,6 +960,15 @@ static void save_match(ide_hwif_t *hwif, ide_hwif_t *new, ide_hwif_t **match)
} }
#endif /* MAX_HWIFS > 1 */ #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 * init request queue
*/ */
...@@ -978,8 +987,7 @@ static int ide_init_queue(ide_drive_t *drive) ...@@ -978,8 +987,7 @@ static int ide_init_queue(ide_drive_t *drive)
* do not. * do not.
*/ */
q = blk_init_queue_node(do_ide_request, &ide_lock, q = blk_init_queue_node(do_ide_request, &ide_lock, hwif_to_node(hwif));
pcibus_to_node(drive->hwif->pci_dev->bus));
if (!q) if (!q)
return 1; return 1;
...@@ -1048,6 +1056,8 @@ static int init_irq (ide_hwif_t *hwif) ...@@ -1048,6 +1056,8 @@ static int init_irq (ide_hwif_t *hwif)
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
BUG_ON(irqs_disabled()); BUG_ON(irqs_disabled());
BUG_ON(hwif == NULL);
down(&ide_cfg_sem); down(&ide_cfg_sem);
hwif->hwgroup = NULL; hwif->hwgroup = NULL;
#if MAX_HWIFS > 1 #if MAX_HWIFS > 1
...@@ -1097,7 +1107,7 @@ static int init_irq (ide_hwif_t *hwif) ...@@ -1097,7 +1107,7 @@ static int init_irq (ide_hwif_t *hwif)
spin_unlock_irq(&ide_lock); spin_unlock_irq(&ide_lock);
} else { } else {
hwgroup = kmalloc_node(sizeof(ide_hwgroup_t), GFP_KERNEL, 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) if (!hwgroup)
goto out_up; goto out_up;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment