2022-04-06 00:23:30

by Finn Thain

[permalink] [raw]
Subject: [PATCH] scsi: sym53c500_cs: Stop using struct scsi_pointer

This driver doesn't use SCp.ptr to save a SCSI command data pointer which
means "scsi pointer" is a complete misnomer here. Only a few members of
struct scsi_pointer are needed so move those to private command data.

Signed-off-by: Finn Thain <[email protected]>
---
The sym53c500_cs driver somehow missed out on complete scsi_pointer
removal in Bart's recently queued patch series, unlike nsp32 for example.
So this patch finishes the job. Compile-tested only.
---
drivers/scsi/pcmcia/sym53c500_cs.c | 51 ++++++++++++++++--------------
1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index c4a838635893..4980247f95bc 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -192,7 +192,13 @@ struct sym53c500_data {
int fast_pio;
};

-static struct scsi_pointer *sym53c500_scsi_pointer(struct scsi_cmnd *cmd)
+struct sym53c500_cmd_priv {
+ int status;
+ int message;
+ int phase;
+};
+
+static struct sym53c500_cmd_priv *SYM53c500_priv(struct scsi_cmnd *cmd)
{
return scsi_cmd_priv(cmd);
}
@@ -356,7 +362,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct sym53c500_data *data =
(struct sym53c500_data *)dev->hostdata;
struct scsi_cmnd *curSC = data->current_SC;
- struct scsi_pointer *scsi_pointer = sym53c500_scsi_pointer(curSC);
+ struct sym53c500_cmd_priv *scp = SYM53c500_priv(curSC);
int fast_pio = data->fast_pio;

spin_lock_irqsave(dev->host_lock, flags);
@@ -403,12 +409,11 @@ SYM53C500_intr(int irq, void *dev_id)

if (int_reg & 0x20) { /* Disconnect */
DEB(printk("SYM53C500: disconnect intr received\n"));
- if (scsi_pointer->phase != message_in) { /* Unexpected disconnect */
+ if (scp->phase != message_in) { /* Unexpected disconnect */
curSC->result = DID_NO_CONNECT << 16;
} else { /* Command complete, return status and message */
- curSC->result = (scsi_pointer->Status & 0xff) |
- ((scsi_pointer->Message & 0xff) << 8) |
- (DID_OK << 16);
+ curSC->result = (scp->status & 0xff) |
+ ((scp->message & 0xff) << 8) | (DID_OK << 16);
}
goto idle_out;
}
@@ -419,7 +424,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct scatterlist *sg;
int i;

- scsi_pointer->phase = data_out;
+ scp->phase = data_out;
VDEB(printk("SYM53C500: Data-Out phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG);
LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */
@@ -438,7 +443,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct scatterlist *sg;
int i;

- scsi_pointer->phase = data_in;
+ scp->phase = data_in;
VDEB(printk("SYM53C500: Data-In phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG);
LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */
@@ -453,12 +458,12 @@ SYM53C500_intr(int irq, void *dev_id)
break;

case 0x02: /* COMMAND */
- scsi_pointer->phase = command_ph;
+ scp->phase = command_ph;
printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n");
break;

case 0x03: /* STATUS */
- scsi_pointer->phase = status_ph;
+ scp->phase = status_ph;
VDEB(printk("SYM53C500: Status phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG);
outb(INIT_CMD_COMPLETE, port_base + CMD_REG);
@@ -471,24 +476,22 @@ SYM53C500_intr(int irq, void *dev_id)

case 0x06: /* MESSAGE-OUT */
DEB(printk("SYM53C500: Message-Out phase\n"));
- scsi_pointer->phase = message_out;
+ scp->phase = message_out;
outb(SET_ATN, port_base + CMD_REG); /* Reject the message */
outb(MSG_ACCEPT, port_base + CMD_REG);
break;

case 0x07: /* MESSAGE-IN */
VDEB(printk("SYM53C500: Message-In phase\n"));
- scsi_pointer->phase = message_in;
+ scp->phase = message_in;

- scsi_pointer->Status = inb(port_base + SCSI_FIFO);
- scsi_pointer->Message = inb(port_base + SCSI_FIFO);
+ scp->status = inb(port_base + SCSI_FIFO);
+ scp->message = inb(port_base + SCSI_FIFO);

VDEB(printk("SCSI FIFO size=%d\n", inb(port_base + FIFO_FLAGS) & 0x1f));
- DEB(printk("Status = %02x Message = %02x\n",
- scsi_pointer->Status, scsi_pointer->Message));
+ DEB(printk("Status = %02x Message = %02x\n", scp->status, scp->message));

- if (scsi_pointer->Message == SAVE_POINTERS ||
- scsi_pointer->Message == DISCONNECT) {
+ if (scp->message == SAVE_POINTERS || scp->message == DISCONNECT) {
outb(SET_ATN, port_base + CMD_REG); /* Reject message */
DEB(printk("Discarding SAVE_POINTERS message\n"));
}
@@ -500,7 +503,7 @@ SYM53C500_intr(int irq, void *dev_id)
return IRQ_HANDLED;

idle_out:
- scsi_pointer->phase = idle;
+ scp->phase = idle;
scsi_done(curSC);
goto out;
}
@@ -548,7 +551,7 @@ SYM53C500_info(struct Scsi_Host *SChost)

static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt)
{
- struct scsi_pointer *scsi_pointer = sym53c500_scsi_pointer(SCpnt);
+ struct sym53c500_cmd_priv *scp = SYM53c500_priv(SCpnt);
int i;
int port_base = SCpnt->device->host->io_port;
struct sym53c500_data *data =
@@ -565,9 +568,9 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt)
VDEB(printk("\n"));

data->current_SC = SCpnt;
- scsi_pointer->phase = command_ph;
- scsi_pointer->Status = 0;
- scsi_pointer->Message = 0;
+ scp->phase = command_ph;
+ scp->status = 0;
+ scp->message = 0;

/* We are locked here already by the mid layer */
REG0(port_base);
@@ -682,7 +685,7 @@ static struct scsi_host_template sym53c500_driver_template = {
.this_id = 7,
.sg_tablesize = 32,
.shost_groups = SYM53C500_shost_groups,
- .cmd_size = sizeof(struct scsi_pointer),
+ .cmd_size = sizeof(struct sym53c500_cmd_priv),
};

static int SYM53C500_config_check(struct pcmcia_device *p_dev, void *priv_data)
--
2.32.0


2022-04-06 05:35:29

by Bart Van Assche

[permalink] [raw]
Subject: Re: [PATCH] scsi: sym53c500_cs: Stop using struct scsi_pointer

On 4/5/22 01:07, Finn Thain wrote:
> This driver doesn't use SCp.ptr to save a SCSI command data pointer which
> means "scsi pointer" is a complete misnomer here. Only a few members of
> struct scsi_pointer are needed so move those to private command data.

Reviewed-by: Bart Van Assche <[email protected]>

2022-04-06 14:53:31

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] scsi: sym53c500_cs: Stop using struct scsi_pointer

> +
> +static struct sym53c500_cmd_priv *SYM53c500_priv(struct scsi_cmnd *cmd)
> {
> return scsi_cmd_priv(cmd);
> }

I don't even think we need this helper, all callers can just use
scsi_cmd_priv directly.

Otherwise looks good:

Reviewed-by: Christoph Hellwig <[email protected]>