[PATCH 5/5] UBUNTU: SAUCE: nvme: Fix erroneous parameter to dma_map_sg_attrs()

Tim Gardner tim.gardner at canonical.com
Fri Nov 18 13:58:08 UTC 2016


On 11/18/2016 06:36 AM, Seth Forshee wrote:
> On Wed, Nov 16, 2016 at 07:35:56AM -0700, Tim Gardner wrote:
>> BugLink: http://bugs.launchpad.net/bugs/1637565
>>
>> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
>> ---
>>  drivers/nvme/host/pci.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
>> index 5256448..3931ceb 100644
>> --- a/drivers/nvme/host/pci.c
>> +++ b/drivers/nvme/host/pci.c
>> @@ -623,6 +623,7 @@ static int nvme_map_data(struct nvme_dev *dev, struct request *req,
>>  	enum dma_data_direction dma_dir = rq_data_dir(req) ?
>>  			DMA_TO_DEVICE : DMA_FROM_DEVICE;
>>  	int ret = BLK_MQ_RQ_QUEUE_ERROR;
>> +	DEFINE_DMA_ATTRS(attrs);
> 
> You also need this:
> 
>         dma_set_attr(DMA_ATTR_NO_WARN, &attrs);
> 

DMA_ATTR_NO_WARN was not introduced until v4.9-rc1. I think map_sg()
expects something from the enumerated set 'enum dma_attr'.

I did find an instance of its use in arch/powerpc/kernel/iommu.c where
DMA_ATTR_NO_WARN is being queried. I think that is an erroneous backport
on my part, but harmless.

>>  
>>  	sg_init_table(iod->sg, req->nr_phys_segments);
>>  	iod->nents = blk_rq_map_sg(q, req, iod->sg);
>> @@ -631,7 +632,7 @@ static int nvme_map_data(struct nvme_dev *dev, struct request *req,
>>  
>>  	ret = BLK_MQ_RQ_QUEUE_BUSY;
>>  	if (!dma_map_sg_attrs(dev->dev, iod->sg, iod->nents, dma_dir,
>> -				DMA_ATTR_NO_WARN))
>> +				&attrs))
>>  		goto out;
>>  
>>  	if (!nvme_setup_prps(dev, req, blk_rq_bytes(req)))
>> -- 
>> 2.7.4
>>
>>
>> -- 
>> kernel-team mailing list
>> kernel-team at lists.ubuntu.com
>> https://lists.ubuntu.com/mailman/listinfo/kernel-team


-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list