* [PATCH] make drivers/scsi/sgiwd93.c check some more return codes (240p3)
@ 2001-01-17 22:26 Rasmus Andersen
0 siblings, 0 replies; only message in thread
From: Rasmus Andersen @ 2001-01-17 22:26 UTC (permalink / raw)
To: andrewb; +Cc: linux-kernel
Hi.
The following patch makes drivers/scsi/sgiwd93.c check the return code
from request_irq and get_free_pages. It also removes a line already done
a bit higher up (the dma_cache_wback_inv one).
Please comment.
--- linux-ac9/drivers/scsi/sgiwd93.c.org Sun Jan 14 21:33:29 2001
+++ linux-ac9/drivers/scsi/sgiwd93.c Sun Jan 14 22:57:46 2001
@@ -281,6 +281,11 @@
sgiwd93_host->irq = SGI_WD93_0_IRQ;
buf = (uchar *) get_free_page(GFP_KERNEL);
+ if (!buf) {
+ printk(KERN_WARNING "sgiwd93: Could not allocate memory for host0 buffer.\n");
+ scsi_unregister(sgiwd93_host);
+ return 0;
+ }
init_hpc_chain(buf);
dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
/* HPC_SCSI_REG0 | 0x03 | KSEG1 */
@@ -290,9 +295,14 @@
hdata = (struct WD33C93_hostdata *)sgiwd93_host->hostdata;
hdata->no_sync = 0;
hdata->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf));
- dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
- request_irq(SGI_WD93_0_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host);
+ if (request_irq(SGI_WD93_0_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host)) {
+ printk(KERN_WARNING "sgiwd93: Could not register IRQ %d (for host 0).\n", sgiwd93_intr);
+ wd33c93_release();
+ free_page(buf);
+ scsi_unregister(sgiwd93_host);
+ return 0;
+ }
/* set up second controller on the Indigo2 */
if(!sgi_guiness) {
sgiwd93_host1 = scsi_register(SGIblows, sizeof(struct WD33C93_hostdata));
@@ -302,6 +312,12 @@
sgiwd93_host1->irq = SGI_WD93_1_IRQ;
buf = (uchar *) get_free_page(GFP_KERNEL);
+ if (!buf) {
+ printk(KERN_WARNING "sgiwd93: Could not allocate memory for host1 buffer.\n");
+ scsi_unregister(sgiwd93_host1);
+ called = 1;
+ return 1; /* We registered host0 so return success*/
+ }
init_hpc_chain(buf);
dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
/* HPC_SCSI_REG1 | 0x03 | KSEG1 */
@@ -313,7 +329,13 @@
hdata1->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf));
dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
- request_irq(SGI_WD93_1_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host1);
+ if (request_irq(SGI_WD93_1_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host1)) {
+ printk(KERN_WARNING "sgiwd93: Could not allocate irq %d (for host1).\n", sgiwd93_intr);
+ wd33c93_release();
+ free_page(buf);
+ scsi_unregister(sgiwd93_host1);
+ /* Fall through since host0 registered OK */
+ }
}
}
--
Regards,
Rasmus(rasmus@jaquet.dk)
Smoking kills. If you're killed, you've lost a very important part of your
life. -Brooke Shields, during an interview to become spokesperson for a
federal anti-smoking campaign.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2001-01-17 22:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-01-17 22:26 [PATCH] make drivers/scsi/sgiwd93.c check some more return codes (240p3) Rasmus Andersen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.