USB: WUSBCORE: Use usb_init_urb instead of creating the URB manually
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / usb / wusbcore / wa-xfer.c
index 956aab5..86dd3b6 100644 (file)
@@ -125,10 +125,13 @@ struct wa_seg {
        u8 xfer_extra[];                /* xtra space for xfer_hdr_ctl */
 };
 
-static void wa_seg_init(struct wa_seg *seg)
+static inline void wa_seg_init(struct wa_seg *seg)
 {
-       /* usb_init_urb() repeats a lot of work, so we do it here */
-       kref_init(&seg->urb.kref);
+       usb_init_urb(&seg->urb);
+
+       /* set the remaining memory to 0. */
+       memset(((void *)seg) + sizeof(seg->urb), 0,
+               sizeof(*seg) - sizeof(seg->urb));
 }
 
 /*
@@ -731,9 +734,9 @@ static int __wa_xfer_setup_segs(struct wa_xfer *xfer, size_t xfer_hdr_size)
        buf_itr = 0;
        buf_size = xfer->urb->transfer_buffer_length;
        for (cnt = 0; cnt < xfer->segs; cnt++) {
-               seg = xfer->seg[cnt] = kzalloc(alloc_size, GFP_ATOMIC);
+               seg = xfer->seg[cnt] = kmalloc(alloc_size, GFP_ATOMIC);
                if (seg == NULL)
-                       goto error_seg_kzalloc;
+                       goto error_seg_kmalloc;
                wa_seg_init(seg);
                seg->xfer = xfer;
                seg->index = cnt;
@@ -807,7 +810,7 @@ error_sg_alloc:
 error_dto_alloc:
        kfree(xfer->seg[cnt]);
        cnt--;
-error_seg_kzalloc:
+error_seg_kmalloc:
        /* use the fact that cnt is left at were it failed */
        for (; cnt >= 0; cnt--) {
                if (xfer->seg[cnt] && xfer->is_inbound == 0) {