All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: "Martin K . Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org, Bart Van Assche <bvanassche@acm.org>,
	Russell King <linux@armlinux.org.uk>,
	Hannes Reinecke <hare@suse.de>,
	Himanshu Madhani <himanshu.madhani@oracle.com>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>
Subject: [PATCH v5 10/49] scsi: arm: Move the SCSI pointer to private command data
Date: Fri, 18 Feb 2022 11:50:38 -0800	[thread overview]
Message-ID: <20220218195117.25689-11-bvanassche@acm.org> (raw)
In-Reply-To: <20220218195117.25689-1-bvanassche@acm.org>

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. The ARM SCSI drivers have been identified as follows:
$ git grep -l '#include.*arm_scsi.h'
drivers/scsi/arm/acornscsi.c
drivers/scsi/arm/cumana_2.c
drivers/scsi/arm/eesox.c
drivers/scsi/arm/fas216.c
drivers/scsi/arm/powertec.c

Cc: Russell King <linux@armlinux.org.uk>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/arm/acornscsi.c | 20 ++++++++++++--------
 drivers/scsi/arm/arm_scsi.h  | 33 +++++++++++++++++++++++----------
 drivers/scsi/arm/fas216.c    | 28 +++++++++++++++++-----------
 drivers/scsi/arm/fas216.h    |  4 ++++
 4 files changed, 56 insertions(+), 29 deletions(-)

diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
index 38aa9333631b..7602639da9b3 100644
--- a/drivers/scsi/arm/acornscsi.c
+++ b/drivers/scsi/arm/acornscsi.c
@@ -729,7 +729,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
      */
     host->scsi.phase = PHASE_CONNECTING;
     host->SCpnt = SCpnt;
-    host->scsi.SCp = SCpnt->SCp;
+    host->scsi.SCp = *arm_scsi_pointer(SCpnt);
     host->dma.xfer_setup = 0;
     host->dma.xfer_required = 0;
     host->dma.xfer_done = 0;
@@ -1424,6 +1424,7 @@ unsigned char acornscsi_readmessagebyte(AS_Host *host)
 static
 void acornscsi_message(AS_Host *host)
 {
+    struct scsi_pointer *scsi_pointer;
     unsigned char message[16];
     unsigned int msgidx = 0, msglen = 1;
 
@@ -1493,8 +1494,9 @@ void acornscsi_message(AS_Host *host)
 	 *  the saved data pointer for the current I/O process.
 	 */
 	acornscsi_dma_cleanup(host);
-	host->SCpnt->SCp = host->scsi.SCp;
-	host->SCpnt->SCp.sent_command = 0;
+	scsi_pointer = arm_scsi_pointer(host->SCpnt);
+	*scsi_pointer = host->scsi.SCp;
+	scsi_pointer->sent_command = 0;
 	host->scsi.phase = PHASE_MSGIN;
 	break;
 
@@ -1509,7 +1511,7 @@ void acornscsi_message(AS_Host *host)
 	 *  the present command and status areas.'
 	 */
 	acornscsi_dma_cleanup(host);
-	host->scsi.SCp = host->SCpnt->SCp;
+	host->scsi.SCp = *arm_scsi_pointer(host->SCpnt);
 	host->scsi.phase = PHASE_MSGIN;
 	break;
 
@@ -1809,7 +1811,7 @@ int acornscsi_reconnect_finish(AS_Host *host)
 	/*
 	 * Restore data pointer from SAVED pointers.
 	 */
-	host->scsi.SCp = host->SCpnt->SCp;
+	host->scsi.SCp = *arm_scsi_pointer(host->SCpnt);
 #if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
 	printk(", data pointers: [%p, %X]",
 		host->scsi.SCp.ptr, host->scsi.SCp.this_residual);
@@ -2408,6 +2410,7 @@ acornscsi_intr(int irq, void *dev_id)
  */
 static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt)
 {
+    struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt);
     void (*done)(struct scsi_cmnd *) = scsi_done;
     AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata;
 
@@ -2423,9 +2426,9 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt)
 
     SCpnt->host_scribble = NULL;
     SCpnt->result = 0;
-    SCpnt->SCp.phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
-    SCpnt->SCp.sent_command = 0;
-    SCpnt->SCp.scsi_xferred = 0;
+    scsi_pointer->phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
+    scsi_pointer->sent_command = 0;
+    scsi_pointer->scsi_xferred = 0;
 
     init_SCp(SCpnt);
 
@@ -2791,6 +2794,7 @@ static struct scsi_host_template acornscsi_template = {
 	.cmd_per_lun		= 2,
 	.dma_boundary		= PAGE_SIZE - 1,
 	.proc_name		= "acornscsi",
+	.cmd_size		= sizeof(struct arm_cmd_priv),
 };
 
 static int acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
diff --git a/drivers/scsi/arm/arm_scsi.h b/drivers/scsi/arm/arm_scsi.h
index 3eb5c6aa93c9..ea9fcd92c6de 100644
--- a/drivers/scsi/arm/arm_scsi.h
+++ b/drivers/scsi/arm/arm_scsi.h
@@ -9,6 +9,17 @@
 
 #define BELT_AND_BRACES
 
+struct arm_cmd_priv {
+	struct scsi_pointer scsi_pointer;
+};
+
+static inline struct scsi_pointer *arm_scsi_pointer(struct scsi_cmnd *cmd)
+{
+	struct arm_cmd_priv *acmd = scsi_cmd_priv(cmd);
+
+	return &acmd->scsi_pointer;
+}
+
 /*
  * The scatter-gather list handling.  This contains all
  * the yucky stuff that needs to be fixed properly.
@@ -76,16 +87,18 @@ static inline void put_next_SCp_byte(struct scsi_pointer *SCp, unsigned char c)
 
 static inline void init_SCp(struct scsi_cmnd *SCpnt)
 {
-	memset(&SCpnt->SCp, 0, sizeof(struct scsi_pointer));
+	struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt);
+
+	memset(scsi_pointer, 0, sizeof(struct scsi_pointer));
 
 	if (scsi_bufflen(SCpnt)) {
 		unsigned long len = 0;
 
-		SCpnt->SCp.buffer = scsi_sglist(SCpnt);
-		SCpnt->SCp.buffers_residual = scsi_sg_count(SCpnt) - 1;
-		SCpnt->SCp.ptr = sg_virt(SCpnt->SCp.buffer);
-		SCpnt->SCp.this_residual = SCpnt->SCp.buffer->length;
-		SCpnt->SCp.phase = scsi_bufflen(SCpnt);
+		scsi_pointer->buffer = scsi_sglist(SCpnt);
+		scsi_pointer->buffers_residual = scsi_sg_count(SCpnt) - 1;
+		scsi_pointer->ptr = sg_virt(scsi_pointer->buffer);
+		scsi_pointer->this_residual = scsi_pointer->buffer->length;
+		scsi_pointer->phase = scsi_bufflen(SCpnt);
 
 #ifdef BELT_AND_BRACES
 		{	/*
@@ -109,15 +122,15 @@ static inline void init_SCp(struct scsi_cmnd *SCpnt)
 				 * FIXME: Totaly naive fixup. We should abort
 				 * with error
 				 */
-				SCpnt->SCp.phase =
+				scsi_pointer->phase =
 					min_t(unsigned long, len,
 					      scsi_bufflen(SCpnt));
 			}
 		}
 #endif
 	} else {
-		SCpnt->SCp.ptr = NULL;
-		SCpnt->SCp.this_residual = 0;
-		SCpnt->SCp.phase = 0;
+		scsi_pointer->ptr = NULL;
+		scsi_pointer->this_residual = 0;
+		scsi_pointer->phase = 0;
 	}
 }
diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c
index a23e34c9f7de..4ce0b2d73614 100644
--- a/drivers/scsi/arm/fas216.c
+++ b/drivers/scsi/arm/fas216.c
@@ -761,7 +761,7 @@ static void fas216_transfer(FAS216_Info *info)
 		fas216_log(info, LOG_ERROR, "null buffer passed to "
 			   "fas216_starttransfer");
 		print_SCp(&info->scsi.SCp, "SCp: ", "\n");
-		print_SCp(&info->SCpnt->SCp, "Cmnd SCp: ", "\n");
+		print_SCp(arm_scsi_pointer(info->SCpnt), "Cmnd SCp: ", "\n");
 		return;
 	}
 
@@ -1011,7 +1011,7 @@ fas216_reselected_intr(FAS216_Info *info)
 		/*
 		 * Restore data pointer from SAVED data pointer
 		 */
-		info->scsi.SCp = info->SCpnt->SCp;
+		info->scsi.SCp = *arm_scsi_pointer(info->SCpnt);
 
 		fas216_log(info, LOG_CONNECT, "data pointers: [%p, %X]",
 			info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
@@ -1054,6 +1054,7 @@ fas216_reselected_intr(FAS216_Info *info)
 
 static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int msglen)
 {
+	struct scsi_pointer *scsi_pointer;
 	int i;
 
 	switch (message[0]) {
@@ -1078,8 +1079,9 @@ static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int
 		 * as required by the SCSI II standard.  These always
 		 * point to the start of their respective areas.
 		 */
-		info->SCpnt->SCp = info->scsi.SCp;
-		info->SCpnt->SCp.sent_command = 0;
+		scsi_pointer = arm_scsi_pointer(info->SCpnt);
+		*scsi_pointer = info->scsi.SCp;
+		scsi_pointer->sent_command = 0;
 		fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER,
 			"save data pointers: [%p, %X]",
 			info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
@@ -1092,7 +1094,7 @@ static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int
 		/*
 		 * Restore current data pointer from SAVED data pointer
 		 */
-		info->scsi.SCp = info->SCpnt->SCp;
+		info->scsi.SCp = *arm_scsi_pointer(info->SCpnt);
 		fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER,
 			"restore data pointers: [%p, 0x%x]",
 			info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
@@ -1770,7 +1772,7 @@ static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
 	 * claim host busy
 	 */
 	info->scsi.phase = PHASE_SELECTION;
-	info->scsi.SCp = SCpnt->SCp;
+	info->scsi.SCp = *arm_scsi_pointer(SCpnt);
 	info->SCpnt = SCpnt;
 	info->dma.transfer_type = fasdma_none;
 
@@ -1849,7 +1851,7 @@ static void fas216_do_bus_device_reset(FAS216_Info *info,
 	 * claim host busy
 	 */
 	info->scsi.phase = PHASE_SELECTION;
-	info->scsi.SCp = SCpnt->SCp;
+	info->scsi.SCp = *arm_scsi_pointer(SCpnt);
 	info->SCpnt = SCpnt;
 	info->dma.transfer_type = fasdma_none;
 
@@ -1999,11 +2001,13 @@ static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
 static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
 			       unsigned int result)
 {
+	struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt);
+
 	fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
 		   "request sense complete, result=0x%04x%02x%02x",
-		   result, SCpnt->SCp.Message, SCpnt->SCp.Status);
+		   result, scsi_pointer->Message, scsi_pointer->Status);
 
-	if (result != DID_OK || SCpnt->SCp.Status != SAM_STAT_GOOD)
+	if (result != DID_OK || scsi_pointer->Status != SAM_STAT_GOOD)
 		/*
 		 * Something went wrong.  Make sure that we don't
 		 * have valid data in the sense buffer that could
@@ -2033,6 +2037,8 @@ static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
 static void
 fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
 {
+	struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt);
+
 	info->stats.fins += 1;
 
 	set_host_byte(SCpnt, result);
@@ -2107,8 +2113,8 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
 	fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
 			  "requesting sense");
 	init_SCp(SCpnt);
-	SCpnt->SCp.Message = 0;
-	SCpnt->SCp.Status = 0;
+	scsi_pointer->Message = 0;
+	scsi_pointer->Status = 0;
 	SCpnt->host_scribble = (void *)fas216_rq_sns_done;
 
 	/*
diff --git a/drivers/scsi/arm/fas216.h b/drivers/scsi/arm/fas216.h
index abf960487314..08113277a2a9 100644
--- a/drivers/scsi/arm/fas216.h
+++ b/drivers/scsi/arm/fas216.h
@@ -312,6 +312,10 @@ typedef struct {
 
 /* driver-private data per SCSI command. */
 struct fas216_cmd_priv {
+	/*
+	 * @scsi_pointer must be the first member. See also arm_scsi_pointer().
+	 */
+	struct scsi_pointer scsi_pointer;
 	void (*scsi_done)(struct scsi_cmnd *cmd);
 };
 

  parent reply	other threads:[~2022-02-18 19:52 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-18 19:50 [PATCH v5 00/49] Remove the SCSI pointer from struct scsi_cmnd Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 01/49] scsi: ips: Remove an unreachable statement Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 02/49] scsi: ips: Change the return type of ips_release() into 'void' Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 03/49] scsi: ips: Use true and false instead of TRUE and FALSE Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 04/49] scsi: nsp_cs: Change the return type of two functions into 'void' Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 05/49] scsi: nsp_cs: Use true and false instead of TRUE and FALSE Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 06/49] scsi: Remove drivers/scsi/scsi.h Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 07/49] scsi: NCR5380: Remove the NCR5380_CMD_SIZE macro Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 08/49] scsi: NCR5380: Add SCp members to struct NCR5380_cmd Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 09/49] scsi: arm: Rename arm/scsi.h into arm/arm_scsi.h Bart Van Assche
2022-02-18 19:50 ` Bart Van Assche [this message]
2022-02-18 19:50 ` [PATCH v5 11/49] scsi: 53c700: Stop clearing SCSI pointer fields Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 12/49] scsi: aacraid: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 13/49] scsi: advansys: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 14/49] scsi: aha1542: Remove a set-but-not-used array Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 15/49] scsi: aha152x: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 16/49] scsi: bfa: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 17/49] scsi: csio: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 18/49] scsi: dc395x: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 19/49] scsi: esp_scsi: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 20/49] scsi: fdomain: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 21/49] scsi: fnic: Fix a tracing statement Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 22/49] scsi: fnic: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 23/49] scsi: hptiop: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 24/49] scsi: imm: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 25/49] scsi: iscsi: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 26/49] scsi: initio: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 27/49] scsi: libfc: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 28/49] scsi: bnx2fc: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 29/49] scsi: qedf: " Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 30/49] scsi: mac53c94: Fix a set-but-not-used compiler warning Bart Van Assche
2022-02-18 19:50 ` [PATCH v5 31/49] scsi: mac53c94: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 32/49] scsi: megaraid: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 33/49] scsi: megasas: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 34/49] scsi: mesh: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 35/49] scsi: mvsas: Fix a set-but-not-used warning Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 36/49] scsi: mvumi: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 37/49] scsi: nsp32: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 38/49] scsi: nsp_cs: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 39/49] scsi: sym53c500_cs: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 40/49] scsi: ppa: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 41/49] scsi: qla1280: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 42/49] scsi: qla2xxx: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 43/49] scsi: smartpqi: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 44/49] scsi: sym53c8xx_2: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 45/49] scsi: usb: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 46/49] scsi: wd719x: " Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 47/49] scsi: wd33c93: Move the SCSI pointer to private command data Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 48/49] scsi: zalon: Stop using the SCSI pointer Bart Van Assche
2022-02-18 19:51 ` [PATCH v5 49/49] scsi: core: Remove struct scsi_pointer from struct scsi_cmnd Bart Van Assche
2022-02-19 22:05 ` [PATCH v5 00/49] Remove the SCSI pointer " Martin K. Petersen
2022-02-28  3:43 ` Martin K. Petersen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220218195117.25689-11-bvanassche@acm.org \
    --to=bvanassche@acm.org \
    --cc=hare@suse.de \
    --cc=himanshu.madhani@oracle.com \
    --cc=jejb@linux.ibm.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=martin.petersen@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.