On Thu, 2020-12-10 at 14:35 -0600, Don Brace wrote: > From: Kevin Barnett <kevin.barnett@xxxxxxxxxxxxx> > > The specification for AIO Sub-Page (0x02) has changed slightly. > * bring the driver into conformance with the spec. > > Reviewed-by: Scott Benesh <scott.benesh@xxxxxxxxxxxxx> > Reviewed-by: Scott Teel <scott.teel@xxxxxxxxxxxxx> > Signed-off-by: Kevin Barnett <kevin.barnett@xxxxxxxxxxxxx> > Signed-off-by: Don Brace <don.brace@xxxxxxxxxxxxx> > --- > drivers/scsi/smartpqi/smartpqi.h | 12 ++++--- > drivers/scsi/smartpqi/smartpqi_init.c | 60 +++++++++++++++++++++-- > ---------- > 2 files changed, 47 insertions(+), 25 deletions(-) > > diff --git a/drivers/scsi/smartpqi/smartpqi.h > b/drivers/scsi/smartpqi/smartpqi.h > index 31281cddadfe..eb23c3cf59c0 100644 > --- a/drivers/scsi/smartpqi/smartpqi.h > +++ b/drivers/scsi/smartpqi/smartpqi.h > @@ -1028,13 +1028,13 @@ struct pqi_scsi_dev_raid_map_data { > u8 cdb_length; > > /* RAID 1 specific */ > -#define NUM_RAID1_MAP_ENTRIES 3 > +#define NUM_RAID1_MAP_ENTRIES 3 > u32 num_it_nexus_entries; > u32 it_nexus[NUM_RAID1_MAP_ENTRIES]; > > /* RAID 5 / RAID 6 specific */ > - u32 p_parity_it_nexus; /* aio_handle */ > - u32 q_parity_it_nexus; /* aio_handle */ > + u32 p_parity_it_nexus; /* aio_handle */ > + u32 q_parity_it_nexus; /* aio_handle */ > u8 xor_mult; > u64 row; > u64 stripe_lba; > @@ -1044,6 +1044,7 @@ struct pqi_scsi_dev_raid_map_data { > > #define RAID_CTLR_LUNID "\0\0\0\0\0\0\0\0" > > + > struct pqi_scsi_dev { > int devtype; /* as reported by INQUIRY > commmand */ > u8 device_type; /* as reported by */ > @@ -1302,7 +1303,8 @@ struct pqi_ctrl_info { > u32 max_transfer_encrypted_sas_sata; > u32 max_transfer_encrypted_nvme; > u32 max_write_raid_5_6; > - > + u32 max_write_raid_1_10_2drive; > + u32 max_write_raid_1_10_3drive; > > struct list_head scsi_device_list; > spinlock_t scsi_device_list_lock; > @@ -1533,6 +1535,8 @@ struct bmic_sense_feature_io_page_aio_subpage { > __le16 max_transfer_encrypted_sas_sata; > __le16 max_transfer_encrypted_nvme; > __le16 max_write_raid_5_6; > + __le16 max_write_raid_1_10_2drive; > + __le16 max_write_raid_1_10_3drive; > }; > > struct bmic_smp_request { > diff --git a/drivers/scsi/smartpqi/smartpqi_init.c > b/drivers/scsi/smartpqi/smartpqi_init.c > index aa21c1cd2cac..419887aa8ff3 100644 > --- a/drivers/scsi/smartpqi/smartpqi_init.c > +++ b/drivers/scsi/smartpqi/smartpqi_init.c > @@ -696,6 +696,19 @@ static int pqi_identify_physical_device(struct > pqi_ctrl_info *ctrl_info, > return rc; > } > > +static inline u32 pqi_aio_limit_to_bytes(__le16 *limit) > +{ > + u32 bytes; > + > + bytes = get_unaligned_le16(limit); > + if (bytes == 0) > + bytes = ~0; > + else > + bytes *= 1024; > + > + return bytes; > +} Nice, but this function and it's callers belong into patch 06/25. > + > #pragma pack(1) > > struct bmic_sense_feature_buffer { > @@ -707,11 +720,11 @@ struct bmic_sense_feature_buffer { > > #define MINIMUM_AIO_SUBPAGE_BUFFER_LENGTH \ > offsetofend(struct bmic_sense_feature_buffer, \ > - aio_subpage.max_write_raid_5_6) > + aio_subpage.max_write_raid_1_10_3drive) > > #define MINIMUM_AIO_SUBPAGE_LENGTH \ > (offsetofend(struct bmic_sense_feature_io_page_aio_subpage, \ > - max_write_raid_5_6) - \ > + max_write_raid_1_10_3drive) - \ > sizeof_field(struct > bmic_sense_feature_io_page_aio_subpage, header)) > > static int pqi_get_advanced_raid_bypass_config(struct pqi_ctrl_info > *ctrl_info) > @@ -753,33 +766,28 @@ static int > pqi_get_advanced_raid_bypass_config(struct pqi_ctrl_info *ctrl_info) > BMIC_SENSE_FEATURE_IO_PAGE_AIO_SUBPAGE || > get_unaligned_le16(&buffer- > >aio_subpage.header.page_length) < > MINIMUM_AIO_SUBPAGE_LENGTH) { > - rc = -EINVAL; This should be changed in 06/25. > goto error; > } > Regards Martin