Comment 13 for bug 1935034

Revision history for this message
Suganath Prabu (suganath) wrote :

Only below two patches have a driver functionality fix, but these are not that critical.

1. d309ae0732 scsi: mpt3sas: Fix ReplyPostFree pool allocation
Here is SRU for this bug fix patch,
[Impact]
Driver always allocates ReplyPostFree queue pools as a set of 16 ReplyPostFree queues. So, on a VM where there are only one or two CPUs assigned to it and with less RAM memory then there are chances that the kernel cannot allocate a continuous memory segment for a ReplyPostFree queues set, and hence IOC initialization is terminated.
[Fix]
On a system with the number of CPUs less than 16, the driver doesn't need 16 ReplyPostFree queues, it just needs the CPU count number of ReplyPostFree queues. So the driver allocates only the CPU count of ReplyPostFree queues instead of allocating 16 ReplyPostFree queues and IOC gets initialized successfully.
[Testing]
Load driver on a VM with one or two CPUs and less RAM size (such as 1GB) and driver should successfully Initialize the IOC.
[REGRESSION RISK]
There is no regression risk with this bug-fix patch.

2. e2fac6c44a SCSI: mpt3sas: Fix deadlock while canceling the running firmware event
Here is SRU for this bug fix patch,

[Impact]
Will observe driver hang if any MPT request message gets timeout and which requires hard reset while processing the Firmware Event.
[Fix]
During hard reset operation, don't call canel_work_sync() API for the Firmware event work if this hard reset operation is invoked while processing this corresponding firmware event.
[Testing]
Load the driver and perform more target drive's hot plug and unplug operations (such that more firmware events get generated).
[REGRESSION RISK]
There is no regression risk with this bugfix patch.

Below fix patches are cosmetic patches which doesn't have any driver functionality impacts,
bfb3f00c06 scsi: mpt3sas: Simplify bool comparison
cf9e575e62 scsi: mpt3sas: Fix a bunch of potential naming doc-rot
54cb88dc30 scsi: mpt3sas: Fix a couple of misdocumented functions/params
782a1ab33f scsi: mpt3sas: Fix some kernel-doc misnaming issues
a8d548b0b3 scsi: mpt3sas: Fix a few kernel-doc issues
206a3afa94 scsi: mpt3sas: Fix a typo
c0629d70ca scsi: mpt3sas: Fix endianness for ActiveCablePowerRequirement
16660db3fc scsi: mpt3sas: Fix out-of-bounds warnings in _ctl_addnl_diag_query
3ad0b1da0d scsi: mpt3sas: Fix two kernel-doc headers
2910a4a9e9 scsi: mpt3sas: Documentation cleanup
e2fac6c44a scsi: mpt3sas: Fix deadlock while cancelling the running firmware event
84a84cc6af scsi: mpt3sas: Fix fall-through warnings for Clang
cf750be8e6 scsi: mpt3sas: Fix Coverity reported issue
d6c2ce435f scsi: mpt3sas: Fix error return value in _scsih_expander_add()

Below patches are related to kernel APIs compatible changes and doesn't have any driver functionality impacts,
8278807abd scsi: core: Add scsi_device_busy() wrapper
020b0f0a31 scsi: core: Replace sdev->device_busy with sbitmap
f2b1e9c6f8 scsi: core: Introduce scsi_build_sense()

Below patches are the driver enhancement patches that we have added in Phase18 & Phase19.

1. Add host tagset support:
Through this feature, the driver can emulate the number of request queues to more than one at kernel level even though IOC supports only one request queue. By default this feature is disabled, if users want this feature then they have to enable it through module parameter.
64f0dce20 SCSI: mpt3sas: Add support for shared host tagset for CPU hotplug

[REGRESSION RISK]
No extra test cases are needed, normal regression test cases such as driver load & running IOs are enough.

2. Additional diagnostic buffer query interface:
Currently whenever any diag trigger event hits the driver releases the diag buffer, but the application doesn't know for which trigger event the diag buffer got released. So added a new additional diagnostic buffer query IOCTL interface through which the application queries the driver about the reason (i.e. trigger event information) for which the diag buffer got released.
688c1a0a13 scsi: mpt3sas: Additional diagnostic buffer query interface

[REGRESSION RISK]
No extra test cases are needed, normal regression test cases which cover the IOCTL paths are enough.

3. Allocate memory pools within 4GB memory region:
According to the MPI spec chain, sense reply, reply post, etc pool buffers need to be allocated within the 4GB memory region. So, through the below patches driver makes sure that these pools are allocated within the 4GB memory region (i.e. higher 32 address bits should be the same for the entire buffer pool).

d6adc251dd scsi: mpt3sas: Force PCIe scatterlist allocations to be within same 4 GB region
7dd847dae1 scsi: mpt3sas: Force chain buffer allocations to be within same 4 GB region
970ac2bb70 scsi: mpt3sas: Force sense buffer allocations to be within same 4 GB region
58501fd937 scsi: mpt3sas: Force reply buffer allocations to be within same 4 GB region
2e4e858732 scsi: mpt3sas: Force reply post buffer allocations to be within same 4 GB region
c569de899b scsi: mpt3sas: Force reply post array allocations to be within same 4 GB region

[REGRESSION RISK]
No extra test cases are needed, normal regression test cases such as driver load & running IOs are enough.

4. Handle firmware faults gracefully during IOC initialization time:
Currently, if the driver detects any firmware fault during the IOC initialization then the driver terminates the IOC initialization operation. With this feature, the driver tries to recover the IOC from the fault state, if IOC successfully recovers from the fault state then driver continues with the IOC initialization operation.
19a622c39a scsi: mpt3sas: Handle firmware faults during first half of IOC init
a0815c45c8 scsi: mpt3sas: Handle firmware faults during second half of IOC init

[REGRESSION RISK]
No extra test cases are needed, normal regression test cases such as driver load & running IOs are enough.