diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-11-28 03:58:46 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-11-28 03:58:46 +0000 |
commit | b63ad0882a16a5d28003e57f2b0b81dee3fb322b (patch) | |
tree | 0a343ce219e2b8b38a5d702d66032c57b83d9720 /drivers/scsi/gdth.c | |
parent | a9d7bff9a84dba79609a0002e5321b74c4d64c64 (diff) |
Merge with 2.4.0-test11.
Diffstat (limited to 'drivers/scsi/gdth.c')
-rw-r--r-- | drivers/scsi/gdth.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index dd26cda1e..ec5814c7f 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c @@ -3125,6 +3125,8 @@ int __init gdth_detect(Scsi_Host_Template *shtp) break; if (gdth_search_isa(isa_bios)) { /* controller found */ shp = scsi_register(shtp,sizeof(gdth_ext_str)); + if(shp == NULL) + continue; ha = HADATA(shp); if (!gdth_init_isa(isa_bios,ha)) { scsi_unregister(shp); @@ -3197,6 +3199,8 @@ int __init gdth_detect(Scsi_Host_Template *shtp) break; if (gdth_search_eisa(eisa_slot)) { /* controller found */ shp = scsi_register(shtp,sizeof(gdth_ext_str)); + if(shp == NULL) + continue; ha = HADATA(shp); if (!gdth_init_eisa(eisa_slot,ha)) { scsi_unregister(shp); @@ -3268,6 +3272,8 @@ int __init gdth_detect(Scsi_Host_Template *shtp) if (gdth_ctr_count >= MAXHA) break; shp = scsi_register(shtp,sizeof(gdth_ext_str)); + if(shp == NULL) + continue; ha = HADATA(shp); if (!gdth_init_pci(&pcistr[ctr],ha)) { scsi_unregister(shp); @@ -3571,24 +3577,29 @@ static void gdth_flush(int hanum) ha = HADATA(gdth_ctr_tab[hanum]); sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); + if (!sdev) + return; + scp = scsi_allocate_device(sdev, 1, FALSE); - scp->cmd_len = 12; - scp->use_sg = 0; + if (scp) { + scp->cmd_len = 12; + scp->use_sg = 0; - for (i = 0; i < MAX_HDRIVES; ++i) { - if (ha->hdr[i].present) { - gdtcmd.BoardNode = LOCALBOARD; - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_FLUSH; - gdtcmd.u.cache.DeviceNo = i; - gdtcmd.u.cache.BlockNo = 1; - gdtcmd.u.cache.sg_canz = 0; - TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i)); - gdth_do_cmd(scp, &gdtcmd, 30); + for (i = 0; i < MAX_HDRIVES; ++i) { + if (ha->hdr[i].present) { + gdtcmd.BoardNode = LOCALBOARD; + gdtcmd.Service = CACHESERVICE; + gdtcmd.OpCode = GDT_FLUSH; + gdtcmd.u.cache.DeviceNo = i; + gdtcmd.u.cache.BlockNo = 1; + gdtcmd.u.cache.sg_canz = 0; + TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i)); + gdth_do_cmd(scp, &gdtcmd, 30); + } } + scsi_release_command(scp); } - scsi_release_command(scp); scsi_free_host_dev(sdev); } |