Re: [PATCH v2 34/44] sym53c500_cs: Move the SCSI pointer to private command data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Feb 8, 2022, at 9:25 AM, Bart Van Assche <bvanassche@xxxxxxx> wrote:
> 
> Set .cmd_size in the SCSI host template instead of using the SCSI pointer
> from struct scsi_cmnd.
> This patch prepares for removal of the SCSI pointer from struct scsi_cmnd.
> 
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> ---
> drivers/scsi/pcmcia/sym53c500_cs.c | 53 ++++++++++++++++++++----------
> 1 file changed, 35 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
> index fc93d2a57e1e..298df2180bc7 100644
> --- a/drivers/scsi/pcmcia/sym53c500_cs.c
> +++ b/drivers/scsi/pcmcia/sym53c500_cs.c
> @@ -192,6 +192,17 @@ struct sym53c500_data {
> 	int fast_pio;
> };
> 
> +struct sym53c500_cmd_priv {
> +	struct scsi_pointer scsi_pointer;
> +};
> +
> +static struct scsi_pointer *sym53c500_scsi_pointer(struct scsi_cmnd *cmd)
> +{
> +	struct sym53c500_cmd_priv *scmd = scsi_cmd_priv(cmd);
> +
> +	return &scmd->scsi_pointer;
> +}
> +
> enum Phase {
>     idle,
>     data_out,
> @@ -351,6 +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);
> 	int fast_pio = data->fast_pio;
> 
> 	spin_lock_irqsave(dev->host_lock, flags);
> @@ -397,11 +409,12 @@ SYM53C500_intr(int irq, void *dev_id)
> 
> 	if (int_reg & 0x20) {		/* Disconnect */
> 		DEB(printk("SYM53C500: disconnect intr received\n"));
> -		if (curSC->SCp.phase != message_in) {	/* Unexpected disconnect */
> +		if (scsi_pointer->phase != message_in) {	/* Unexpected disconnect */
> 			curSC->result = DID_NO_CONNECT << 16;
> 		} else {	/* Command complete, return status and message */
> -			curSC->result = (curSC->SCp.Status & 0xff)
> -			    | ((curSC->SCp.Message & 0xff) << 8) | (DID_OK << 16);
> +			curSC->result = (scsi_pointer->Status & 0xff) |
> +				((scsi_pointer->Message & 0xff) << 8) |
> +				(DID_OK << 16);
> 		}
> 		goto idle_out;
> 	}
> @@ -412,7 +425,7 @@ SYM53C500_intr(int irq, void *dev_id)
> 			struct scatterlist *sg;
> 			int i;
> 
> -			curSC->SCp.phase = data_out;
> +			scsi_pointer->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 */
> @@ -431,7 +444,7 @@ SYM53C500_intr(int irq, void *dev_id)
> 			struct scatterlist *sg;
> 			int i;
> 
> -			curSC->SCp.phase = data_in;
> +			scsi_pointer->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 */
> @@ -446,12 +459,12 @@ SYM53C500_intr(int irq, void *dev_id)
> 		break;
> 
> 	case 0x02:		/* COMMAND */
> -		curSC->SCp.phase = command_ph;
> +		scsi_pointer->phase = command_ph;
> 		printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n");
> 		break;
> 
> 	case 0x03:		/* STATUS */
> -		curSC->SCp.phase = status_ph;
> +		scsi_pointer->phase = status_ph;
> 		VDEB(printk("SYM53C500: Status phase\n"));
> 		outb(FLUSH_FIFO, port_base + CMD_REG);
> 		outb(INIT_CMD_COMPLETE, port_base + CMD_REG);
> @@ -464,22 +477,24 @@ SYM53C500_intr(int irq, void *dev_id)
> 
> 	case 0x06:		/* MESSAGE-OUT */
> 		DEB(printk("SYM53C500: Message-Out phase\n"));
> -		curSC->SCp.phase = message_out;
> +		scsi_pointer->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"));
> -		curSC->SCp.phase = message_in;
> +		scsi_pointer->phase = message_in;
> 
> -		curSC->SCp.Status = inb(port_base + SCSI_FIFO);
> -		curSC->SCp.Message = inb(port_base + SCSI_FIFO);
> +		scsi_pointer->Status = inb(port_base + SCSI_FIFO);
> +		scsi_pointer->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", curSC->SCp.Status, curSC->SCp.Message));
> +		DEB(printk("Status = %02x  Message = %02x\n",
> +			   scsi_pointer->Status, scsi_pointer->Message));
> 
> -		if (curSC->SCp.Message == SAVE_POINTERS || curSC->SCp.Message == DISCONNECT) {
> +		if (scsi_pointer->Message == SAVE_POINTERS ||
> +		    scsi_pointer->Message == DISCONNECT) {
> 			outb(SET_ATN, port_base + CMD_REG);	/* Reject message */
> 			DEB(printk("Discarding SAVE_POINTERS message\n"));
> 		}
> @@ -491,7 +506,7 @@ SYM53C500_intr(int irq, void *dev_id)
> 	return IRQ_HANDLED;
> 
> idle_out:
> -	curSC->SCp.phase = idle;
> +	scsi_pointer->phase = idle;
> 	scsi_done(curSC);
> 	goto out;
> }
> @@ -539,6 +554,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);
> 	int i;
> 	int port_base = SCpnt->device->host->io_port;
> 	struct sym53c500_data *data =
> @@ -555,9 +571,9 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt)
> 	VDEB(printk("\n"));
> 
> 	data->current_SC = SCpnt;
> -	data->current_SC->SCp.phase = command_ph;
> -	data->current_SC->SCp.Status = 0;
> -	data->current_SC->SCp.Message = 0;
> +	scsi_pointer->phase = command_ph;
> +	scsi_pointer->Status = 0;
> +	scsi_pointer->Message = 0;
> 
> 	/* We are locked here already by the mid layer */
> 	REG0(port_base);
> @@ -671,7 +687,8 @@ static struct scsi_host_template sym53c500_driver_template = {
>      .can_queue			= 1,
>      .this_id			= 7,
>      .sg_tablesize		= 32,
> -     .shost_groups		= SYM53C500_shost_groups
> +     .shost_groups		= SYM53C500_shost_groups,
> +     .cmd_size			= sizeof(struct sym53c500_cmd_priv),
> };
> 
> static int SYM53C500_config_check(struct pcmcia_device *p_dev, void *priv_data)

Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx>

--
Himanshu Madhani	 Oracle Linux Engineering





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux