| From c42e65664390be7c1ef3838cd84956d3a2739d60 Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Tue, 7 Jun 2022 12:11:33 -0700 |
| Subject: Input: bcm5974 - set missing URB_NO_TRANSFER_DMA_MAP urb flag |
| |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| |
| commit c42e65664390be7c1ef3838cd84956d3a2739d60 upstream. |
| |
| The bcm5974 driver does the allocation and dma mapping of the usb urb |
| data buffer, but driver does not set the URB_NO_TRANSFER_DMA_MAP flag |
| to let usb core know the buffer is already mapped. |
| |
| usb core tries to map the already mapped buffer, causing a warning: |
| "xhci_hcd 0000:00:14.0: rejecting DMA map of vmalloc memory" |
| |
| Fix this by setting the URB_NO_TRANSFER_DMA_MAP, letting usb core |
| know buffer is already mapped by bcm5974 driver |
| |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Cc: stable@vger.kernel.org |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=215890 |
| Link: https://lore.kernel.org/r/20220606113636.588955-1-mathias.nyman@linux.intel.com |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/input/mouse/bcm5974.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/input/mouse/bcm5974.c |
| +++ b/drivers/input/mouse/bcm5974.c |
| @@ -956,17 +956,22 @@ static int bcm5974_probe(struct usb_inte |
| if (!dev->tp_data) |
| goto err_free_bt_buffer; |
| |
| - if (dev->bt_urb) |
| + if (dev->bt_urb) { |
| usb_fill_int_urb(dev->bt_urb, udev, |
| usb_rcvintpipe(udev, cfg->bt_ep), |
| dev->bt_data, dev->cfg.bt_datalen, |
| bcm5974_irq_button, dev, 1); |
| |
| + dev->bt_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
| + } |
| + |
| usb_fill_int_urb(dev->tp_urb, udev, |
| usb_rcvintpipe(udev, cfg->tp_ep), |
| dev->tp_data, dev->cfg.tp_datalen, |
| bcm5974_irq_trackpad, dev, 1); |
| |
| + dev->tp_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
| + |
| /* create bcm5974 device */ |
| usb_make_path(udev, dev->phys, sizeof(dev->phys)); |
| strlcat(dev->phys, "/input0", sizeof(dev->phys)); |