[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