Linux-USB Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH V5 00/16] use sg helper to operate scatterlist
@ 2019-06-18  1:37 Ming Lei
  2019-06-18  1:37 ` [PATCH V5 01/16] scsi: vmw_pscsi: " Ming Lei
                   ` (16 more replies)
  0 siblings, 17 replies; 31+ messages in thread
From: Ming Lei @ 2019-06-18  1:37 UTC (permalink / raw)
  To: linux-scsi, Martin K . Petersen
  Cc: James Bottomley, Bart Van Assche, Hannes Reinecke,
	Christoph Hellwig, Jim Gill, Cathy Avery, Ewan D . Milne,
	Brian King, James Smart, Juergen E . Fischer, Michael Schmitz,
	Finn Thain, Greg Kroah-Hartman, devel, linux-usb, Dan Carpenter,
	Benjamin Block, Ming Lei

Hi,

Scsi MQ makes a large static allocation for the first scatter gather
list chunk for the driver to use.  This is a performance headache we'd
like to fix by reducing the size of the allocation to a 2 element
array.  Doing this will break the current guarantee that any driver
using SG_ALL doesn't need to use the scatterlist iterators and can get
away with directly dereferencing the array.  Thus we need to update all
drivers to use the scatterlist iterators and remove direct indexing of
the scatterlist array before reducing the initial scatterlist
allocation size in SCSI.

So convert drivers to use scatterlist helper.

There are two types of direct access on scatterlist in SCSI drivers:

1) operate on the scatterlist via scsi_sglist(scmd) directly, then one
local variable of 'struct scatterlist *' is involved.

2) scsi_sglist(scmd) is stored to cmd->SCp.buffer and the scatterlist is
used via cmd->SCp.buffer.

The following coccinelle semantic patch is developed for finding the
above two types of direct scatterlist uses:

	@@ struct scatterlist *p; @@
	(
	- ++p
	+ p = sg_next(p)
	|
	- p++
	+ p = sg_next(p)
	|
	- p = p + 1
	+ p = sg_next(p)
	|
	- p += 1
	+ p = sg_next(p)
	|
	- --p
	+ p = sg_non_exist_prev(p)
	|
	- p--
	+ p = sg_non_exist_prev(p)
	|
	- p = p - 1
	+ p = sg_non_exist_prev(p)
	|
	- p -= 1
	+ p = sg_non_exist_prev(p)
	)
	
	@@
	struct scatterlist *p;
	expression data != 0;
	@@
	- p[data]
	+ '!!!!!!use sg iterator helper!!!!!!'
	
	@@
	struct scatterlist[] p;
	expression data != 0;
	@@
	- p[data]
	+ '!!!!!!use sg iterator helper!!!!!!'
	
	
	@@ struct scsi_cmnd *scmd; @@
	(
	-	scmd->SCp.buffer++
	+	scmd->SCp.buffer = sg_next(scmd->SCp.buffer)
	|
	-	++scmd->SCp.buffer
	+	scmd->SCp.buffer = sg_next(scmd->SCp.buffer)
	|
	-	scmd->SCp.buffer += 1
	+	scmd->SCp.buffer = sg_next(scmd->SCp.buffer)
	|
	-	scmd->SCp.buffer = scmd->SCp.buffer + 1
	+	scmd->SCp.buffer = sg_next(scmd->SCp.buffer)
	|
	-	scmd->SCp.buffer--
	+	scmd->SCp.buffer = sg_no_exit_prev(scmd->SCp.buffer)
	|
	-	--scmd->SCp.buffer
	+	scmd->SCp.buffer = sg_no_exit_prev(scmd->SCp.buffer)
	|
	-	scmd->SCp.buffer -= 1
	+	scmd->SCp.buffer = sg_no_exit_prev(scmd->SCp.buffer)
	|
	-	scmd->SCp.buffer = scmd->SCp.buffer - 1
	+	scmd->SCp.buffer = sg_no_exit_prev(scmd->SCp.buffer)
	)
	
	@@
	struct scsi_cmnd *scmd;
	expression data != 0;
	@@
	- scmd->SCp.buffer[data]
	+ '!!!!!!use sg iterator helper!!!!!!'


The 1st 10 patches are for handling type #1, and the other 6 patches
for handling type #2, and all the 16 are found by the above coccinelle
semantic patch.

V5:
	- one patch style fix in 5/11
	- re-write convertion for 'staging: rtsx' as suggested by Christoph
	- fix another issue in aha152x by Finn, and change the author to
	  Finn now
	- add reviewed-by tag

V4:
	- fix building failure on pmcraid's conversion 
	- improve the coccinelle semantic patch to cover both two types of
	scatterlist direct use
	- driver 'staging: rtsx' is covered

V3:
	- update commit log and cover letter, most of words are from
	James Bottomley	

V2:
	- use coccinelle semantic patch for finding direct sgl uses from
	scsi command(9 drivers found)
	- run 'git grep -E "SCp.buffer"' to find direct sgl uses
	from SCp.buffer(6 drivers are found)



Finn Thain (2):
  scsi: aha152x: use sg helper to operate scatterlist
  NCR5380: Support chained sg lists

Ming Lei (14):
  scsi: vmw_pscsi: use sg helper to operate scatterlist
  scsi: advansys: use sg helper to operate scatterlist
  scsi: lpfc: use sg helper to operate scatterlist
  scsi: mvumi: use sg helper to operate scatterlist
  scsi: ipr: use sg helper to operate scatterlist
  scsi: pmcraid: use sg helper to operate scatterlist
  usb: image: microtek: use sg helper to operate scatterlist
  staging: unisys: visorhba: use sg helper to operate scatterlist
  staging: rtsx: use sg helper to operate scatterlist
  s390: zfcp_fc: use sg helper to operate scatterlist
  scsi: imm: use sg helper to operate scatterlist
  scsi: pcmcia: nsp_cs: use sg helper to operate scatterlist
  scsi: ppa: use sg helper to operate scatterlist
  scsi: wd33c93: use sg helper to operate scatterlist

 drivers/s390/scsi/zfcp_fc.c                   |  4 +-
 drivers/scsi/NCR5380.c                        | 41 ++++++++---------
 drivers/scsi/advansys.c                       |  2 +-
 drivers/scsi/aha152x.c                        | 46 +++++++++----------
 drivers/scsi/imm.c                            |  2 +-
 drivers/scsi/ipr.c                            | 29 ++++++------
 drivers/scsi/lpfc/lpfc_nvmet.c                |  3 +-
 drivers/scsi/mvumi.c                          |  9 ++--
 drivers/scsi/pcmcia/nsp_cs.c                  |  4 +-
 drivers/scsi/pmcraid.c                        | 14 +++---
 drivers/scsi/ppa.c                            |  2 +-
 drivers/scsi/vmw_pvscsi.c                     |  2 +-
 drivers/scsi/wd33c93.c                        |  2 +-
 drivers/staging/rts5208/rtsx_transport.c      | 32 ++++++-------
 drivers/staging/rts5208/rtsx_transport.h      |  2 +-
 drivers/staging/rts5208/spi.c                 | 14 +++---
 .../staging/unisys/visorhba/visorhba_main.c   |  9 ++--
 drivers/usb/image/microtek.c                  | 20 ++++----
 drivers/usb/image/microtek.h                  |  2 +-
 19 files changed, 115 insertions(+), 124 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, back to index

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-18  1:37 [PATCH V5 00/16] use sg helper to operate scatterlist Ming Lei
2019-06-18  1:37 ` [PATCH V5 01/16] scsi: vmw_pscsi: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 02/16] scsi: advansys: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 03/16] scsi: lpfc: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 04/16] scsi: mvumi: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 05/16] scsi: ipr: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 06/16] scsi: pmcraid: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 07/16] usb: image: microtek: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 08/16] staging: unisys: visorhba: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 09/16] staging: rtsx: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 10/16] s390: zfcp_fc: " Ming Lei
2019-06-24 15:13   ` Steffen Maier
2019-06-25  1:19     ` Ming Lei
2019-06-25  2:01       ` Finn Thain
2019-06-25  2:30         ` Ming Lei
2019-06-25  3:42           ` Finn Thain
2019-06-25 10:51       ` Steffen Maier
2019-06-26  3:07         ` Ming Lei
2019-06-26  8:17           ` Steffen Maier
2019-06-18  1:37 ` [PATCH V5 11/16] scsi: aha152x: " Ming Lei
2019-06-18  3:54   ` Finn Thain
2019-06-18  1:37 ` [PATCH V5 12/16] scsi: imm: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 13/16] scsi: pcmcia: nsp_cs: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 14/16] scsi: ppa: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 15/16] scsi: wd33c93: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 16/16] NCR5380: Support chained sg lists Ming Lei
2019-06-19  0:29 ` [PATCH V5 00/16] use sg helper to operate scatterlist Martin K. Petersen
2019-06-19 19:43   ` Bart Van Assche
2019-06-19 19:55     ` Martin K. Petersen
2019-06-24 12:40       ` Ming Lei
2019-06-24 12:54         ` Martin K. Petersen

Linux-USB Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-usb/0 linux-usb/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-usb linux-usb/ https://lore.kernel.org/linux-usb \
		linux-usb@vger.kernel.org
	public-inbox-index linux-usb

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-usb


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git