On Mon, Mar 16, 2020 at 8:39 AM Deepak Ukey <deepak.ukey@xxxxxxxxxxxxx> wrote: > > From: Peter Chang <dpf@xxxxxxxxxx> > > Increasing the per-request size maximum (max_sectors_kb) runs into > the per-device dma scatter gather list limit (max_segments) for > users of the io vector system calls (eg, readv and writev). This is > because the kernel combines io vectors into dma segments when > possible, but it doesn't work for our user because the vectors in the > buffer cache get scrambled. > This change bumps the advertised max scatter gather length to 528 to > cover 2M w/ x86's 4k pages and some extra for the user checksum. > It trims the size of some of the tables we don't care about and > exposes all of the command slots upstream to the scsi layer. > Also reduced the PM8001_MAX_CCB to 256 as pm8001 driver has memory > limit depend on machine capability. If we increase the sg length, > we need to trade-off it by decreasing PM8001_MAX_CCB. > PM8001_MAX_CCB = 256 does not have any influence on normal use > > Signed-off-by: Peter Chang <dpf@xxxxxxxxxx> > Signed-off-by: Deepak Ukey <deepak.ukey@xxxxxxxxxxxxx> > Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx> > Signed-off-by: Radha Ramachandran <radha@xxxxxxxxxx> > Reported-by: kbuild test robot <lkp@xxxxxxxxx> Acked-by: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxx> Thanks! > --- > drivers/scsi/pm8001/pm8001_defs.h | 5 +++-- > drivers/scsi/pm8001/pm8001_init.c | 2 +- > 2 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_defs.h b/drivers/scsi/pm8001/pm8001_defs.h > index 48e0624ecc68..1c7f15fd69ce 100644 > --- a/drivers/scsi/pm8001/pm8001_defs.h > +++ b/drivers/scsi/pm8001/pm8001_defs.h > @@ -75,7 +75,7 @@ enum port_type { > }; > > /* driver compile-time configuration */ > -#define PM8001_MAX_CCB 512 /* max ccbs supported */ > +#define PM8001_MAX_CCB 256 /* max ccbs supported */ > #define PM8001_MPI_QUEUE 1024 /* maximum mpi queue entries */ > #define PM8001_MAX_INB_NUM 1 > #define PM8001_MAX_OUTB_NUM 1 > @@ -99,7 +99,8 @@ enum port_type { > #define OB (CI + PM8001_MAX_SPCV_INB_NUM) > #define PI (OB + PM8001_MAX_SPCV_OUTB_NUM) > #define USI_MAX_MEMCNT (PI + PM8001_MAX_SPCV_OUTB_NUM) > -#define PM8001_MAX_DMA_SG SG_ALL > +#define CONFIG_SCSI_PM8001_MAX_DMA_SG 528 > +#define PM8001_MAX_DMA_SG CONFIG_SCSI_PM8001_MAX_DMA_SG > enum memory_region_num { > AAP1 = 0x0, /* application acceleration processor */ > IOP, /* IO processor */ > diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c > index ff618ad80ebd..3f1e755c52c6 100644 > --- a/drivers/scsi/pm8001/pm8001_init.c > +++ b/drivers/scsi/pm8001/pm8001_init.c > @@ -95,7 +95,7 @@ static struct scsi_host_template pm8001_sht = { > .bios_param = sas_bios_param, > .can_queue = 1, > .this_id = -1, > - .sg_tablesize = SG_ALL, > + .sg_tablesize = PM8001_MAX_DMA_SG, > .max_sectors = SCSI_DEFAULT_MAX_SECTORS, > .eh_device_reset_handler = sas_eh_device_reset_handler, > .eh_target_reset_handler = sas_eh_target_reset_handler, > -- > 2.16.3 >