struct usb_anchor tx_submitted;
        atomic_t active_tx_urbs;
-       void *rxbuf[GS_MAX_RX_URBS];
-       dma_addr_t rxbuf_dma[GS_MAX_RX_URBS];
 };
 
 /* usb interface struct */
 
        if (urb->status)
                netdev_info(netdev, "usb xmit fail %u\n", txc->echo_id);
-
-       usb_free_coherent(urb->dev, urb->transfer_buffer_length,
-                         urb->transfer_buffer, urb->transfer_dma);
 }
 
 static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,
        if (!urb)
                goto nomem_urb;
 
-       hf = usb_alloc_coherent(dev->udev, dev->hf_size_tx, GFP_ATOMIC,
-                               &urb->transfer_dma);
+       hf = kmalloc(dev->hf_size_tx, GFP_ATOMIC);
        if (!hf) {
                netdev_err(netdev, "No memory left for USB buffer\n");
                goto nomem_hf;
                          hf, dev->hf_size_tx,
                          gs_usb_xmit_callback, txc);
 
-       urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+       urb->transfer_flags |= URB_FREE_BUFFER;
        usb_anchor_urb(urb, &dev->tx_submitted);
 
        can_put_echo_skb(skb, netdev, idx, 0);
                gs_free_tx_context(txc);
 
                usb_unanchor_urb(urb);
-               usb_free_coherent(dev->udev, urb->transfer_buffer_length,
-                                 urb->transfer_buffer, urb->transfer_dma);
 
                if (rc == -ENODEV) {
                        netif_device_detach(netdev);
        return NETDEV_TX_OK;
 
  badidx:
-       usb_free_coherent(dev->udev, urb->transfer_buffer_length,
-                         urb->transfer_buffer, urb->transfer_dma);
+       kfree(hf);
  nomem_hf:
        usb_free_urb(urb);
 
                for (i = 0; i < GS_MAX_RX_URBS; i++) {
                        struct urb *urb;
                        u8 *buf;
-                       dma_addr_t buf_dma;
 
                        /* alloc rx urb */
                        urb = usb_alloc_urb(0, GFP_KERNEL);
                                return -ENOMEM;
 
                        /* alloc rx buffer */
-                       buf = usb_alloc_coherent(dev->udev,
-                                                dev->parent->hf_size_rx,
-                                                GFP_KERNEL,
-                                                &buf_dma);
+                       buf = kmalloc(dev->parent->hf_size_rx,
+                                     GFP_KERNEL);
                        if (!buf) {
                                netdev_err(netdev,
                                           "No memory left for USB buffer\n");
                                return -ENOMEM;
                        }
 
-                       urb->transfer_dma = buf_dma;
-
                        /* fill, anchor, and submit rx urb */
                        usb_fill_bulk_urb(urb,
                                          dev->udev,
                                          buf,
                                          dev->parent->hf_size_rx,
                                          gs_usb_receive_bulk_callback, parent);
-                       urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+                       urb->transfer_flags |= URB_FREE_BUFFER;
 
                        usb_anchor_urb(urb, &parent->rx_submitted);
 
                                           "usb_submit failed (err=%d)\n", rc);
 
                                usb_unanchor_urb(urb);
-                               usb_free_coherent(dev->udev,
-                                                 sizeof(struct gs_host_frame),
-                                                 buf,
-                                                 buf_dma);
                                usb_free_urb(urb);
                                break;
                        }
 
-                       dev->rxbuf[i] = buf;
-                       dev->rxbuf_dma[i] = buf_dma;
-
                        /* Drop reference,
                         * USB core will take care of freeing it
                         */
        int rc;
        struct gs_can *dev = netdev_priv(netdev);
        struct gs_usb *parent = dev->parent;
-       unsigned int i;
 
        netif_stop_queue(netdev);
 
        parent->active_channels--;
        if (!parent->active_channels) {
                usb_kill_anchored_urbs(&parent->rx_submitted);
-               for (i = 0; i < GS_MAX_RX_URBS; i++)
-                       usb_free_coherent(dev->udev,
-                                         sizeof(struct gs_host_frame),
-                                         dev->rxbuf[i],
-                                         dev->rxbuf_dma[i]);
        }
 
        /* Stop sending URBs */