* [PATCH 1/4] gdth: Split out EISA and ISA register code
@ 2007-07-21 2:20 Jeff Garzik
2007-07-21 2:21 ` [PATCH 2/4] gdth: Split out PCI " Jeff Garzik
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-07-21 2:20 UTC (permalink / raw)
To: linux-scsi; +Cc: Christoph Hellwig, achim_leubner, Andrew Morton
No code changes, only indentation and blank line additions, plus code to
call the new split-out functions.
commit 61b41cec514e93a06e56869b78c2f86b01c0c594
Author: Jeff Garzik <jeff@garzik.org>
Date: Fri Jul 20 20:05:32 2007 -0400
[SCSI] gdth: Split out EISA and ISA register into separate functions
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/gdth.c | 518 ++++++++++++++++++++++++++++------------------------
1 file changed, 279 insertions(+), 239 deletions(-)
61b41cec514e93a06e56869b78c2f86b01c0c594
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index b0f5687..08f91d9 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -4277,6 +4277,274 @@ int __init option_setup(char *str)
return 1;
}
+static int __init gdth_start_isa(struct scsi_host_template *shtp,
+ ulong32 isa_bios)
+{
+ struct Scsi_Host *shp;
+ gdth_ha_str *ha;
+ int i, hanum;
+ dma_addr_t scratch_dma_handle = 0;
+
+ shp = scsi_register(shtp, sizeof(gdth_ext_str));
+ if (shp == NULL)
+ return 1; /* continue looping */
+
+ ha = HADATA(shp);
+ if (!gdth_init_isa(isa_bios, ha)) {
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+#ifdef __ia64__
+ return 0; /* end loop: success */
+#else
+ /* controller found and initialized */
+ printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n",
+ isa_bios, ha->irq, ha->drq);
+
+ if (request_irq(ha->irq, gdth_interrupt, IRQF_DISABLED, "gdth", ha)) {
+ printk("GDT-ISA: Unable to allocate IRQ\n");
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+ if (request_dma(ha->drq, "gdth")) {
+ printk("GDT-ISA: Unable to allocate DMA channel\n");
+ free_irq(ha->irq, ha);
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ set_dma_mode(ha->drq, DMA_MODE_CASCADE);
+ enable_dma(ha->drq);
+ shp->unchecked_isa_dma = 1;
+ shp->irq = ha->irq;
+ shp->dma_channel = ha->drq;
+ hanum = gdth_ctr_count;
+ gdth_ctr_tab[gdth_ctr_count++] = shp;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum= 0;
+
+ ha->pccb = CMDDATA(shp);
+ ha->ccb_phys = 0L;
+ ha->pdev = NULL;
+ ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
+ &scratch_dma_handle);
+ ha->scratch_phys = scratch_dma_handle;
+ ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
+ &scratch_dma_handle);
+ ha->msg_phys = scratch_dma_handle;
+
+#ifdef INT_COAL
+ ha->coal_stat = (gdth_coal_status *)
+ pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, &scratch_dma_handle);
+ ha->coal_stat_phys = scratch_dma_handle;
+#endif
+
+ ha->scratch_busy = FALSE;
+ ha->req_first = NULL;
+ ha->tid_cnt = MAX_HDRIVES;
+ if (max_ids > 0 && max_ids < ha->tid_cnt)
+ ha->tid_cnt = max_ids;
+ for (i=0; i<GDTH_MAXCMDS; ++i)
+ ha->cmd_tab[i].cmnd = UNUSED_CMND;
+ ha->scan_mode = rescan ? 0x10 : 0;
+
+ if (ha->pscratch == NULL || ha->pmsg == NULL ||
+ !gdth_search_drives(hanum)) {
+ printk("GDT-ISA: Error during device scan\n");
+ --gdth_ctr_count;
+ --gdth_ctr_vcount;
+
+#ifdef INT_COAL
+ if (ha->coal_stat)
+ pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, ha->coal_stat,
+ ha->coal_stat_phys);
+#endif
+
+ if (ha->pscratch)
+ pci_free_consistent(ha->pdev, GDTH_SCRATCH,
+ ha->pscratch, ha->scratch_phys);
+ if (ha->pmsg)
+ pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
+ ha->pmsg, ha->msg_phys);
+
+ free_irq(ha->irq,ha);
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
+ hdr_channel = ha->bus_cnt;
+ ha->virt_bus = hdr_channel;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
+ LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+ shp->highmem_io = 0;
+#endif
+ if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
+ shp->max_cmd_len = 16;
+
+ shp->max_id = ha->tid_cnt;
+ shp->max_lun = MAXLUN;
+ shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
+ if (virt_ctr) {
+ unchar b;
+
+ virt_ctr = 1;
+ /* register addit. SCSI channels as virtual controllers */
+ for (b = 1; b < ha->bus_cnt + 1; ++b) {
+ shp = scsi_register(shtp,sizeof(gdth_num_str));
+ shp->unchecked_isa_dma = 1;
+ shp->irq = ha->irq;
+ shp->dma_channel = ha->drq;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum = b;
+ }
+ }
+
+ spin_lock_init(&ha->smp_lock);
+ gdth_enable_int(hanum);
+#endif /* !__ia64__ */
+
+ return 1; /* continue looping */
+}
+
+static int __init gdth_start_eisa(struct scsi_host_template *shtp,
+ ushort eisa_slot)
+{
+ struct Scsi_Host *shp;
+ gdth_ha_str *ha;
+ int i, hanum;
+ dma_addr_t scratch_dma_handle = 0;
+
+ shp = scsi_register(shtp,sizeof(gdth_ext_str));
+ if (shp == NULL)
+ return 1; /* continue looping */
+
+ ha = HADATA(shp);
+ if (!gdth_init_eisa(eisa_slot,ha)) {
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ /* controller found and initialized */
+ printk("Configuring GDT-EISA HA at Slot %d IRQ %u\n",
+ eisa_slot >> 12, ha->irq);
+
+ if (request_irq(ha->irq,gdth_interrupt,IRQF_DISABLED,"gdth",ha)) {
+ printk("GDT-EISA: Unable to allocate IRQ\n");
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ shp->unchecked_isa_dma = 0;
+ shp->irq = ha->irq;
+ shp->dma_channel = 0xff;
+ hanum = gdth_ctr_count;
+ gdth_ctr_tab[gdth_ctr_count++] = shp;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum= 0;
+ TRACE2(("EISA detect Bus 0: hanum %d\n",
+ NUMDATA(shp)->hanum));
+
+ ha->pccb = CMDDATA(shp);
+ ha->ccb_phys = 0L;
+
+ ha->pdev = NULL;
+ ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
+ &scratch_dma_handle);
+ ha->scratch_phys = scratch_dma_handle;
+ ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
+ &scratch_dma_handle);
+ ha->msg_phys = scratch_dma_handle;
+
+#ifdef INT_COAL
+ ha->coal_stat = (gdth_coal_status *)
+ pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, &scratch_dma_handle);
+ ha->coal_stat_phys = scratch_dma_handle;
+#endif
+
+ ha->ccb_phys =
+ pci_map_single(ha->pdev,ha->pccb,
+ sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL);
+ ha->scratch_busy = FALSE;
+ ha->req_first = NULL;
+ ha->tid_cnt = MAX_HDRIVES;
+ if (max_ids > 0 && max_ids < ha->tid_cnt)
+ ha->tid_cnt = max_ids;
+ for (i=0; i<GDTH_MAXCMDS; ++i)
+ ha->cmd_tab[i].cmnd = UNUSED_CMND;
+ ha->scan_mode = rescan ? 0x10 : 0;
+
+ if (ha->pscratch == NULL || ha->pmsg == NULL ||
+ !gdth_search_drives(hanum)) {
+ printk("GDT-EISA: Error during device scan\n");
+ --gdth_ctr_count;
+ --gdth_ctr_vcount;
+#ifdef INT_COAL
+ if (ha->coal_stat)
+ pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, ha->coal_stat,
+ ha->coal_stat_phys);
+#endif
+ if (ha->pscratch)
+ pci_free_consistent(ha->pdev, GDTH_SCRATCH,
+ ha->pscratch, ha->scratch_phys);
+ if (ha->pmsg)
+ pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
+ ha->pmsg, ha->msg_phys);
+ if (ha->ccb_phys)
+ pci_unmap_single(ha->pdev,ha->ccb_phys,
+ sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL);
+ free_irq(ha->irq,ha);
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
+ hdr_channel = ha->bus_cnt;
+ ha->virt_bus = hdr_channel;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
+LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+ shp->highmem_io = 0;
+#endif
+ if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
+ shp->max_cmd_len = 16;
+
+ shp->max_id = ha->tid_cnt;
+ shp->max_lun = MAXLUN;
+ shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
+ if (virt_ctr) {
+ unchar b;
+
+ virt_ctr = 1;
+ /* register addit. SCSI channels as virtual controllers */
+ for (b = 1; b < ha->bus_cnt + 1; ++b) {
+ shp = scsi_register(shtp,sizeof(gdth_num_str));
+ shp->unchecked_isa_dma = 0;
+ shp->irq = ha->irq;
+ shp->dma_channel = 0xff;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum = b;
+ }
+ }
+
+ spin_lock_init(&ha->smp_lock);
+ gdth_enable_int(hanum);
+
+ return 1; /* continue looping */
+}
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static int __init gdth_detect(struct scsi_host_template *shtp)
#else
@@ -4286,11 +4554,8 @@ static int __init gdth_detect(Scsi_Host_Template *shtp)
struct Scsi_Host *shp;
gdth_pci_str pcistr[MAXHA];
gdth_ha_str *ha;
- ulong32 isa_bios;
- ushort eisa_slot;
int i,hanum,cnt,ctr,err;
unchar b;
-
#ifdef DEBUG_GDTH
printk("GDT: This driver contains debugging information !! Trace level = %d\n",
@@ -4322,255 +4587,30 @@ static int __init gdth_detect(Scsi_Host_Template *shtp)
/* As default we do not probe for EISA or ISA controllers */
if (probe_eisa_isa) {
+ ulong32 isa_bios;
+ ushort eisa_slot;
+
/* scanning for controllers, at first: ISA controller */
for (isa_bios=0xc8000UL; isa_bios<=0xd8000UL; isa_bios+=0x8000UL) {
- dma_addr_t scratch_dma_handle;
- scratch_dma_handle = 0;
-
if (gdth_ctr_count >= MAXHA)
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);
- continue;
- }
-#ifdef __ia64__
- break;
-#else
- /* controller found and initialized */
- printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n",
- isa_bios,ha->irq,ha->drq);
-
- if (request_irq(ha->irq,gdth_interrupt,IRQF_DISABLED,"gdth",ha)) {
- printk("GDT-ISA: Unable to allocate IRQ\n");
- scsi_unregister(shp);
- continue;
- }
- if (request_dma(ha->drq,"gdth")) {
- printk("GDT-ISA: Unable to allocate DMA channel\n");
- free_irq(ha->irq,ha);
- scsi_unregister(shp);
- continue;
- }
- set_dma_mode(ha->drq,DMA_MODE_CASCADE);
- enable_dma(ha->drq);
- shp->unchecked_isa_dma = 1;
- shp->irq = ha->irq;
- shp->dma_channel = ha->drq;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum= 0;
-
- ha->pccb = CMDDATA(shp);
- ha->ccb_phys = 0L;
- ha->pdev = NULL;
- ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
- &scratch_dma_handle);
- ha->scratch_phys = scratch_dma_handle;
- ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
- &scratch_dma_handle);
- ha->msg_phys = scratch_dma_handle;
-#ifdef INT_COAL
- ha->coal_stat = (gdth_coal_status *)
- pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, &scratch_dma_handle);
- ha->coal_stat_phys = scratch_dma_handle;
-#endif
-
- ha->scratch_busy = FALSE;
- ha->req_first = NULL;
- ha->tid_cnt = MAX_HDRIVES;
- if (max_ids > 0 && max_ids < ha->tid_cnt)
- ha->tid_cnt = max_ids;
- for (i=0; i<GDTH_MAXCMDS; ++i)
- ha->cmd_tab[i].cmnd = UNUSED_CMND;
- ha->scan_mode = rescan ? 0x10 : 0;
-
- if (ha->pscratch == NULL || ha->pmsg == NULL ||
- !gdth_search_drives(hanum)) {
- printk("GDT-ISA: Error during device scan\n");
- --gdth_ctr_count;
- --gdth_ctr_vcount;
-
-#ifdef INT_COAL
- if (ha->coal_stat)
- pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, ha->coal_stat,
- ha->coal_stat_phys);
-#endif
- if (ha->pscratch)
- pci_free_consistent(ha->pdev, GDTH_SCRATCH,
- ha->pscratch, ha->scratch_phys);
- if (ha->pmsg)
- pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
- ha->pmsg, ha->msg_phys);
-
- free_irq(ha->irq,ha);
- scsi_unregister(shp);
- continue;
- }
- if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
- hdr_channel = ha->bus_cnt;
- ha->virt_bus = hdr_channel;
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
- LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- shp->highmem_io = 0;
-#endif
- if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
- shp->max_cmd_len = 16;
-
- shp->max_id = ha->tid_cnt;
- shp->max_lun = MAXLUN;
- shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
- if (virt_ctr) {
- virt_ctr = 1;
- /* register addit. SCSI channels as virtual controllers */
- for (b = 1; b < ha->bus_cnt + 1; ++b) {
- shp = scsi_register(shtp,sizeof(gdth_num_str));
- shp->unchecked_isa_dma = 1;
- shp->irq = ha->irq;
- shp->dma_channel = ha->drq;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum = b;
- }
- }
-
- spin_lock_init(&ha->smp_lock);
- gdth_enable_int(hanum);
-#endif /* !__ia64__ */
+ err = gdth_start_isa(shtp, isa_bios);
+ if (err <= 0)
+ break;
+ /* err > 0 == continue looping */
}
}
/* scanning for EISA controllers */
for (eisa_slot=0x1000; eisa_slot<=0x8000; eisa_slot+=0x1000) {
- dma_addr_t scratch_dma_handle;
- scratch_dma_handle = 0;
-
if (gdth_ctr_count >= MAXHA)
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);
- continue;
- }
- /* controller found and initialized */
- printk("Configuring GDT-EISA HA at Slot %d IRQ %u\n",
- eisa_slot>>12,ha->irq);
-
- if (request_irq(ha->irq,gdth_interrupt,IRQF_DISABLED,"gdth",ha)) {
- printk("GDT-EISA: Unable to allocate IRQ\n");
- scsi_unregister(shp);
- continue;
- }
- shp->unchecked_isa_dma = 0;
- shp->irq = ha->irq;
- shp->dma_channel = 0xff;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum= 0;
- TRACE2(("EISA detect Bus 0: hanum %d\n",
- NUMDATA(shp)->hanum));
-
- ha->pccb = CMDDATA(shp);
- ha->ccb_phys = 0L;
-
- ha->pdev = NULL;
- ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
- &scratch_dma_handle);
- ha->scratch_phys = scratch_dma_handle;
- ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
- &scratch_dma_handle);
- ha->msg_phys = scratch_dma_handle;
-#ifdef INT_COAL
- ha->coal_stat = (gdth_coal_status *)
- pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, &scratch_dma_handle);
- ha->coal_stat_phys = scratch_dma_handle;
-#endif
- ha->ccb_phys =
- pci_map_single(ha->pdev,ha->pccb,
- sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL);
- ha->scratch_busy = FALSE;
- ha->req_first = NULL;
- ha->tid_cnt = MAX_HDRIVES;
- if (max_ids > 0 && max_ids < ha->tid_cnt)
- ha->tid_cnt = max_ids;
- for (i=0; i<GDTH_MAXCMDS; ++i)
- ha->cmd_tab[i].cmnd = UNUSED_CMND;
- ha->scan_mode = rescan ? 0x10 : 0;
-
- if (ha->pscratch == NULL || ha->pmsg == NULL ||
- !gdth_search_drives(hanum)) {
- printk("GDT-EISA: Error during device scan\n");
- --gdth_ctr_count;
- --gdth_ctr_vcount;
-#ifdef INT_COAL
- if (ha->coal_stat)
- pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, ha->coal_stat,
- ha->coal_stat_phys);
-#endif
- if (ha->pscratch)
- pci_free_consistent(ha->pdev, GDTH_SCRATCH,
- ha->pscratch, ha->scratch_phys);
- if (ha->pmsg)
- pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
- ha->pmsg, ha->msg_phys);
- if (ha->ccb_phys)
- pci_unmap_single(ha->pdev,ha->ccb_phys,
- sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL);
- free_irq(ha->irq,ha);
- scsi_unregister(shp);
- continue;
- }
- if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
- hdr_channel = ha->bus_cnt;
- ha->virt_bus = hdr_channel;
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
- LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- shp->highmem_io = 0;
-#endif
- if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
- shp->max_cmd_len = 16;
-
- shp->max_id = ha->tid_cnt;
- shp->max_lun = MAXLUN;
- shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
- if (virt_ctr) {
- virt_ctr = 1;
- /* register addit. SCSI channels as virtual controllers */
- for (b = 1; b < ha->bus_cnt + 1; ++b) {
- shp = scsi_register(shtp,sizeof(gdth_num_str));
- shp->unchecked_isa_dma = 0;
- shp->irq = ha->irq;
- shp->dma_channel = 0xff;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum = b;
- }
- }
-
- spin_lock_init(&ha->smp_lock);
- gdth_enable_int(hanum);
+ err = gdth_start_eisa(shtp, eisa_slot);
+ if (err <= 0)
+ break;
+ /* err > 0 == continue looping */
}
}
}
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] gdth: Split out PCI register code
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
@ 2007-07-21 2:21 ` Jeff Garzik
2007-07-21 2:22 ` [PATCH 3/4] gdth: Remove 2.4.x support, in-kernel changelog Jeff Garzik
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-07-21 2:21 UTC (permalink / raw)
To: linux-scsi; +Cc: Christoph Hellwig, achim_leubner, Andrew Morton
No code changes, just indentation and blank line addition.
commit 098f6915936406179b27a9f448d65953383ad628
Author: Jeff Garzik <jeff@garzik.org>
Date: Fri Jul 20 20:23:20 2007 -0400
[SCSI] gdth: Split out PCI register into separate function
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/gdth.c | 296 ++++++++++++++++++++++++++++------------------------
1 file changed, 160 insertions(+), 136 deletions(-)
098f6915936406179b27a9f448d65953383ad628
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index 08f91d9..9d38108 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -4545,16 +4545,167 @@ LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
return 1; /* continue looping */
}
+static int __init gdth_start_pci(struct scsi_host_template *shtp,
+ gdth_pci_str *pcistr, int ctr)
+{
+ struct Scsi_Host *shp;
+ dma_addr_t scratch_dma_handle = 0;
+ gdth_ha_str *ha;
+ int i, hanum, err;
+
+ if (gdth_ctr_count >= MAXHA)
+ return 0; /* end loop: success */
+ shp = scsi_register(shtp,sizeof(gdth_ext_str));
+ if (shp == NULL)
+ return 1; /* continue looping */
+
+ ha = HADATA(shp);
+ if (!gdth_init_pci(&pcistr[ctr],ha)) {
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ /* controller found and initialized */
+ printk("Configuring GDT-PCI HA at %d/%d IRQ %u\n",
+ pcistr[ctr].pdev->bus->number,
+ PCI_SLOT(pcistr[ctr].pdev->devfn), ha->irq);
+
+ if (request_irq(ha->irq, gdth_interrupt,
+ IRQF_DISABLED | IRQF_SHARED, "gdth", ha)) {
+ printk("GDT-PCI: Unable to allocate IRQ\n");
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ shp->unchecked_isa_dma = 0;
+ shp->irq = ha->irq;
+ shp->dma_channel = 0xff;
+ hanum = gdth_ctr_count;
+ gdth_ctr_tab[gdth_ctr_count++] = shp;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum= 0;
+
+ ha->pccb = CMDDATA(shp);
+ ha->ccb_phys = 0L;
+
+ ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
+ &scratch_dma_handle);
+ ha->scratch_phys = scratch_dma_handle;
+ ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
+ &scratch_dma_handle);
+ ha->msg_phys = scratch_dma_handle;
+
+#ifdef INT_COAL
+ ha->coal_stat = (gdth_coal_status *)
+ pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, &scratch_dma_handle);
+ ha->coal_stat_phys = scratch_dma_handle;
+#endif
+
+ ha->scratch_busy = FALSE;
+ ha->req_first = NULL;
+ ha->tid_cnt = pcistr[ctr].pdev->device >= 0x200 ? MAXID : MAX_HDRIVES;
+ if (max_ids > 0 && max_ids < ha->tid_cnt)
+ ha->tid_cnt = max_ids;
+ for (i=0; i<GDTH_MAXCMDS; ++i)
+ ha->cmd_tab[i].cmnd = UNUSED_CMND;
+ ha->scan_mode = rescan ? 0x10 : 0;
+
+ err = FALSE;
+ if (ha->pscratch == NULL || ha->pmsg == NULL ||
+ !gdth_search_drives(hanum)) {
+ err = TRUE;
+ } else {
+ if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
+ hdr_channel = ha->bus_cnt;
+ ha->virt_bus = hdr_channel;
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+ scsi_set_pci_device(shp, pcistr[ctr].pdev);
+#endif
+
+ if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat &
+ GDT_64BIT) ||
+ /* 64-bit DMA only supported from FW >= x.43 */
+ (!ha->dma64_support)) {
+ if (pci_set_dma_mask(pcistr[ctr].pdev, DMA_32BIT_MASK)){
+ printk(KERN_WARNING "GDT-PCI %d: Unable to "
+ "set 32-bit DMA\n", hanum);
+ err = TRUE;
+ }
+ } else {
+ shp->max_cmd_len = 16;
+ if (!pci_set_dma_mask(pcistr[ctr].pdev,DMA_64BIT_MASK)){
+ printk("GDT-PCI %d: 64-bit DMA enabled\n",
+ hanum);
+ } else if (pci_set_dma_mask(pcistr[ctr].pdev,
+ DMA_32BIT_MASK)) {
+ printk(KERN_WARNING "GDT-PCI %d: Unable to set "
+ "64/32-bit DMA\n", hanum);
+ err = TRUE;
+ }
+ }
+ }
+
+ if (err) {
+ printk("GDT-PCI %d: Error during device scan\n", hanum);
+ --gdth_ctr_count;
+ --gdth_ctr_vcount;
+
+#ifdef INT_COAL
+ if (ha->coal_stat)
+ pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
+ MAXOFFSETS, ha->coal_stat,
+ ha->coal_stat_phys);
+#endif
+
+ if (ha->pscratch)
+ pci_free_consistent(ha->pdev, GDTH_SCRATCH,
+ ha->pscratch, ha->scratch_phys);
+ if (ha->pmsg)
+ pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
+ ha->pmsg, ha->msg_phys);
+ free_irq(ha->irq,ha);
+ scsi_unregister(shp);
+ return 1; /* continue looping */
+ }
+
+ shp->max_id = ha->tid_cnt;
+ shp->max_lun = MAXLUN;
+ shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
+
+ if (virt_ctr) {
+ unchar b;
+
+ virt_ctr = 1;
+ /* register addit. SCSI channels as virtual controllers */
+ for (b = 1; b < ha->bus_cnt + 1; ++b) {
+ shp = scsi_register(shtp,sizeof(gdth_num_str));
+ shp->unchecked_isa_dma = 0;
+ shp->irq = ha->irq;
+ shp->dma_channel = 0xff;
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ NUMDATA(shp)->hanum = (ushort)hanum;
+ NUMDATA(shp)->busnum = b;
+ }
+ }
+
+ spin_lock_init(&ha->smp_lock);
+ gdth_enable_int(hanum);
+
+ return 1; /* continue looping */
+}
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static int __init gdth_detect(struct scsi_host_template *shtp)
#else
static int __init gdth_detect(Scsi_Host_Template *shtp)
#endif
{
- struct Scsi_Host *shp;
gdth_pci_str pcistr[MAXHA];
- gdth_ha_str *ha;
- int i,hanum,cnt,ctr,err;
+ int cnt,ctr;
unchar b;
#ifdef DEBUG_GDTH
@@ -4595,7 +4746,7 @@ static int __init gdth_detect(Scsi_Host_Template *shtp)
if (gdth_ctr_count >= MAXHA)
break;
if (gdth_search_isa(isa_bios)) { /* controller found */
- err = gdth_start_isa(shtp, isa_bios);
+ int err = gdth_start_isa(shtp, isa_bios);
if (err <= 0)
break;
/* err > 0 == continue looping */
@@ -4607,7 +4758,7 @@ static int __init gdth_detect(Scsi_Host_Template *shtp)
if (gdth_ctr_count >= MAXHA)
break;
if (gdth_search_eisa(eisa_slot)) { /* controller found */
- err = gdth_start_eisa(shtp, eisa_slot);
+ int err = gdth_start_eisa(shtp, eisa_slot);
if (err <= 0)
break;
/* err > 0 == continue looping */
@@ -4620,137 +4771,10 @@ static int __init gdth_detect(Scsi_Host_Template *shtp)
printk("GDT-HA: Found %d PCI Storage RAID Controllers\n",cnt);
gdth_sort_pci(pcistr,cnt);
for (ctr = 0; ctr < cnt; ++ctr) {
- dma_addr_t scratch_dma_handle;
- scratch_dma_handle = 0;
-
- 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);
- continue;
- }
- /* controller found and initialized */
- printk("Configuring GDT-PCI HA at %d/%d IRQ %u\n",
- pcistr[ctr].pdev->bus->number,
- PCI_SLOT(pcistr[ctr].pdev->devfn), ha->irq);
-
- if (request_irq(ha->irq, gdth_interrupt,
- IRQF_DISABLED|IRQF_SHARED, "gdth", ha))
- {
- printk("GDT-PCI: Unable to allocate IRQ\n");
- scsi_unregister(shp);
- continue;
- }
- shp->unchecked_isa_dma = 0;
- shp->irq = ha->irq;
- shp->dma_channel = 0xff;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum= 0;
-
- ha->pccb = CMDDATA(shp);
- ha->ccb_phys = 0L;
-
- ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH,
- &scratch_dma_handle);
- ha->scratch_phys = scratch_dma_handle;
- ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str),
- &scratch_dma_handle);
- ha->msg_phys = scratch_dma_handle;
-#ifdef INT_COAL
- ha->coal_stat = (gdth_coal_status *)
- pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, &scratch_dma_handle);
- ha->coal_stat_phys = scratch_dma_handle;
-#endif
- ha->scratch_busy = FALSE;
- ha->req_first = NULL;
- ha->tid_cnt = pcistr[ctr].pdev->device >= 0x200 ? MAXID : MAX_HDRIVES;
- if (max_ids > 0 && max_ids < ha->tid_cnt)
- ha->tid_cnt = max_ids;
- for (i=0; i<GDTH_MAXCMDS; ++i)
- ha->cmd_tab[i].cmnd = UNUSED_CMND;
- ha->scan_mode = rescan ? 0x10 : 0;
-
- err = FALSE;
- if (ha->pscratch == NULL || ha->pmsg == NULL ||
- !gdth_search_drives(hanum)) {
- err = TRUE;
- } else {
- if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
- hdr_channel = ha->bus_cnt;
- ha->virt_bus = hdr_channel;
-
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- scsi_set_pci_device(shp, pcistr[ctr].pdev);
-#endif
- if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat &GDT_64BIT)||
- /* 64-bit DMA only supported from FW >= x.43 */
- (!ha->dma64_support)) {
- if (pci_set_dma_mask(pcistr[ctr].pdev, DMA_32BIT_MASK)) {
- printk(KERN_WARNING "GDT-PCI %d: Unable to set 32-bit DMA\n", hanum);
- err = TRUE;
- }
- } else {
- shp->max_cmd_len = 16;
- if (!pci_set_dma_mask(pcistr[ctr].pdev, DMA_64BIT_MASK)) {
- printk("GDT-PCI %d: 64-bit DMA enabled\n", hanum);
- } else if (pci_set_dma_mask(pcistr[ctr].pdev, DMA_32BIT_MASK)) {
- printk(KERN_WARNING "GDT-PCI %d: Unable to set 64/32-bit DMA\n", hanum);
- err = TRUE;
- }
- }
- }
-
- if (err) {
- printk("GDT-PCI %d: Error during device scan\n", hanum);
- --gdth_ctr_count;
- --gdth_ctr_vcount;
-#ifdef INT_COAL
- if (ha->coal_stat)
- pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
- MAXOFFSETS, ha->coal_stat,
- ha->coal_stat_phys);
-#endif
- if (ha->pscratch)
- pci_free_consistent(ha->pdev, GDTH_SCRATCH,
- ha->pscratch, ha->scratch_phys);
- if (ha->pmsg)
- pci_free_consistent(ha->pdev, sizeof(gdth_msg_str),
- ha->pmsg, ha->msg_phys);
- free_irq(ha->irq,ha);
- scsi_unregister(shp);
- continue;
- }
-
- shp->max_id = ha->tid_cnt;
- shp->max_lun = MAXLUN;
- shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
- if (virt_ctr) {
- virt_ctr = 1;
- /* register addit. SCSI channels as virtual controllers */
- for (b = 1; b < ha->bus_cnt + 1; ++b) {
- shp = scsi_register(shtp,sizeof(gdth_num_str));
- shp->unchecked_isa_dma = 0;
- shp->irq = ha->irq;
- shp->dma_channel = 0xff;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
- NUMDATA(shp)->hanum = (ushort)hanum;
- NUMDATA(shp)->busnum = b;
- }
- }
-
- spin_lock_init(&ha->smp_lock);
- gdth_enable_int(hanum);
+ int err = gdth_start_pci(shtp, pcistr, ctr);
+ if (err <= 0)
+ break;
+ /* err > 0 == continue looping */
}
TRACE2(("gdth_detect() %d controller detected\n",gdth_ctr_count));
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] gdth: Remove 2.4.x support, in-kernel changelog
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
2007-07-21 2:21 ` [PATCH 2/4] gdth: Split out PCI " Jeff Garzik
@ 2007-07-21 2:22 ` Jeff Garzik
2007-07-21 2:23 ` [PATCH 4/4] gdth: Isolate driver-global variables using helpers Jeff Garzik
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-07-21 2:22 UTC (permalink / raw)
To: linux-scsi; +Cc: Christoph Hellwig, achim_leubner, Andrew Morton
commit 095089554011aef3834fd7b7e35ce0c84349d9a9
Author: Jeff Garzik <jeff@garzik.org>
Date: Fri Jul 20 21:17:45 2007 -0400
[SCSI] gdth: Remove 2.4.x support, in-kernel changelog
* Remove in-source changelog. It's archived permanently in git and
various kernel archives, and changelogs should exist purely in git.
* Remove 2.4.x kernel support. It is an active obstacle to
modernizing this driver, at this point. This includes killing
gdth_kcompat.h which is 100% redundant in modern kernels.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/gdth.c | 408 --------------------------------------------
drivers/scsi/gdth.h | 1
drivers/scsi/gdth_kcompat.h | 31 ---
drivers/scsi/gdth_proc.c | 27 --
4 files changed, 2 insertions(+), 465 deletions(-)
095089554011aef3834fd7b7e35ce0c84349d9a9
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index 9d38108..bc8b40a 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -27,280 +27,8 @@
* along with this kernel; if not, write to the Free Software *
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* *
- * Linux kernel 2.4.x, 2.6.x supported *
+ * Linux kernel 2.6.x supported *
* *
- * $Log: gdth.c,v $
- * Revision 1.74 2006/04/10 13:44:47 achim
- * Community changes for 2.6.x
- * Kernel 2.2.x no longer supported
- * scsi_request interface removed, thanks to Christoph Hellwig
- *
- * Revision 1.73 2004/03/31 13:33:03 achim
- * Special command 0xfd implemented to detect 64-bit DMA support
- *
- * Revision 1.72 2004/03/17 08:56:04 achim
- * 64-bit DMA only enabled if FW >= x.43
- *
- * Revision 1.71 2004/03/05 15:51:29 achim
- * Screen service: separate message buffer, bugfixes
- *
- * Revision 1.70 2004/02/27 12:19:07 achim
- * Bugfix: Reset bit in config (0xfe) call removed
- *
- * Revision 1.69 2004/02/20 09:50:24 achim
- * Compatibility changes for kernels < 2.4.20
- * Bugfix screen service command size
- * pci_set_dma_mask() error handling added
- *
- * Revision 1.68 2004/02/19 15:46:54 achim
- * 64-bit DMA bugfixes
- * Drive size bugfix for drives > 1TB
- *
- * Revision 1.67 2004/01/14 13:11:57 achim
- * Tool access over /proc no longer supported
- * Bugfixes IOCTLs
- *
- * Revision 1.66 2003/12/19 15:04:06 achim
- * Bugfixes support for drives > 2TB
- *
- * Revision 1.65 2003/12/15 11:21:56 achim
- * 64-bit DMA support added
- * Support for drives > 2 TB implemented
- * Kernels 2.2.x, 2.4.x, 2.6.x supported
- *
- * Revision 1.64 2003/09/17 08:30:26 achim
- * EISA/ISA controller scan disabled
- * Command line switch probe_eisa_isa added
- *
- * Revision 1.63 2003/07/12 14:01:00 Daniele Bellucci <bellucda@tiscali.it>
- * Minor cleanups in gdth_ioctl.
- *
- * Revision 1.62 2003/02/27 15:01:59 achim
- * Dynamic DMA mapping implemented
- * New (character device) IOCTL interface added
- * Other controller related changes made
- *
- * Revision 1.61 2002/11/08 13:09:52 boji
- * Added support for XSCALE based RAID Controllers
- * Fixed SCREENSERVICE initialization in SMP cases
- * Added checks for gdth_polling before GDTH_HA_LOCK
- *
- * Revision 1.60 2002/02/05 09:35:22 achim
- * MODULE_LICENSE only if kernel >= 2.4.11
- *
- * Revision 1.59 2002/01/30 09:46:33 achim
- * Small changes
- *
- * Revision 1.58 2002/01/29 15:30:02 achim
- * Set default value of shared_access to Y
- * New status S_CACHE_RESERV for clustering added
- *
- * Revision 1.57 2001/08/21 11:16:35 achim
- * Bugfix free_irq()
- *
- * Revision 1.56 2001/08/09 11:19:39 achim
- * Scsi_Host_Template changes
- *
- * Revision 1.55 2001/08/09 10:11:28 achim
- * Command HOST_UNFREEZE_IO before cache service init.
- *
- * Revision 1.54 2001/07/20 13:48:12 achim
- * Expand: gdth_analyse_hdrive() removed
- *
- * Revision 1.53 2001/07/17 09:52:49 achim
- * Small OEM related change
- *
- * Revision 1.52 2001/06/19 15:06:20 achim
- * New host command GDT_UNFREEZE_IO added
- *
- * Revision 1.51 2001/05/22 06:42:37 achim
- * PCI: Subdevice ID added
- *
- * Revision 1.50 2001/05/17 13:42:16 achim
- * Support for Intel Storage RAID Controllers added
- *
- * Revision 1.50 2001/05/17 12:12:34 achim
- * Support for Intel Storage RAID Controllers added
- *
- * Revision 1.49 2001/03/15 15:07:17 achim
- * New __setup interface for boot command line options added
- *
- * Revision 1.48 2001/02/06 12:36:28 achim
- * Bugfix Cluster protocol
- *
- * Revision 1.47 2001/01/10 14:42:06 achim
- * New switch shared_access added
- *
- * Revision 1.46 2001/01/09 08:11:35 achim
- * gdth_command() removed
- * meaning of Scsi_Pointer members changed
- *
- * Revision 1.45 2000/11/16 12:02:24 achim
- * Changes for kernel 2.4
- *
- * Revision 1.44 2000/10/11 08:44:10 achim
- * Clustering changes: New flag media_changed added
- *
- * Revision 1.43 2000/09/20 12:59:01 achim
- * DPMEM remap functions for all PCI controller types implemented
- * Small changes for ia64 platform
- *
- * Revision 1.42 2000/07/20 09:04:50 achim
- * Small changes for kernel 2.4
- *
- * Revision 1.41 2000/07/04 14:11:11 achim
- * gdth_analyse_hdrive() added to rescan drives after online expansion
- *
- * Revision 1.40 2000/06/27 11:24:16 achim
- * Changes Clustering, Screenservice
- *
- * Revision 1.39 2000/06/15 13:09:04 achim
- * Changes for gdth_do_cmd()
- *
- * Revision 1.38 2000/06/15 12:08:43 achim
- * Bugfix gdth_sync_event(), service SCREENSERVICE
- * Data direction for command 0xc2 changed to DOU
- *
- * Revision 1.37 2000/05/25 13:50:10 achim
- * New driver parameter virt_ctr added
- *
- * Revision 1.36 2000/05/04 08:50:46 achim
- * Event buffer now in gdth_ha_str
- *
- * Revision 1.35 2000/03/03 10:44:08 achim
- * New event_string only valid for the RP controller family
- *
- * Revision 1.34 2000/03/02 14:55:29 achim
- * New mechanism for async. event handling implemented
- *
- * Revision 1.33 2000/02/21 15:37:37 achim
- * Bugfix Alpha platform + DPMEM above 4GB
- *
- * Revision 1.32 2000/02/14 16:17:37 achim
- * Bugfix sense_buffer[] + raw devices
- *
- * Revision 1.31 2000/02/10 10:29:00 achim
- * Delete sense_buffer[0], if command OK
- *
- * Revision 1.30 1999/11/02 13:42:39 achim
- * ARRAY_DRV_LIST2 implemented
- * Now 255 log. and 100 host drives supported
- *
- * Revision 1.29 1999/10/05 13:28:47 achim
- * GDT_CLUST_RESET added
- *
- * Revision 1.28 1999/08/12 13:44:54 achim
- * MOUNTALL removed
- * Cluster drives -> removeable drives
- *
- * Revision 1.27 1999/06/22 07:22:38 achim
- * Small changes
- *
- * Revision 1.26 1999/06/10 16:09:12 achim
- * Cluster Host Drive support: Bugfixes
- *
- * Revision 1.25 1999/06/01 16:03:56 achim
- * gdth_init_pci(): Manipulate config. space to start RP controller
- *
- * Revision 1.24 1999/05/26 11:53:06 achim
- * Cluster Host Drive support added
- *
- * Revision 1.23 1999/03/26 09:12:31 achim
- * Default value for hdr_channel set to 0
- *
- * Revision 1.22 1999/03/22 16:27:16 achim
- * Bugfix: gdth_store_event() must not be locked with GDTH_LOCK_HA()
- *
- * Revision 1.21 1999/03/16 13:40:34 achim
- * Problems with reserved drives solved
- * gdth_eh_bus_reset() implemented
- *
- * Revision 1.20 1999/03/10 09:08:13 achim
- * Bugfix: Corrections in gdth_direction_tab[] made
- * Bugfix: Increase command timeout (gdth_update_timeout()) NOT in gdth_putq()
- *
- * Revision 1.19 1999/03/05 14:38:16 achim
- * Bugfix: Heads/Sectors mapping for reserved devices possibly wrong
- * -> gdth_eval_mapping() implemented, changes in gdth_bios_param()
- * INIT_RETRIES set to 100s to avoid DEINIT-Timeout for controllers
- * with BIOS disabled and memory test set to Intensive
- * Enhanced /proc support
- *
- * Revision 1.18 1999/02/24 09:54:33 achim
- * Command line parameter hdr_channel implemented
- * Bugfix for EISA controllers + Linux 2.2.x
- *
- * Revision 1.17 1998/12/17 15:58:11 achim
- * Command line parameters implemented
- * Changes for Alpha platforms
- * PCI controller scan changed
- * SMP support improved (spin_lock_irqsave(),...)
- * New async. events, new scan/reserve commands included
- *
- * Revision 1.16 1998/09/28 16:08:46 achim
- * GDT_PCIMPR: DPMEM remapping, if required
- * mdelay() added
- *
- * Revision 1.15 1998/06/03 14:54:06 achim
- * gdth_delay(), gdth_flush() implemented
- * Bugfix: gdth_release() changed
- *
- * Revision 1.14 1998/05/22 10:01:17 achim
- * mj: pcibios_strerror() removed
- * Improved SMP support (if version >= 2.1.95)
- * gdth_halt(): halt_called flag added (if version < 2.1)
- *
- * Revision 1.13 1998/04/16 09:14:57 achim
- * Reserve drives (for raw service) implemented
- * New error handling code enabled
- * Get controller name from board_info() IOCTL
- * Final round of PCI device driver patches by Martin Mares
- *
- * Revision 1.12 1998/03/03 09:32:37 achim
- * Fibre channel controller support added
- *
- * Revision 1.11 1998/01/27 16:19:14 achim
- * SA_SHIRQ added
- * add_timer()/del_timer() instead of GDTH_TIMER
- * scsi_add_timer()/scsi_del_timer() instead of SCSI_TIMER
- * New error handling included
- *
- * Revision 1.10 1997/10/31 12:29:57 achim
- * Read heads/sectors from host drive
- *
- * Revision 1.9 1997/09/04 10:07:25 achim
- * IO-mapping with virt_to_bus(), gdth_readb(), gdth_writeb(), ...
- * register_reboot_notifier() to get a notify on shutown used
- *
- * Revision 1.8 1997/04/02 12:14:30 achim
- * Version 1.00 (see gdth.h), tested with kernel 2.0.29
- *
- * Revision 1.7 1997/03/12 13:33:37 achim
- * gdth_reset() changed, new async. events
- *
- * Revision 1.6 1997/03/04 14:01:11 achim
- * Shutdown routine gdth_halt() implemented
- *
- * Revision 1.5 1997/02/21 09:08:36 achim
- * New controller included (RP, RP1, RP2 series)
- * IOCTL interface implemented
- *
- * Revision 1.4 1996/07/05 12:48:55 achim
- * Function gdth_bios_param() implemented
- * New constant GDTH_MAXC_P_L inserted
- * GDT_WRITE_THR, GDT_EXT_INFO implemented
- * Function gdth_reset() changed
- *
- * Revision 1.3 1996/05/10 09:04:41 achim
- * Small changes for Linux 1.2.13
- *
- * Revision 1.2 1996/05/09 12:45:27 achim
- * Loadable module support implemented
- * /proc support corrections made
- *
- * Revision 1.1 1996/04/11 07:35:57 achim
- * Initial revision
- *
************************************************************************/
/* All GDT Disk Array Controllers are fully supported by this driver.
@@ -392,12 +120,7 @@
#include <linux/proc_fs.h>
#include <linux/time.h>
#include <linux/timer.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,6)
#include <linux/dma-mapping.h>
-#else
-#define DMA_32BIT_MASK 0x00000000ffffffffULL
-#define DMA_64BIT_MASK 0xffffffffffffffffULL
-#endif
#ifdef GDTH_RTC
#include <linux/mc146818rtc.h>
@@ -409,16 +132,10 @@
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/spinlock.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#include <linux/blkdev.h>
-#else
-#include <linux/blk.h>
-#include "sd.h"
-#endif
#include "scsi.h"
#include <scsi/scsi_host.h>
-#include "gdth_kcompat.h"
#include "gdth.h"
static void gdth_delay(int milliseconds);
@@ -655,7 +372,6 @@ static int probe_eisa_isa = 0;
static int force_dma32 = 0;
/* parameters for modprobe/insmod */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,11)
module_param_array(irq, int, NULL, 0);
module_param(disable, int, 0);
module_param(reserve_mode, int, 0);
@@ -668,20 +384,6 @@ module_param(virt_ctr, int, 0);
module_param(shared_access, int, 0);
module_param(probe_eisa_isa, int, 0);
module_param(force_dma32, int, 0);
-#else
-MODULE_PARM(irq, "i");
-MODULE_PARM(disable, "i");
-MODULE_PARM(reserve_mode, "i");
-MODULE_PARM(reserve_list, "4-" __MODULE_STRING(MAX_RES_ARGS) "i");
-MODULE_PARM(reverse_scan, "i");
-MODULE_PARM(hdr_channel, "i");
-MODULE_PARM(max_ids, "i");
-MODULE_PARM(rescan, "i");
-MODULE_PARM(virt_ctr, "i");
-MODULE_PARM(shared_access, "i");
-MODULE_PARM(probe_eisa_isa, "i");
-MODULE_PARM(force_dma32, "i");
-#endif
MODULE_AUTHOR("Achim Leubner");
MODULE_LICENSE("GPL");
@@ -710,7 +412,6 @@ static void gdth_delay(int milliseconds)
}
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static void gdth_scsi_done(struct scsi_cmnd *scp)
{
TRACE2(("gdth_scsi_done()\n"));
@@ -748,42 +449,6 @@ int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd,
kfree(scp);
return rval;
}
-#else
-static void gdth_scsi_done(Scsi_Cmnd *scp)
-{
- TRACE2(("gdth_scsi_done()\n"));
-
- scp->request.rq_status = RQ_SCSI_DONE;
- if (scp->request.waiting)
- complete(scp->request.waiting);
-}
-
-int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd,
- int timeout, u32 *info)
-{
- Scsi_Cmnd *scp = scsi_allocate_device(sdev, 1, FALSE);
- unsigned bufflen = gdtcmd ? sizeof(gdth_cmd_str) : 0;
- DECLARE_COMPLETION_ONSTACK(wait);
- int rval;
-
- if (!scp)
- return -ENOMEM;
- scp->cmd_len = 12;
- scp->use_sg = 0;
- scp->SCp.this_residual = IOCTL_PRI; /* priority */
- scp->request.rq_status = RQ_SCSI_BUSY;
- scp->request.waiting = &wait;
- scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1);
- wait_for_completion(&wait);
-
- rval = scp->SCp.Status;
- if (info)
- *info = scp->SCp.Message;
-
- scsi_release_command(scp);
- return rval;
-}
-#endif
int gdth_execute(struct Scsi_Host *shost, gdth_cmd_str *gdtcmd, char *cmnd,
int timeout, u32 *info)
@@ -2243,29 +1908,17 @@ static int __init gdth_search_drives(int hanum)
printk("GDT-HA %d: Vendor: %s Name: %s\n",
hanum,oemstr->text.oem_company_name,ha->binfo.type_string);
/* Save the Host Drive inquiry data */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
strlcpy(ha->oem_name,oemstr->text.scsi_host_drive_inquiry_vendor_id,
sizeof(ha->oem_name));
-#else
- strncpy(ha->oem_name,oemstr->text.scsi_host_drive_inquiry_vendor_id,7);
- ha->oem_name[7] = '\0';
-#endif
} else {
/* Old method, based on PCI ID */
TRACE2(("gdth_search_drives(): CACHE_READ_OEM_STRING_RECORD failed\n"));
printk("GDT-HA %d: Name: %s\n",
hanum,ha->binfo.type_string);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
if (ha->oem_id == OEM_ID_INTEL)
strlcpy(ha->oem_name,"Intel ", sizeof(ha->oem_name));
else
strlcpy(ha->oem_name,"ICP ", sizeof(ha->oem_name));
-#else
- if (ha->oem_id == OEM_ID_INTEL)
- strcpy(ha->oem_name,"Intel ");
- else
- strcpy(ha->oem_name,"ICP ");
-#endif
}
/* scanning for host drives */
@@ -2674,17 +2327,10 @@ static void gdth_copy_internal_data(int hanum,Scsi_Cmnd *scp,
return;
}
local_irq_save(flags);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
address = kmap_atomic(sl->page, KM_BIO_SRC_IRQ) + sl->offset;
memcpy(address,buffer,cpnow);
flush_dcache_page(sl->page);
kunmap_atomic(address, KM_BIO_SRC_IRQ);
-#else
- address = kmap_atomic(sl->page, KM_BH_IRQ) + sl->offset;
- memcpy(address,buffer,cpnow);
- flush_dcache_page(sl->page);
- kunmap_atomic(address, KM_BH_IRQ);
-#endif
local_irq_restore(flags);
if (cpsum == cpcount)
break;
@@ -4381,10 +4027,6 @@ static int __init gdth_start_isa(struct scsi_host_template *shtp,
hdr_channel = ha->bus_cnt;
ha->virt_bus = hdr_channel;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
- LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- shp->highmem_io = 0;
-#endif
if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
shp->max_cmd_len = 16;
@@ -4513,10 +4155,6 @@ static int __init gdth_start_eisa(struct scsi_host_template *shtp,
hdr_channel = ha->bus_cnt;
ha->virt_bus = hdr_channel;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \
-LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- shp->highmem_io = 0;
-#endif
if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT)
shp->max_cmd_len = 16;
@@ -4622,10 +4260,6 @@ static int __init gdth_start_pci(struct scsi_host_template *shtp,
hdr_channel = ha->bus_cnt;
ha->virt_bus = hdr_channel;
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- scsi_set_pci_device(shp, pcistr[ctr].pdev);
-#endif
-
if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat &
GDT_64BIT) ||
/* 64-bit DMA only supported from FW >= x.43 */
@@ -4698,11 +4332,7 @@ static int __init gdth_start_pci(struct scsi_host_template *shtp,
return 1; /* continue looping */
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static int __init gdth_detect(struct scsi_host_template *shtp)
-#else
-static int __init gdth_detect(Scsi_Host_Template *shtp)
-#endif
{
gdth_pci_str pcistr[MAXHA];
int cnt,ctr;
@@ -4948,11 +4578,7 @@ static int gdth_eh_bus_reset(Scsi_Cmnd *scp)
return SUCCESS;
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static int gdth_bios_param(struct scsi_device *sdev,struct block_device *bdev,sector_t cap,int *ip)
-#else
-static int gdth_bios_param(Disk *disk,kdev_t dev,int *ip)
-#endif
{
unchar b, t;
int hanum;
@@ -4960,13 +4586,8 @@ static int gdth_bios_param(Disk *disk,kdev_t dev,int *ip)
struct scsi_device *sd;
unsigned capacity;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
sd = sdev;
capacity = cap;
-#else
- sd = disk->device;
- capacity = disk->capacity;
-#endif
hanum = NUMDATA(sd->host)->hanum;
b = virt_ctr ? NUMDATA(sd->host)->busnum : sd->channel;
t = sd->id;
@@ -5581,7 +5202,6 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
hanum = res.ionode;
ha = HADATA(gdth_ctr_tab[hanum]);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
scp = kmalloc(sizeof(*scp), GFP_KERNEL);
if (!scp)
return -ENOMEM;
@@ -5593,17 +5213,7 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
rval = gdth_eh_bus_reset(scp);
res.status = (rval == SUCCESS ? S_OK : S_GENERR);
kfree(scp);
-#else
- scp = scsi_allocate_device(ha->sdev, 1, FALSE);
- if (!scp)
- return -ENOMEM;
- scp->cmd_len = 12;
- scp->use_sg = 0;
- scp->channel = virt_ctr ? 0 : res.number;
- rval = gdth_eh_bus_reset(scp);
- res.status = (rval == SUCCESS ? S_OK : S_GENERR);
- scsi_release_command(scp);
-#endif
+
if (copy_to_user(argp, &res, sizeof(gdth_ioctl_reset)))
return -EFAULT;
break;
@@ -5691,7 +5301,6 @@ static int gdth_halt(struct notifier_block *nb, ulong event, void *buf)
return NOTIFY_OK;
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
/* configure lun */
static int gdth_slave_configure(struct scsi_device *sdev)
{
@@ -5700,13 +5309,8 @@ static int gdth_slave_configure(struct scsi_device *sdev)
sdev->skip_ms_page_8 = 1;
return 0;
}
-#endif
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
static struct scsi_host_template driver_template = {
-#else
-static Scsi_Host_Template driver_template = {
-#endif
.proc_name = "gdth",
.proc_info = gdth_proc_info,
.name = "GDT SCSI Disk Array Controller",
@@ -5717,20 +5321,12 @@ static Scsi_Host_Template driver_template = {
.eh_bus_reset_handler = gdth_eh_bus_reset,
.bios_param = gdth_bios_param,
.can_queue = GDTH_MAXCMDS,
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
.slave_configure = gdth_slave_configure,
-#endif
.this_id = -1,
.sg_tablesize = GDTH_MAXSG,
.cmd_per_lun = GDTH_MAXC_P_L,
.unchecked_isa_dma = 1,
.use_clustering = ENABLE_CLUSTERING,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- .use_new_eh_code = 1,
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
- .highmem_io = 1,
-#endif
-#endif
};
#include "scsi_module.c"
diff --git a/drivers/scsi/gdth.h b/drivers/scsi/gdth.h
index 3742330..6884587 100644
--- a/drivers/scsi/gdth.h
+++ b/drivers/scsi/gdth.h
@@ -13,7 +13,6 @@
* $Id: gdth.h,v 1.58 2006/01/11 16:14:09 achim Exp $
*/
-#include <linux/version.h>
#include <linux/types.h>
#ifndef TRUE
diff --git a/drivers/scsi/gdth_kcompat.h b/drivers/scsi/gdth_kcompat.h
deleted file mode 100644
index 2a302ee..0000000
--- a/drivers/scsi/gdth_kcompat.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef IRQ_HANDLED
-typedef void irqreturn_t;
-#define IRQ_NONE
-#define IRQ_HANDLED
-#endif
-
-#ifndef MODULE_LICENSE
-#define MODULE_LICENSE(x)
-#endif
-
-#ifndef __iomem
-#define __iomem
-#endif
-
-#ifndef __attribute_used__
-#define __attribute_used__ __devinitdata
-#endif
-
-#ifndef __user
-#define __user
-#endif
-
-#ifndef SERVICE_ACTION_IN
-#define SERVICE_ACTION_IN 0x9e
-#endif
-#ifndef READ_16
-#define READ_16 0x88
-#endif
-#ifndef WRITE_16
-#define WRITE_16 0x8a
-#endif
diff --git a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c
index 32982eb..5fccb15 100644
--- a/drivers/scsi/gdth_proc.c
+++ b/drivers/scsi/gdth_proc.c
@@ -4,7 +4,6 @@
#include <linux/completion.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
int gdth_proc_info(struct Scsi_Host *host, char *buffer,char **start,off_t offset,int length,
int inout)
{
@@ -21,32 +20,6 @@ int gdth_proc_info(struct Scsi_Host *host, char *buffer,char **start,off_t offse
else
return(gdth_get_info(buffer,start,offset,length,host,hanum,busnum));
}
-#else
-int gdth_proc_info(char *buffer,char **start,off_t offset,int length,int hostno,
- int inout)
-{
- int hanum,busnum,i;
-
- TRACE2(("gdth_proc_info() length %d offs %d inout %d\n",
- length,(int)offset,inout));
-
- for (i = 0; i < gdth_ctr_vcount; ++i) {
- if (gdth_ctr_vtab[i]->host_no == hostno)
- break;
- }
- if (i == gdth_ctr_vcount)
- return(-EINVAL);
-
- hanum = NUMDATA(gdth_ctr_vtab[i])->hanum;
- busnum= NUMDATA(gdth_ctr_vtab[i])->busnum;
-
- if (inout)
- return(gdth_set_info(buffer,length,gdth_ctr_vtab[i],hanum,busnum));
- else
- return(gdth_get_info(buffer,start,offset,length,
- gdth_ctr_vtab[i],hanum,busnum));
-}
-#endif
static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host,
int hanum,int busnum)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] gdth: Isolate driver-global variables using helpers
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
2007-07-21 2:21 ` [PATCH 2/4] gdth: Split out PCI " Jeff Garzik
2007-07-21 2:22 ` [PATCH 3/4] gdth: Remove 2.4.x support, in-kernel changelog Jeff Garzik
@ 2007-07-21 2:23 ` Jeff Garzik
2007-07-21 11:01 ` Christoph Hellwig
2007-07-21 2:50 ` [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
` (2 subsequent siblings)
5 siblings, 1 reply; 8+ messages in thread
From: Jeff Garzik @ 2007-07-21 2:23 UTC (permalink / raw)
To: linux-scsi; +Cc: Christoph Hellwig, achim_leubner, Andrew Morton
commit fa82107fcc8bb738d3be1a0786302d54d483900f
Author: Jeff Garzik <jeff@garzik.org>
Date: Fri Jul 20 22:13:36 2007 -0400
[SCSI] gdth: Isolate driver-global variables using helpers
Sanitizes access to some driver-global variables, in preparation for
making them dynamic rather than statically-sized.
This equivalent-transform style change blissfully ignores the fact that
gdth_ctr_vtab[] is never used (only assigned), and that the driver
itself seems to get a bit confused between gdth_ctr_count and
gdth_ctr_vcount. The whole virtual-controller stuff needs reviewing
for edge cases.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/gdth.c | 150 ++++++++++++++++++++++++++++-------------------
drivers/scsi/gdth_proc.c | 16 ++---
2 files changed, 99 insertions(+), 67 deletions(-)
fa82107fcc8bb738d3be1a0786302d54d483900f
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index bc8b40a..a6636b8 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -394,6 +394,44 @@ static const struct file_operations gdth_fops = {
.release = gdth_close,
};
+static struct Scsi_Host *gdth_find_shp(int ha_idx)
+{
+ return gdth_ctr_tab[ha_idx];
+}
+
+static gdth_ha_str *gdth_find_ha(int ha_idx)
+{
+ struct Scsi_Host *shp = gdth_find_shp(ha_idx);
+ if (!shp)
+ return NULL;
+ return HADATA(shp);
+}
+
+static void gdth_push_vshp(struct Scsi_Host *shp)
+{
+ gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+}
+
+static int gdth_push_shp(struct Scsi_Host *shp)
+{
+ int idx;
+
+ idx = gdth_ctr_count;
+ gdth_ctr_count++;
+
+ gdth_ctr_tab[idx] = shp;
+
+ gdth_push_vshp(shp);
+
+ return idx;
+}
+
+static void gdth_pop_shp(void)
+{
+ gdth_ctr_count--;
+ gdth_ctr_vcount--;
+}
+
#include "gdth_proc.h"
#include "gdth_proc.c"
@@ -1220,7 +1258,7 @@ static void __init gdth_enable_int(int hanum)
gdt6m_dpram_str __iomem *dp6m_ptr;
TRACE(("gdth_enable_int() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
if (ha->type == GDT_EISA) {
@@ -1260,7 +1298,7 @@ static int gdth_get_status(unchar *pIStatus,int irq)
*pIStatus = 0;
for (i=0; i<gdth_ctr_count; ++i) {
- ha = HADATA(gdth_ctr_tab[i]);
+ ha = gdth_find_ha(i);
if (ha->irq != (unchar)irq) /* check IRQ */
continue;
if (ha->type == GDT_EISA)
@@ -1291,7 +1329,7 @@ static int gdth_test_busy(int hanum)
TRACE(("gdth_test_busy() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (ha->type == GDT_EISA)
gdtsema0 = (int)inb(ha->bmic + SEMA0REG);
else if (ha->type == GDT_ISA)
@@ -1315,7 +1353,7 @@ static int gdth_get_cmd_index(int hanum)
TRACE(("gdth_get_cmd_index() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
for (i=0; i<GDTH_MAXCMDS; ++i) {
if (ha->cmd_tab[i].cmnd == UNUSED_CMND) {
ha->cmd_tab[i].cmnd = ha->pccb->RequestBuffer;
@@ -1334,7 +1372,7 @@ static void gdth_set_sema0(int hanum)
TRACE(("gdth_set_sema0() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (ha->type == GDT_EISA) {
outb(1, ha->bmic + SEMA0REG);
} else if (ha->type == GDT_ISA) {
@@ -1361,7 +1399,7 @@ static void gdth_copy_command(int hanum)
TRACE(("gdth_copy_command() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cp_count = ha->cmd_len;
dp_offset= ha->cmd_offs_dpmem;
cmd_no = ha->cmd_cnt;
@@ -1415,7 +1453,7 @@ static void gdth_release_event(int hanum)
register gdth_ha_str *ha;
TRACE(("gdth_release_event() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
#ifdef GDTH_STATISTICS
{
@@ -1457,7 +1495,7 @@ static int gdth_wait(int hanum,int index,ulong32 time)
TRACE(("gdth_wait() hanum %d index %d time %d\n",hanum,index,time));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (index == 0)
return 1; /* no wait required */
@@ -1488,7 +1526,7 @@ static int gdth_internal_cmd(int hanum,unchar service,ushort opcode,ulong32 p1,
TRACE2(("gdth_internal_cmd() service %d opcode %d\n",service,opcode));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cmd_ptr = ha->pccb;
memset((char*)cmd_ptr,0,sizeof(gdth_cmd_str));
@@ -1581,7 +1619,7 @@ static int __init gdth_search_drives(int hanum)
#endif
TRACE(("gdth_search_drives() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
ok = 0;
/* initialize controller services, at first: screen service */
@@ -1938,7 +1976,7 @@ static int gdth_analyse_hdrive(int hanum,ushort hdrive)
TRACE(("gdth_analyse_hdrive() hanum %d drive %d\n",hanum,hdrive));
if (hdrive >= MAX_HDRIVES)
return 0;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (!gdth_internal_cmd(hanum,CACHESERVICE,GDT_INFO,hdrive,0,0))
return 0;
@@ -2005,7 +2043,7 @@ static void gdth_putq(int hanum,Scsi_Cmnd *scp,unchar priority)
unchar b, t;
TRACE(("gdth_putq() priority %d\n",priority));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
if (scp->done != gdth_scsi_done) {
@@ -2059,7 +2097,7 @@ static void gdth_next(int hanum)
int cmd_index;
TRACE(("gdth_next() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (!gdth_polling)
spin_lock_irqsave(&ha->smp_lock, flags);
@@ -2309,7 +2347,7 @@ static void gdth_copy_internal_data(int hanum,Scsi_Cmnd *scp,
char *address;
cpcount = count<=(ushort)scp->request_bufflen ? count:(ushort)scp->request_bufflen;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (scp->use_sg) {
sl = (struct scatterlist *)scp->request_buffer;
@@ -2351,7 +2389,7 @@ static int gdth_internal_cache_cmd(int hanum,Scsi_Cmnd *scp)
gdth_sense_data sd;
gdth_modep_data mpd;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
t = scp->device->id;
TRACE(("gdth_internal_cache_cmd() cmd 0x%x hdrive %d\n",
scp->cmnd[0],t));
@@ -2456,7 +2494,7 @@ static int gdth_fill_cache_cmd(int hanum,Scsi_Cmnd *scp,ushort hdrive)
struct page *page;
ulong offset;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cmdp = ha->pccb;
TRACE(("gdth_fill_cache_cmd() cmd 0x%x cmdsize %d hdrive %d\n",
scp->cmnd[0],scp->cmd_len,hdrive));
@@ -2666,7 +2704,7 @@ static int gdth_fill_raw_cmd(int hanum,Scsi_Cmnd *scp,unchar b)
struct page *page;
ulong offset;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
t = scp->device->id;
l = scp->device->lun;
cmdp = ha->pccb;
@@ -2865,7 +2903,7 @@ static int gdth_special_cmd(int hanum,Scsi_Cmnd *scp)
register gdth_cmd_str *cmdp;
int cmd_index;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cmdp= ha->pccb;
TRACE2(("gdth_special_cmd(): "));
@@ -3087,7 +3125,7 @@ static irqreturn_t gdth_interrupt(int irq,void *dev_id)
spin_unlock_irqrestore(&ha2->smp_lock, flags);
return IRQ_HANDLED;
}
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
#ifdef GDTH_STATISTICS
++act_ints;
@@ -3315,7 +3353,7 @@ static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp)
gdth_cmd_str *cmdp;
unchar b, t;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cmdp = ha->pccb;
TRACE(("gdth_sync_event() serv %d status %d\n",
service,ha->status));
@@ -3686,7 +3724,7 @@ static int gdth_async_event(int hanum)
gdth_cmd_str *cmdp;
int cmd_index;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
cmdp= ha->pccb;
TRACE2(("gdth_async_event() ha %d serv %d\n",
hanum,ha->service));
@@ -3812,7 +3850,7 @@ static void gdth_timeout(ulong data)
ulong flags;
int hanum = 0;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
for (act_stats=0,i=0; i<GDTH_MAXCMDS; ++i)
@@ -3965,9 +4003,7 @@ static int __init gdth_start_isa(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 1;
shp->irq = ha->irq;
shp->dma_channel = ha->drq;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ hanum = gdth_push_shp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum= 0;
@@ -4001,8 +4037,7 @@ static int __init gdth_start_isa(struct scsi_host_template *shtp,
if (ha->pscratch == NULL || ha->pmsg == NULL ||
!gdth_search_drives(hanum)) {
printk("GDT-ISA: Error during device scan\n");
- --gdth_ctr_count;
- --gdth_ctr_vcount;
+ gdth_pop_shp();
#ifdef INT_COAL
if (ha->coal_stat)
@@ -4043,7 +4078,7 @@ static int __init gdth_start_isa(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 1;
shp->irq = ha->irq;
shp->dma_channel = ha->drq;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ gdth_push_vshp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum = b;
}
@@ -4087,9 +4122,7 @@ static int __init gdth_start_eisa(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 0;
shp->irq = ha->irq;
shp->dma_channel = 0xff;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ hanum = gdth_push_shp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum= 0;
@@ -4129,8 +4162,8 @@ static int __init gdth_start_eisa(struct scsi_host_template *shtp,
if (ha->pscratch == NULL || ha->pmsg == NULL ||
!gdth_search_drives(hanum)) {
printk("GDT-EISA: Error during device scan\n");
- --gdth_ctr_count;
- --gdth_ctr_vcount;
+ gdth_pop_shp();
+
#ifdef INT_COAL
if (ha->coal_stat)
pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *
@@ -4171,7 +4204,7 @@ static int __init gdth_start_eisa(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 0;
shp->irq = ha->irq;
shp->dma_channel = 0xff;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ gdth_push_vshp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum = b;
}
@@ -4218,9 +4251,7 @@ static int __init gdth_start_pci(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 0;
shp->irq = ha->irq;
shp->dma_channel = 0xff;
- hanum = gdth_ctr_count;
- gdth_ctr_tab[gdth_ctr_count++] = shp;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ hanum = gdth_push_shp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum= 0;
@@ -4285,8 +4316,7 @@ static int __init gdth_start_pci(struct scsi_host_template *shtp,
if (err) {
printk("GDT-PCI %d: Error during device scan\n", hanum);
- --gdth_ctr_count;
- --gdth_ctr_vcount;
+ gdth_pop_shp();
#ifdef INT_COAL
if (ha->coal_stat)
@@ -4320,7 +4350,7 @@ static int __init gdth_start_pci(struct scsi_host_template *shtp,
shp->unchecked_isa_dma = 0;
shp->irq = ha->irq;
shp->dma_channel = 0xff;
- gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+ gdth_push_vshp(shp);
NUMDATA(shp)->hanum = (ushort)hanum;
NUMDATA(shp)->busnum = b;
}
@@ -4433,7 +4463,7 @@ static int gdth_release(struct Scsi_Host *shp)
TRACE2(("gdth_release()\n"));
if (NUMDATA(shp)->busnum == 0) {
hanum = NUMDATA(shp)->hanum;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (ha->sdev) {
scsi_free_host_dev(ha->sdev);
ha->sdev = NULL;
@@ -4486,7 +4516,7 @@ static const char *gdth_ctr_name(int hanum)
TRACE2(("gdth_ctr_name()\n"));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (ha->type == GDT_EISA) {
switch (ha->stype) {
@@ -4519,7 +4549,7 @@ static const char *gdth_info(struct Scsi_Host *shp)
TRACE2(("gdth_info()\n"));
hanum = NUMDATA(shp)->hanum;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
return ((const char *)ha->binfo.type_string);
}
@@ -4536,7 +4566,7 @@ static int gdth_eh_bus_reset(Scsi_Cmnd *scp)
hanum = NUMDATA(scp->device->host)->hanum;
b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
/* clear command tab */
spin_lock_irqsave(&ha->smp_lock, flags);
@@ -4592,7 +4622,7 @@ static int gdth_bios_param(struct scsi_device *sdev,struct block_device *bdev,se
b = virt_ctr ? NUMDATA(sd->host)->busnum : sd->channel;
t = sd->id;
TRACE2(("gdth_bios_param() ha %d bus %d target %d\n", hanum, b, t));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (b != ha->virt_bus || ha->hdr[t].heads == 0) {
/* raw device or host drive without mapping information */
@@ -4643,13 +4673,15 @@ static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *))
static int gdth_open(struct inode *inode, struct file *filep)
{
+ struct Scsi_Host *shp;
gdth_ha_str *ha;
int i;
for (i = 0; i < gdth_ctr_count; i++) {
- ha = HADATA(gdth_ctr_tab[i]);
+ shp = gdth_find_shp(i);
+ ha = HADATA(shp);
if (!ha->sdev)
- ha->sdev = scsi_get_host_dev(gdth_ctr_tab[i]);
+ ha->sdev = scsi_get_host_dev(shp);
}
TRACE(("gdth_open()\n"));
@@ -4671,7 +4703,7 @@ static int ioc_event(void __user *arg)
if (copy_from_user(&evt, arg, sizeof(gdth_ioctl_event)) ||
evt.ionode >= gdth_ctr_count)
return -EFAULT;
- ha = HADATA(gdth_ctr_tab[evt.ionode]);
+ ha = gdth_find_ha(evt.ionode);
if (evt.erase == 0xff) {
if (evt.event.event_source == ES_TEST)
@@ -4708,7 +4740,7 @@ static int ioc_lockdrv(void __user *arg)
if (copy_from_user(&ldrv, arg, sizeof(gdth_ioctl_lockdrv)) ||
ldrv.ionode >= gdth_ctr_count)
return -EFAULT;
- ha = HADATA(gdth_ctr_tab[ldrv.ionode]);
+ ha = gdth_find_ha(ldrv.ionode);
for (i = 0; i < ldrv.drive_cnt && i < MAX_HDRIVES; ++i) {
j = ldrv.drives[i];
@@ -4743,7 +4775,7 @@ static int ioc_resetdrv(void __user *arg, char *cmnd)
res.ionode >= gdth_ctr_count || res.number >= MAX_HDRIVES)
return -EFAULT;
hanum = res.ionode;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (!ha->hdr[res.number].present)
return 0;
@@ -4778,7 +4810,7 @@ static int ioc_general(void __user *arg, char *cmnd)
gen.ionode >= gdth_ctr_count)
return -EFAULT;
hanum = gen.ionode;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
if (gen.data_len + gen.sense_len != 0) {
if (!(buf = gdth_ioctl_alloc(hanum, gen.data_len + gen.sense_len,
FALSE, &paddr)))
@@ -4903,7 +4935,7 @@ static int ioc_hdrlist(void __user *arg, char *cmnd)
goto free_fail;
}
hanum = rsc->ionode;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
memset(cmd, 0, sizeof(gdth_cmd_str));
for (i = 0; i < MAX_HDRIVES; ++i) {
@@ -4960,7 +4992,7 @@ static int ioc_rescan(void __user *arg, char *cmnd)
goto free_fail;
}
hanum = rsc->ionode;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
memset(cmd, 0, sizeof(gdth_cmd_str));
if (rsc->flag == 0) {
@@ -5119,7 +5151,7 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
if (copy_from_user(&ctrt, argp, sizeof(gdth_ioctl_ctrtype)) ||
ctrt.ionode >= gdth_ctr_count)
return -EFAULT;
- ha = HADATA(gdth_ctr_tab[ctrt.ionode]);
+ ha = gdth_find_ha(ctrt.ionode);
if (ha->type == GDT_ISA || ha->type == GDT_EISA) {
ctrt.type = (unchar)((ha->stype>>20) - 0x10);
} else {
@@ -5160,7 +5192,7 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
if (copy_from_user(&lchn, argp, sizeof(gdth_ioctl_lockchn)) ||
lchn.ionode >= gdth_ctr_count)
return -EFAULT;
- ha = HADATA(gdth_ctr_tab[lchn.ionode]);
+ ha = gdth_find_ha(lchn.ionode);
i = lchn.channel;
if (i < ha->bus_cnt) {
@@ -5200,7 +5232,7 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
res.ionode >= gdth_ctr_count)
return -EFAULT;
hanum = res.ionode;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
scp = kmalloc(sizeof(*scp), GFP_KERNEL);
if (!scp)
@@ -5239,7 +5271,7 @@ static void gdth_flush(int hanum)
memset(cmnd, 0xff, MAX_COMMAND_SIZE);
TRACE2(("gdth_flush() hanum %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
for (i = 0; i < MAX_HDRIVES; ++i) {
if (ha->hdr[i].present) {
@@ -5257,7 +5289,7 @@ static void gdth_flush(int hanum)
}
TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i));
- gdth_execute(gdth_ctr_tab[hanum], &gdtcmd, cmnd, 30, NULL);
+ gdth_execute(gdth_find_shp(hanum), &gdtcmd, cmnd, 30, NULL);
}
}
}
@@ -5290,7 +5322,7 @@ static int gdth_halt(struct notifier_block *nb, ulong event, void *buf)
gdtcmd.Service = CACHESERVICE;
gdtcmd.OpCode = GDT_RESET;
TRACE2(("gdth_halt(): reset controller %d\n", hanum));
- gdth_execute(gdth_ctr_tab[hanum], &gdtcmd, cmnd, 10, NULL);
+ gdth_execute(gdth_find_shp(hanum), &gdtcmd, cmnd, 10, NULL);
#endif
}
printk("Done.\n");
diff --git a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c
index 5fccb15..0c7696f 100644
--- a/drivers/scsi/gdth_proc.c
+++ b/drivers/scsi/gdth_proc.c
@@ -54,7 +54,7 @@ static int gdth_set_asc_info(struct Scsi_Host *host, char *buffer,
memset(&gdtcmd, 0, sizeof(gdth_cmd_str));
TRACE2(("gdth_set_asc_info() ha %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
orig_length = length + 5;
drive = -1;
wb_mode = 0;
@@ -188,7 +188,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
memset(gdtcmd, 0, sizeof(gdth_cmd_str));
TRACE2(("gdth_get_info() ha %d bus %d\n",hanum,busnum));
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
/* request is i.e. "cat /proc/scsi/gdth/0" */
@@ -682,7 +682,7 @@ static char *gdth_ioctl_alloc(int hanum, int size, int scratch,
if (size == 0)
return NULL;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
if (!ha->scratch_busy && size <= GDTH_SCRATCH) {
@@ -707,7 +707,7 @@ static void gdth_ioctl_free(int hanum, int size, char *buf, ulong64 paddr)
gdth_ha_str *ha;
ulong flags;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
if (buf == ha->pscratch) {
@@ -726,7 +726,7 @@ static int gdth_ioctl_check_bin(int hanum, ushort size)
ulong flags;
int ret_val;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
ret_val = FALSE;
@@ -747,7 +747,7 @@ static void gdth_wait_completion(int hanum, int busnum, int id)
Scsi_Cmnd *scp;
unchar b, t;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
for (i = 0; i < GDTH_MAXCMDS; ++i) {
@@ -774,7 +774,7 @@ static void gdth_stop_timeout(int hanum, int busnum, int id)
Scsi_Cmnd *scp;
unchar b, t;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
@@ -798,7 +798,7 @@ static void gdth_start_timeout(int hanum, int busnum, int id)
Scsi_Cmnd *scp;
unchar b, t;
- ha = HADATA(gdth_ctr_tab[hanum]);
+ ha = gdth_find_ha(hanum);
spin_lock_irqsave(&ha->smp_lock, flags);
for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/4] gdth: Split out EISA and ISA register code
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
` (2 preceding siblings ...)
2007-07-21 2:23 ` [PATCH 4/4] gdth: Isolate driver-global variables using helpers Jeff Garzik
@ 2007-07-21 2:50 ` Jeff Garzik
2007-07-21 11:00 ` Christoph Hellwig
2007-07-22 0:02 ` Andi Kleen
5 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-07-21 2:50 UTC (permalink / raw)
To: linux-scsi, Christoph Hellwig; +Cc: achim_leubner, Andrew Morton
Notes:
1) If this is stomping on Christoph's work or anyone else's, feel free
to discard. This is some "I was bored" PCI hotplug prep work, not a
high priority at all.
2) This is to be applied on top of the previous gdth patch "remove
redundant PCI stuff".
3) These changes can be found via git at
git://git.kernel.org/.../jgarzik/misc-2.6.git#gdth
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/4] gdth: Split out EISA and ISA register code
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
` (3 preceding siblings ...)
2007-07-21 2:50 ` [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
@ 2007-07-21 11:00 ` Christoph Hellwig
2007-07-22 0:02 ` Andi Kleen
5 siblings, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2007-07-21 11:00 UTC (permalink / raw)
To: Jeff Garzik; +Cc: linux-scsi, Christoph Hellwig, achim_leubner, Andrew Morton
On Fri, Jul 20, 2007 at 10:20:32PM -0400, Jeff Garzik wrote:
>
> No code changes, only indentation and blank line additions, plus code to
> call the new split-out functions.
I have patches that do this and do a few things better (e.g. proper CONFIG_ISA
ifdefs instead of the ia64 hacks). I'll send it out in a minute.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] gdth: Isolate driver-global variables using helpers
2007-07-21 2:23 ` [PATCH 4/4] gdth: Isolate driver-global variables using helpers Jeff Garzik
@ 2007-07-21 11:01 ` Christoph Hellwig
0 siblings, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2007-07-21 11:01 UTC (permalink / raw)
To: Jeff Garzik; +Cc: linux-scsi, Christoph Hellwig, achim_leubner, Andrew Morton
On Fri, Jul 20, 2007 at 10:23:03PM -0400, Jeff Garzik wrote:
> [SCSI] gdth: Isolate driver-global variables using helpers
>
> Sanitizes access to some driver-global variables, in preparation for
> making them dynamic rather than statically-sized.
>
> This equivalent-transform style change blissfully ignores the fact that
> gdth_ctr_vtab[] is never used (only assigned), and that the driver
> itself seems to get a bit confused between gdth_ctr_count and
> gdth_ctr_vcount. The whole virtual-controller stuff needs reviewing
> for edge cases.
NACK. This crap should mostly go away entirely and not beeing isolated.
I have patches for that somewhere deep down in my patchqueue. I can't
surprise to have them forward ported today, but I'll try.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/4] gdth: Split out EISA and ISA register code
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
` (4 preceding siblings ...)
2007-07-21 11:00 ` Christoph Hellwig
@ 2007-07-22 0:02 ` Andi Kleen
5 siblings, 0 replies; 8+ messages in thread
From: Andi Kleen @ 2007-07-22 0:02 UTC (permalink / raw)
To: Jeff Garzik; +Cc: linux-scsi, Christoph Hellwig, achim_leubner, Andrew Morton
Jeff Garzik <jeff@garzik.org> writes:
> No code changes, only indentation and blank line additions, plus code to
> call the new split-out functions.
Could you put the ISA code into #ifdef CONFIG_ISA while you're on it?
That would allow dropping it on x86-64
-Andi
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-07-21 23:07 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-21 2:20 [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
2007-07-21 2:21 ` [PATCH 2/4] gdth: Split out PCI " Jeff Garzik
2007-07-21 2:22 ` [PATCH 3/4] gdth: Remove 2.4.x support, in-kernel changelog Jeff Garzik
2007-07-21 2:23 ` [PATCH 4/4] gdth: Isolate driver-global variables using helpers Jeff Garzik
2007-07-21 11:01 ` Christoph Hellwig
2007-07-21 2:50 ` [PATCH 1/4] gdth: Split out EISA and ISA register code Jeff Garzik
2007-07-21 11:00 ` Christoph Hellwig
2007-07-22 0:02 ` Andi Kleen
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.