OSDN Git Service

scsi: nsp32: Stop using the SCSI pointer
authorBart Van Assche <bvanassche@acm.org>
Fri, 18 Feb 2022 19:51:05 +0000 (11:51 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 23 Feb 2022 02:11:06 +0000 (21:11 -0500)
Move the SCSI status field to private data. Stop setting the .ptr,
.this_residual, .buffer and .buffer_residual SCSI pointer members
since no code in this driver reads these members.

This patch prepares for removal of the SCSI pointer from struct scsi_cmnd.

Link: https://lore.kernel.org/r/20220218195117.25689-38-bvanassche@acm.org
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Reviewed-by: Masanori Goto <gotom@debian.or.jp>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/nsp32.c
drivers/scsi/nsp32.h

index bd3ee3b..75bb002 100644 (file)
@@ -273,6 +273,7 @@ static struct scsi_host_template nsp32_template = {
        .eh_abort_handler               = nsp32_eh_abort,
        .eh_host_reset_handler          = nsp32_eh_host_reset,
 /*     .highmem_io                     = 1, */
+       .cmd_size                       = sizeof(struct nsp32_cmd_priv),
 };
 
 #include "nsp32_io.h"
@@ -946,14 +947,9 @@ static int nsp32_queuecommand_lck(struct scsi_cmnd *SCpnt)
        show_command(SCpnt);
 
        data->CurrentSC      = SCpnt;
-       SCpnt->SCp.Status    = SAM_STAT_CHECK_CONDITION;
+       nsp32_priv(SCpnt)->status = SAM_STAT_CHECK_CONDITION;
        scsi_set_resid(SCpnt, scsi_bufflen(SCpnt));
 
-       SCpnt->SCp.ptr              = (char *)scsi_sglist(SCpnt);
-       SCpnt->SCp.this_residual    = scsi_bufflen(SCpnt);
-       SCpnt->SCp.buffer           = NULL;
-       SCpnt->SCp.buffers_residual = 0;
-
        /* initialize data */
        data->msgout_len        = 0;
        data->msgin_len         = 0;
@@ -1376,7 +1372,7 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id)
                case BUSPHASE_STATUS:
                        nsp32_dbg(NSP32_DEBUG_INTR, "fifo/status");
 
-                       SCpnt->SCp.Status = nsp32_read1(base, SCSI_CSB_IN);
+                       nsp32_priv(SCpnt)->status = nsp32_read1(base, SCSI_CSB_IN);
 
                        break;
                default:
@@ -1687,18 +1683,18 @@ static int nsp32_busfree_occur(struct scsi_cmnd *SCpnt, unsigned short execph)
                /* MsgIn 00: Command Complete */
                nsp32_dbg(NSP32_DEBUG_BUSFREE, "command complete");
 
-               SCpnt->SCp.Status  = nsp32_read1(base, SCSI_CSB_IN);
+               nsp32_priv(SCpnt)->status  = nsp32_read1(base, SCSI_CSB_IN);
                nsp32_dbg(NSP32_DEBUG_BUSFREE,
                          "normal end stat=0x%x resid=0x%x\n",
-                         SCpnt->SCp.Status, scsi_get_resid(SCpnt));
+                         nsp32_priv(SCpnt)->status, scsi_get_resid(SCpnt));
                SCpnt->result = (DID_OK << 16) |
-                       (SCpnt->SCp.Status << 0);
+                       (nsp32_priv(SCpnt)->status << 0);
                nsp32_scsi_done(SCpnt);
                /* All operation is done */
                return TRUE;
        } else if (execph & MSGIN_04_VALID) {
                /* MsgIn 04: Disconnect */
-               SCpnt->SCp.Status  = nsp32_read1(base, SCSI_CSB_IN);
+               nsp32_priv(SCpnt)->status = nsp32_read1(base, SCSI_CSB_IN);
 
                nsp32_dbg(NSP32_DEBUG_BUSFREE, "disconnect");
                return TRUE;
@@ -1706,8 +1702,6 @@ static int nsp32_busfree_occur(struct scsi_cmnd *SCpnt, unsigned short execph)
                /* Unexpected bus free */
                nsp32_msg(KERN_WARNING, "unexpected bus free occurred");
 
-               /* DID_ERROR? */
-               //SCpnt->result   = (DID_OK << 16) | (SCpnt->SCp.Status << 0);
                SCpnt->result = DID_ERROR << 16;
                nsp32_scsi_done(SCpnt);
                return TRUE;
index ab0726c..924889f 100644 (file)
@@ -534,6 +534,15 @@ typedef struct _nsp32_sync_table {
       ---PERIOD-- ---OFFSET--   */
 #define TO_SYNCREG(period, offset) (((period) & 0x0f) << 4 | ((offset) & 0x0f))
 
+struct nsp32_cmd_priv {
+       enum sam_status status;
+};
+
+static inline struct nsp32_cmd_priv *nsp32_priv(struct scsi_cmnd *cmd)
+{
+       return scsi_cmd_priv(cmd);
+}
+
 typedef struct _nsp32_target {
        unsigned char   syncreg;        /* value for SYNCREG   */
        unsigned char   ackwidth;       /* value for ACKWIDTH  */