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>,
	Johannes Thumshirn <johannes.thumshirn@wdc.com>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>
Subject: [PATCH v2 35/44] ppa: Move the SCSI pointer to private command data
Date: Tue,  8 Feb 2022 09:25:05 -0800	[thread overview]
Message-ID: <20220208172514.3481-36-bvanassche@acm.org> (raw)
In-Reply-To: <20220208172514.3481-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.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ppa.c | 81 ++++++++++++++++++++++++++++------------------
 1 file changed, 49 insertions(+), 32 deletions(-)

diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
index 003043de23a5..ac948768eba4 100644
--- a/drivers/scsi/ppa.c
+++ b/drivers/scsi/ppa.c
@@ -45,6 +45,17 @@ typedef struct {
 
 #include  "ppa.h"
 
+struct ppa_cmd_priv {
+	struct scsi_pointer scsi_pointer;
+};
+
+static struct scsi_pointer *ppa_scsi_pointer(struct scsi_cmnd *cmd)
+{
+	struct ppa_cmd_priv *pcmd = scsi_cmd_priv(cmd);
+
+	return &pcmd->scsi_pointer;
+}
+	
 static inline ppa_struct *ppa_dev(struct Scsi_Host *host)
 {
 	return *(ppa_struct **)&host->hostdata;
@@ -56,7 +67,7 @@ static void got_it(ppa_struct *dev)
 {
 	dev->base = dev->dev->port->base;
 	if (dev->cur_cmd)
-		dev->cur_cmd->SCp.phase = 1;
+		ppa_scsi_pointer(dev->cur_cmd)->phase = 1;
 	else
 		wake_up(dev->waiting);
 }
@@ -511,13 +522,14 @@ static inline int ppa_send_command(struct scsi_cmnd *cmd)
  * The driver appears to remain stable if we speed up the parallel port
  * i/o in this function, but not elsewhere.
  */
-static int ppa_completion(struct scsi_cmnd *cmd)
+static int ppa_completion(struct scsi_cmnd *const cmd)
 {
 	/* Return codes:
 	 * -1     Error
 	 *  0     Told to schedule
 	 *  1     Finished data transfer
 	 */
+	struct scsi_pointer *scsi_pointer = ppa_scsi_pointer(cmd);
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 	unsigned short ppb = dev->base;
 	unsigned long start_jiffies = jiffies;
@@ -543,7 +555,7 @@ static int ppa_completion(struct scsi_cmnd *cmd)
 		if (time_after(jiffies, start_jiffies + 1))
 			return 0;
 
-		if ((cmd->SCp.this_residual <= 0)) {
+		if (scsi_pointer->this_residual <= 0) {
 			ppa_fail(dev, DID_ERROR);
 			return -1;	/* ERROR_RETURN */
 		}
@@ -572,28 +584,30 @@ static int ppa_completion(struct scsi_cmnd *cmd)
 		}
 
 		/* determine if we should use burst I/O */
-		fast = (bulk && (cmd->SCp.this_residual >= PPA_BURST_SIZE))
-		    ? PPA_BURST_SIZE : 1;
+		fast = bulk && scsi_pointer->this_residual >= PPA_BURST_SIZE ?
+			PPA_BURST_SIZE : 1;
 
 		if (r == (unsigned char) 0xc0)
-			status = ppa_out(dev, cmd->SCp.ptr, fast);
+			status = ppa_out(dev, scsi_pointer->ptr, fast);
 		else
-			status = ppa_in(dev, cmd->SCp.ptr, fast);
+			status = ppa_in(dev, scsi_pointer->ptr, fast);
 
-		cmd->SCp.ptr += fast;
-		cmd->SCp.this_residual -= fast;
+		scsi_pointer->ptr += fast;
+		scsi_pointer->this_residual -= fast;
 
 		if (!status) {
 			ppa_fail(dev, DID_BUS_BUSY);
 			return -1;	/* ERROR_RETURN */
 		}
-		if (cmd->SCp.buffer && !cmd->SCp.this_residual) {
+		if (scsi_pointer->buffer && !scsi_pointer->this_residual) {
 			/* if scatter/gather, advance to the next segment */
-			if (cmd->SCp.buffers_residual--) {
-				cmd->SCp.buffer = sg_next(cmd->SCp.buffer);
-				cmd->SCp.this_residual =
-				    cmd->SCp.buffer->length;
-				cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
+			if (scsi_pointer->buffers_residual--) {
+				scsi_pointer->buffer =
+					sg_next(scsi_pointer->buffer);
+				scsi_pointer->this_residual =
+				    scsi_pointer->buffer->length;
+				scsi_pointer->ptr =
+					sg_virt(scsi_pointer->buffer);
 			}
 		}
 		/* Now check to see if the drive is ready to comunicate */
@@ -658,7 +672,7 @@ static void ppa_interrupt(struct work_struct *work)
 	}
 #endif
 
-	if (cmd->SCp.phase > 1)
+	if (ppa_scsi_pointer(cmd)->phase > 1)
 		ppa_disconnect(dev);
 
 	ppa_pb_dismiss(dev);
@@ -670,6 +684,7 @@ static void ppa_interrupt(struct work_struct *work)
 
 static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 {
+	struct scsi_pointer *scsi_pointer = ppa_scsi_pointer(cmd);
 	unsigned short ppb = dev->base;
 	unsigned char l = 0, h = 0;
 	int retv;
@@ -680,7 +695,7 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 	if (dev->failed)
 		return 0;
 
-	switch (cmd->SCp.phase) {
+	switch (scsi_pointer->phase) {
 	case 0:		/* Phase 0 - Waiting for parport */
 		if (time_after(jiffies, dev->jstart + HZ)) {
 			/*
@@ -715,7 +730,7 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 					return 1;	/* Try again in a jiffy */
 				}
 			}
-			cmd->SCp.phase++;
+			scsi_pointer->phase++;
 		}
 		fallthrough;
 
@@ -724,7 +739,7 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 			ppa_fail(dev, DID_NO_CONNECT);
 			return 0;
 		}
-		cmd->SCp.phase++;
+		scsi_pointer->phase++;
 		fallthrough;
 
 	case 3:		/* Phase 3 - Ready to accept a command */
@@ -734,21 +749,22 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 
 		if (!ppa_send_command(cmd))
 			return 0;
-		cmd->SCp.phase++;
+		scsi_pointer->phase++;
 		fallthrough;
 
 	case 4:		/* Phase 4 - Setup scatter/gather buffers */
 		if (scsi_bufflen(cmd)) {
-			cmd->SCp.buffer = scsi_sglist(cmd);
-			cmd->SCp.this_residual = cmd->SCp.buffer->length;
-			cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
+			scsi_pointer->buffer = scsi_sglist(cmd);
+			scsi_pointer->this_residual =
+				scsi_pointer->buffer->length;
+			scsi_pointer->ptr = sg_virt(scsi_pointer->buffer);
 		} else {
-			cmd->SCp.buffer = NULL;
-			cmd->SCp.this_residual = 0;
-			cmd->SCp.ptr = NULL;
+			scsi_pointer->buffer = NULL;
+			scsi_pointer->this_residual = 0;
+			scsi_pointer->ptr = NULL;
 		}
-		cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1;
-		cmd->SCp.phase++;
+		scsi_pointer->buffers_residual = scsi_sg_count(cmd) - 1;
+		scsi_pointer->phase++;
 		fallthrough;
 
 	case 5:		/* Phase 5 - Data transfer stage */
@@ -761,7 +777,7 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 			return 0;
 		if (retv == 0)
 			return 1;
-		cmd->SCp.phase++;
+		scsi_pointer->phase++;
 		fallthrough;
 
 	case 6:		/* Phase 6 - Read status/message */
@@ -798,7 +814,7 @@ static int ppa_queuecommand_lck(struct scsi_cmnd *cmd)
 	dev->jstart = jiffies;
 	dev->cur_cmd = cmd;
 	cmd->result = DID_ERROR << 16;	/* default return code */
-	cmd->SCp.phase = 0;	/* bus free */
+	ppa_scsi_pointer(cmd)->phase = 0;	/* bus free */
 
 	schedule_delayed_work(&dev->ppa_tq, 0);
 
@@ -839,7 +855,7 @@ static int ppa_abort(struct scsi_cmnd *cmd)
 	 * have tied the SCSI_MESSAGE line high in the interface
 	 */
 
-	switch (cmd->SCp.phase) {
+	switch (ppa_scsi_pointer(cmd)->phase) {
 	case 0:		/* Do not have access to parport */
 	case 1:		/* Have not connected to interface */
 		dev->cur_cmd = NULL;	/* Forget the problem */
@@ -861,7 +877,7 @@ static int ppa_reset(struct scsi_cmnd *cmd)
 {
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 
-	if (cmd->SCp.phase)
+	if (ppa_scsi_pointer(cmd)->phase)
 		ppa_disconnect(dev);
 	dev->cur_cmd = NULL;	/* Forget the problem */
 
@@ -976,6 +992,7 @@ static struct scsi_host_template ppa_template = {
 	.sg_tablesize		= SG_ALL,
 	.can_queue		= 1,
 	.slave_alloc		= ppa_adjust_queue,
+	.cmd_size		= sizeof(struct ppa_cmd_priv),
 };
 
 /***************************************************************************

  parent reply	other threads:[~2022-02-08 17:27 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-08 17:24 [PATCH v2 00/44] Remove the SCSI pointer from struct scsi_cmnd Bart Van Assche
2022-02-08 17:24 ` [PATCH v2 01/44] ips: Use true and false instead of TRUE and FALSE Bart Van Assche
2022-02-08 18:04   ` John Garry
2022-02-09  0:04     ` Bart Van Assche
2022-02-09  9:06       ` John Garry
2022-02-08 20:00   ` Himanshu Madhani
2022-02-09  7:23   ` Hannes Reinecke
2022-02-08 17:24 ` [PATCH v2 02/44] nsp_cs: " Bart Van Assche
2022-02-08 19:22   ` Himanshu Madhani
2022-02-09  7:23   ` Hannes Reinecke
2022-02-09  9:11   ` John Garry
2022-02-08 17:24 ` [PATCH v2 03/44] scsi: Remove drivers/scsi/scsi.h Bart Van Assche
2022-02-08 19:22   ` Himanshu Madhani
2022-02-09  7:26   ` Hannes Reinecke
2022-02-09 17:39     ` Bart Van Assche
2022-02-09  8:55   ` Johannes Thumshirn
2022-02-09  9:17   ` John Garry
2022-02-09 18:21     ` John Garry
2022-02-08 17:24 ` [PATCH v2 04/44] NCR5380: Remove the NCR5380_CMD_SIZE macro Bart Van Assche
2022-02-08 19:22   ` Himanshu Madhani
2022-02-08 22:14   ` Finn Thain
2022-02-09  7:27   ` Hannes Reinecke
2022-02-08 17:24 ` [PATCH v2 05/44] NCR5380: Move the SCSI pointer to private command data Bart Van Assche
2022-02-08 19:48   ` Himanshu Madhani
2022-02-08 22:22   ` Finn Thain
2022-02-09  0:10     ` Bart Van Assche
2022-02-09  7:29   ` Hannes Reinecke
2022-02-09 17:58     ` Bart Van Assche
2022-02-08 17:24 ` [PATCH v2 06/44] scsi: arm: Rename arm/scsi.h into arm/arm_scsi.h Bart Van Assche
2022-02-08 19:49   ` Himanshu Madhani
2022-02-09  7:30   ` Hannes Reinecke
2022-02-08 17:24 ` [PATCH v2 07/44] scsi: arm: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  7:32   ` Hannes Reinecke
2022-02-09 17:49   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 08/44] 53c700: Stop clearing SCSI pointer fields Bart Van Assche
2022-02-08 19:58   ` Himanshu Madhani
2022-02-09  7:32   ` Hannes Reinecke
2022-02-08 17:24 ` [PATCH v2 09/44] aacraid: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  7:34   ` Hannes Reinecke
2022-02-09 17:47   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 10/44] advansys: " Bart Van Assche
2022-02-08 17:24 ` [PATCH v2 11/44] aha1542: Remove a set-but-not-used array Bart Van Assche
2022-02-09  7:35   ` Hannes Reinecke
2022-02-09 17:50   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 12/44] aha152x: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  7:35   ` Hannes Reinecke
2022-02-09 17:57   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 13/44] bfa: Stop using the SCSI pointer Bart Van Assche
2022-02-09  7:40   ` Hannes Reinecke
2022-02-09 18:19     ` Bart Van Assche
2022-02-10  7:29       ` Hannes Reinecke
2022-02-09 18:00   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 14/44] csio: " Bart Van Assche
2022-02-09  7:41   ` Hannes Reinecke
2022-02-09 18:03   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 15/44] dc395x: " Bart Van Assche
2022-02-09  7:42   ` Hannes Reinecke
2022-02-09 18:03   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 16/44] esp_scsi: " Bart Van Assche
2022-02-09  7:45   ` Hannes Reinecke
2022-02-09 18:04   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 17/44] fdomain: Move the SCSI pointer to private command data Bart Van Assche
2022-02-08 20:35   ` Himanshu Madhani
2022-02-09  7:46   ` Hannes Reinecke
2022-02-08 17:24 ` [PATCH v2 18/44] fnic: Fix a tracing statement Bart Van Assche
2022-02-09  7:46   ` Hannes Reinecke
2022-02-09 18:05   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 19/44] fnic: Stop using the SCSI pointer Bart Van Assche
2022-02-09  7:56   ` Hannes Reinecke
2022-02-09 18:22     ` Bart Van Assche
2022-02-10  7:30       ` Hannes Reinecke
2022-02-09 18:17   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 20/44] hptiop: " Bart Van Assche
2022-02-09  7:57   ` Hannes Reinecke
2022-02-09 18:24     ` Bart Van Assche
2022-02-10  7:32       ` Hannes Reinecke
2022-02-09 18:18   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 21/44] imm: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  7:58   ` Hannes Reinecke
2022-02-09 18:27     ` Bart Van Assche
2022-02-10  7:42       ` Hannes Reinecke
2022-02-10 23:54         ` Bart Van Assche
2022-02-09 18:19   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 22/44] iscsi: Stop using the SCSI pointer Bart Van Assche
2022-02-09  7:59   ` Hannes Reinecke
2022-02-09 18:22   ` Himanshu Madhani
2022-02-09 19:55   ` Lee Duncan
2022-02-09 21:24   ` Mike Christie
2022-02-09 23:35     ` Chris Leech
2022-02-10  1:21     ` Bart Van Assche
2022-02-09 23:37   ` Chris Leech
2022-02-10  1:26     ` Bart Van Assche
2022-02-08 17:24 ` [PATCH v2 23/44] initio: " Bart Van Assche
2022-02-09  8:04   ` Hannes Reinecke
2022-02-09 18:24   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 24/44] libfc: " Bart Van Assche
2022-02-09  8:10   ` Hannes Reinecke
2022-02-09 18:33     ` Bart Van Assche
2022-02-09 18:28   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 25/44] mac53c94: Fix a set-but-not-used compiler warning Bart Van Assche
2022-02-09  8:10   ` Hannes Reinecke
2022-02-09 18:33   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 26/44] mac53c94: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  8:11   ` Hannes Reinecke
2022-02-09 18:35     ` Bart Van Assche
2022-02-10  7:52       ` Hannes Reinecke
2022-02-09 18:37   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 27/44] megaraid: Stop using the SCSI pointer Bart Van Assche
2022-02-09  8:14   ` Hannes Reinecke
2022-02-09 18:38     ` Bart Van Assche
2022-02-09 18:39   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 28/44] megasas: " Bart Van Assche
2022-02-09  8:16   ` Hannes Reinecke
2022-02-09 18:45   ` Himanshu Madhani
2022-02-08 17:24 ` [PATCH v2 29/44] mesh: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  8:49   ` Hannes Reinecke
2022-02-09 18:42   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 30/44] mvsas: Fix a set-but-not-used warning Bart Van Assche
2022-02-08 17:50   ` John Garry
2022-02-09  0:19     ` Bart Van Assche
2022-02-09  8:49   ` Hannes Reinecke
2022-02-09 18:43   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 31/44] mvumi: Stop using the SCSI pointer Bart Van Assche
2022-02-09  8:18   ` Hannes Reinecke
2022-02-09 18:46   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 32/44] nsp32: " Bart Van Assche
2022-02-09  8:18   ` Hannes Reinecke
2022-02-09  8:19   ` Hannes Reinecke
2022-02-09 18:48   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 33/44] nsp_cs: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  8:20   ` Hannes Reinecke
2022-02-09 18:50   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 34/44] sym53c500_cs: " Bart Van Assche
2022-02-09  8:21   ` Hannes Reinecke
2022-02-09 18:56   ` Himanshu Madhani
2022-02-08 17:25 ` Bart Van Assche [this message]
2022-02-09  8:22   ` [PATCH v2 35/44] ppa: " Hannes Reinecke
2022-02-09 18:56   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 36/44] qla1280: " Bart Van Assche
2022-02-09  8:22   ` Hannes Reinecke
2022-02-09 18:58   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 37/44] qla2xxx: Stop using the SCSI pointer Bart Van Assche
2022-02-08 18:38   ` Himanshu Madhani
2022-02-09  8:24   ` Hannes Reinecke
2022-02-09 10:11   ` Daniel Wagner
2022-02-08 17:25 ` [PATCH v2 38/44] smartpqi: " Bart Van Assche
2022-02-09  8:33   ` Hannes Reinecke
2022-02-09 18:59   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 39/44] sym53c8xx_2: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  8:34   ` Hannes Reinecke
2022-02-09 19:10   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 40/44] scsi: usb: Stop using the SCSI pointer Bart Van Assche
2022-02-09  8:35   ` Hannes Reinecke
2022-02-09 19:01   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 41/44] wd719x: " Bart Van Assche
2022-02-09  8:35   ` Hannes Reinecke
2022-02-09 19:04   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 42/44] wdc33c93: Move the SCSI pointer to private command data Bart Van Assche
2022-02-09  8:36   ` Hannes Reinecke
2022-02-09 19:10   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 43/44] zalon: Stop using the SCSI pointer Bart Van Assche
2022-02-09  8:36   ` Hannes Reinecke
2022-02-09 19:11   ` Himanshu Madhani
2022-02-08 17:25 ` [PATCH v2 44/44] scsi: core: Remove struct scsi_pointer from struct scsi_cmnd Bart Van Assche
2022-02-08 17:54   ` John Garry
2022-02-09  0:24     ` Bart Van Assche
2022-02-08 19:22   ` Himanshu Madhani
2022-02-09  8:38   ` Hannes Reinecke

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=20220208172514.3481-36-bvanassche@acm.org \
    --to=bvanassche@acm.org \
    --cc=jejb@linux.ibm.com \
    --cc=johannes.thumshirn@wdc.com \
    --cc=linux-scsi@vger.kernel.org \
    --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.