diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-11 18:17:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-11 18:17:41 -0400 |
commit | 1f7563f743d7081710a9d186a8b203997d09f383 (patch) | |
tree | 55091227fb177f25c45f33dfb5f0b2a5e22ccfa7 /drivers/scsi/pmcraid.c | |
parent | ba6d10ab8014ac10d25ca513352b6665e73b5785 (diff) | |
parent | 3e99b3b13a1fc8f7354edaee4c04f73a07faba69 (diff) |
Merge tag 'scsi-sg' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI scatter-gather list updates from James Bottomley:
"This topic branch covers a fundamental change in how our sg lists are
allocated to make mq more efficient by reducing the size of the
preallocated sg list.
This necessitates a large number of driver changes because the
previous guarantee that if a driver specified SG_ALL as the size of
its scatter list, it would get a non-chained list and didn't need to
bother with scatterlist iterators is now broken and every driver
*must* use scatterlist iterators.
This was broken out as a separate topic because we need to convert all
the drivers before pulling the trigger and unconverted drivers kept
being found, necessitating a rebase"
* tag 'scsi-sg' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (21 commits)
scsi: core: don't preallocate small SGL in case of NO_SG_CHAIN
scsi: lib/sg_pool.c: clear 'first_chunk' in case of no preallocation
scsi: core: avoid preallocating big SGL for data
scsi: core: avoid preallocating big SGL for protection information
scsi: lib/sg_pool.c: improve APIs for allocating sg pool
scsi: esp: use sg helper to iterate over scatterlist
scsi: NCR5380: use sg helper to iterate over scatterlist
scsi: wd33c93: use sg helper to iterate over scatterlist
scsi: ppa: use sg helper to iterate over scatterlist
scsi: pcmcia: nsp_cs: use sg helper to iterate over scatterlist
scsi: imm: use sg helper to iterate over scatterlist
scsi: aha152x: use sg helper to iterate over scatterlist
scsi: s390: zfcp_fc: use sg helper to iterate over scatterlist
scsi: staging: unisys: visorhba: use sg helper to iterate over scatterlist
scsi: usb: image: microtek: use sg helper to iterate over scatterlist
scsi: pmcraid: use sg helper to iterate over scatterlist
scsi: ipr: use sg helper to iterate over scatterlist
scsi: mvumi: use sg helper to iterate over scatterlist
scsi: lpfc: use sg helper to iterate over scatterlist
scsi: advansys: use sg helper to iterate over scatterlist
...
Diffstat (limited to 'drivers/scsi/pmcraid.c')
-rw-r--r-- | drivers/scsi/pmcraid.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index ca22526aff7f..71ff3936da4f 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c | |||
@@ -3255,7 +3255,7 @@ static int pmcraid_copy_sglist( | |||
3255 | int direction | 3255 | int direction |
3256 | ) | 3256 | ) |
3257 | { | 3257 | { |
3258 | struct scatterlist *scatterlist; | 3258 | struct scatterlist *sg; |
3259 | void *kaddr; | 3259 | void *kaddr; |
3260 | int bsize_elem; | 3260 | int bsize_elem; |
3261 | int i; | 3261 | int i; |
@@ -3264,10 +3264,10 @@ static int pmcraid_copy_sglist( | |||
3264 | /* Determine the actual number of bytes per element */ | 3264 | /* Determine the actual number of bytes per element */ |
3265 | bsize_elem = PAGE_SIZE * (1 << sglist->order); | 3265 | bsize_elem = PAGE_SIZE * (1 << sglist->order); |
3266 | 3266 | ||
3267 | scatterlist = sglist->scatterlist; | 3267 | sg = sglist->scatterlist; |
3268 | 3268 | ||
3269 | for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) { | 3269 | for (i = 0; i < (len / bsize_elem); i++, sg = sg_next(sg), buffer += bsize_elem) { |
3270 | struct page *page = sg_page(&scatterlist[i]); | 3270 | struct page *page = sg_page(sg); |
3271 | 3271 | ||
3272 | kaddr = kmap(page); | 3272 | kaddr = kmap(page); |
3273 | if (direction == DMA_TO_DEVICE) | 3273 | if (direction == DMA_TO_DEVICE) |
@@ -3282,11 +3282,11 @@ static int pmcraid_copy_sglist( | |||
3282 | return -EFAULT; | 3282 | return -EFAULT; |
3283 | } | 3283 | } |
3284 | 3284 | ||
3285 | scatterlist[i].length = bsize_elem; | 3285 | sg->length = bsize_elem; |
3286 | } | 3286 | } |
3287 | 3287 | ||
3288 | if (len % bsize_elem) { | 3288 | if (len % bsize_elem) { |
3289 | struct page *page = sg_page(&scatterlist[i]); | 3289 | struct page *page = sg_page(sg); |
3290 | 3290 | ||
3291 | kaddr = kmap(page); | 3291 | kaddr = kmap(page); |
3292 | 3292 | ||
@@ -3297,7 +3297,7 @@ static int pmcraid_copy_sglist( | |||
3297 | 3297 | ||
3298 | kunmap(page); | 3298 | kunmap(page); |
3299 | 3299 | ||
3300 | scatterlist[i].length = len % bsize_elem; | 3300 | sg->length = len % bsize_elem; |
3301 | } | 3301 | } |
3302 | 3302 | ||
3303 | if (rc) { | 3303 | if (rc) { |