在 2019年05月24日 06:55, don.br...@microchip.com 写道:
> -----Original Message-----
> From: linux-scsi-ow...@vger.kernel.org 
> [mailto:linux-scsi-ow...@vger.kernel.org] On Behalf Of Lendacky, Thomas
> Sent: Thursday, May 23, 2019 9:45 AM
> To: Lianbo Jiang <liji...@redhat.com>; linux-kernel@vger.kernel.org
> Cc: don.br...@microsemi.com; j...@linux.ibm.com; martin.peter...@oracle.com; 
> linux-s...@vger.kernel.org; esc.storage...@microsemi.com; dyo...@redhat.com
> Subject: Re: [PATCH] scsi: smartpqi: properly set both the DMA mask and the 
> coherent DMA mask in pqi_pci_init()
> 
> On 5/23/19 12:52 AM, Lianbo Jiang wrote:
>> When SME is enabled, the smartpqi driver won't work on the HP DL385
>> G10 machine, which causes the failure of kernel boot because it fails 
>> to allocate pqi error buffer. Please refer to the kernel log:
>> ....
>> [    9.431749] usbcore: registered new interface driver uas
>> [    9.441524] Microsemi PQI Driver (v1.1.4-130)
>> [    9.442956] i40e 0000:04:00.0: fw 6.70.48768 api 1.7 nvm 10.2.5
>> [    9.447237] smartpqi 0000:23:00.0: Microsemi Smart Family Controller found
>>          Starting dracut initqueue hook...
>> [  OK  ] Started Show Plymouth Boot Scre[    9.471654] Broadcom 
>> NetXtreme-C/E driver bnxt_en v1.9.1
>> en.
>> [  OK  ] Started Forward Password Requests to Plymouth Directory Watch.
>> [[0;[    9.487108] smartpqi 0000:23:00.0: failed to allocate PQI error buffer
>> ....
>> [  139.050544] dracut-initqueue[949]: Warning: dracut-initqueue 
>> timeout - starting timeout scripts [  139.589779] 
>> dracut-initqueue[949]: Warning: dracut-initqueue timeout - starting 
>> timeout scripts
>>
>> For correct operation, lets call the dma_set_mask_and_coherent() to 
>> properly set the mask for both streaming and coherent, in order to 
>> inform the kernel about the devices DMA addressing capabilities.
> 
> You should probably expand on this a bit...  Basically, the fact that the 
> coherent DMA mask value wasn't set caused the driver to fall back to SWIOTLB 
> when SME is active.

Thank you, Tom.

> I'm not sure if the failure was from running out of SWIOTLB or exceeding the 
> maximum allocation size for SWIOTLB
If so, it should print some messages like "swiotlb buffer is full", but i did 
not get such a log.

> I believe the fix is proper, but I'll let the driver owner comment on that.
> 
> Thanks,
> Tom
> 
> Acked-by: Don Brace <don.br...@microsemi.com>
> Tested-by: Don Brace <don.br...@microsemi.com>
> 
> Please add the extra description suggested by Thomas.
> 
OK, i will add Tom's description to patch log and post again.

Thank you, Don.

Lianbo
> 
>>
>> Signed-off-by: Lianbo Jiang <liji...@redhat.com>
>> ---
>>  drivers/scsi/smartpqi/smartpqi_init.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/scsi/smartpqi/smartpqi_init.c 
>> b/drivers/scsi/smartpqi/smartpqi_init.c
>> index c26cac819f9e..8b1fde6c7dab 100644
>> --- a/drivers/scsi/smartpqi/smartpqi_init.c
>> +++ b/drivers/scsi/smartpqi/smartpqi_init.c
>> @@ -7282,7 +7282,7 @@ static int pqi_pci_init(struct pqi_ctrl_info 
>> *ctrl_info)
>>         else
>>                 mask = DMA_BIT_MASK(32);
>>
>> -       rc = dma_set_mask(&ctrl_info->pci_dev->dev, mask);
>> +       rc = dma_set_mask_and_coherent(&ctrl_info->pci_dev->dev, 
>> + mask);
>>         if (rc) {
>>                 dev_err(&ctrl_info->pci_dev->dev, "failed to set DMA 
>> mask\n");
>>                 goto disable_device;
>> --
>> 2.17.1
>>

Reply via email to