All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@kernel.org>
To: Alexey Khoroshilov <khoroshilov@ispras.ru>,
	Jack Pham <jackp@codeaurora.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	ldv-project@linuxtesting.org
Subject: Re: [PATCH] usb: gadget: pch_udc: add checks for dma mapping errors
Date: Wed, 20 Sep 2017 14:53:30 +0300	[thread overview]
Message-ID: <87poalmvr9.fsf@linux.intel.com> (raw)
In-Reply-To: <a3db7be6-ed0f-b8da-4586-6dccd98298d8@ispras.ru>

[-- Attachment #1: Type: text/plain, Size: 1956 bytes --]


Hi,

Alexey Khoroshilov <khoroshilov@ispras.ru> writes:
>>> diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
>>> index 84dcbcd756f0..a305f8392082 100644
>>> --- a/drivers/usb/gadget/udc/pch_udc.c
>>> +++ b/drivers/usb/gadget/udc/pch_udc.c
>>> @@ -1767,7 +1767,7 @@ static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
>>>  	req->req.dma = DMA_ADDR_INVALID;
>>>  	req->dma = DMA_ADDR_INVALID;
>>>  	INIT_LIST_HEAD(&req->queue);
>>> -	if (!ep->dev->dma_addr)
>>> +	if (ep->dev->dma_addr != DMA_ADDR_INVALID)
>>>  		return &req->req;
>>>  	/* ep0 in requests are allocated from data pool here */
>>>  	dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp,
>>> @@ -1879,6 +1879,13 @@ static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
>>>  							  usbreq->length,
>>>  							  DMA_FROM_DEVICE);
>>>  		}
>>> +		if (dma_mapping_error(&dev->pdev->dev, req->dma)) {
>>> +			req->dma = DMA_ADDR_INVALID;
>>> +			retval = -ENOMEM;
>>> +			if ((unsigned long)(usbreq->buf) & 0x03)
>>> +				kfree(req->buf);
>>> +			goto probe_end;
>>> +		}
>>>  		req->dma_mapped = 1;
>>>  	}
>>>  	if (usbreq->length > 0) {
>>> @@ -2961,6 +2968,10 @@ static int init_dma_pools(struct pch_udc_dev *dev)
>>>  	dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf,
>>>  				       UDC_EP0OUT_BUFF_SIZE * 4,
>>>  				       DMA_FROM_DEVICE);
>>> +	if (dma_mapping_error(&dev->pdev->dev, dev->dma_addr)) {
>>> +		dev->dma_addr = DMA_ADDR_INVALID;
>>> +		return -ENOMEM;
>>> +	}
>> 
>> Wouldn't this driver be better off using the
>> usb_gadget_{map,unmap}_request() functions provided by UDC core.c?
>> dma_mapping_error() is provided for free that way.
>> 
>
> I think so, but it requires quite significant rework of the driver.
> I would not do that without access to hardware.

I'd prefer to see a conversion to the generic helpers.

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

      reply	other threads:[~2017-09-20 11:54 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23 22:47 [PATCH] usb: gadget: pch_udc: add checks for dma mapping errors Alexey Khoroshilov
2017-08-24  1:02 ` Jack Pham
2017-09-02 18:35   ` Alexey Khoroshilov
2017-09-20 11:53     ` Felipe Balbi [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87poalmvr9.fsf@linux.intel.com \
    --to=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jackp@codeaurora.org \
    --cc=khoroshilov@ispras.ru \
    --cc=ldv-project@linuxtesting.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.