@@ -578,16 +578,24 @@ static void xhci_giveback_urb_in_irq(struct xhci_hcd *xhci,
578
578
struct xhci_td * cur_td , int status , char * adjective )
579
579
{
580
580
struct usb_hcd * hcd = xhci_to_hcd (xhci );
581
+ struct urb * urb ;
582
+ struct urb_priv * urb_priv ;
581
583
582
- cur_td -> urb -> hcpriv = NULL ;
583
- usb_hcd_unlink_urb_from_ep ( hcd , cur_td -> urb ) ;
584
- xhci_dbg ( xhci , "Giveback %s URB %p\n" , adjective , cur_td -> urb ) ;
584
+ urb = cur_td -> urb ;
585
+ urb_priv = urb -> hcpriv ;
586
+ urb_priv -> td_cnt ++ ;
585
587
586
- spin_unlock (& xhci -> lock );
587
- usb_hcd_giveback_urb (hcd , cur_td -> urb , status );
588
- kfree (cur_td );
589
- spin_lock (& xhci -> lock );
590
- xhci_dbg (xhci , "%s URB given back\n" , adjective );
588
+ /* Only giveback urb when this is the last td in urb */
589
+ if (urb_priv -> td_cnt == urb_priv -> length ) {
590
+ usb_hcd_unlink_urb_from_ep (hcd , urb );
591
+ xhci_dbg (xhci , "Giveback %s URB %p\n" , adjective , urb );
592
+
593
+ spin_unlock (& xhci -> lock );
594
+ usb_hcd_giveback_urb (hcd , urb , status );
595
+ xhci_urb_free_priv (xhci , urb_priv );
596
+ spin_lock (& xhci -> lock );
597
+ xhci_dbg (xhci , "%s URB given back\n" , adjective );
598
+ }
591
599
}
592
600
593
601
/*
@@ -1272,6 +1280,7 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td,
1272
1280
struct urb * urb = NULL ;
1273
1281
struct xhci_ep_ctx * ep_ctx ;
1274
1282
int ret = 0 ;
1283
+ struct urb_priv * urb_priv ;
1275
1284
u32 trb_comp_code ;
1276
1285
1277
1286
slot_id = TRB_TO_SLOT_ID (event -> flags );
@@ -1325,6 +1334,7 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td,
1325
1334
td_cleanup :
1326
1335
/* Clean up the endpoint's TD list */
1327
1336
urb = td -> urb ;
1337
+ urb_priv = urb -> hcpriv ;
1328
1338
1329
1339
/* Do one last check of the actual transfer length.
1330
1340
* If the host controller said we transferred more data than
@@ -1349,7 +1359,10 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td,
1349
1359
if (!list_empty (& td -> cancelled_td_list ))
1350
1360
list_del (& td -> cancelled_td_list );
1351
1361
1352
- ret = 1 ;
1362
+ urb_priv -> td_cnt ++ ;
1363
+ /* Giveback the urb when all the tds are completed */
1364
+ if (urb_priv -> td_cnt == urb_priv -> length )
1365
+ ret = 1 ;
1353
1366
}
1354
1367
1355
1368
return ret ;
@@ -1588,6 +1601,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1588
1601
union xhci_trb * event_trb ;
1589
1602
struct urb * urb = NULL ;
1590
1603
int status = - EINPROGRESS ;
1604
+ struct urb_priv * urb_priv ;
1591
1605
struct xhci_ep_ctx * ep_ctx ;
1592
1606
u32 trb_comp_code ;
1593
1607
int ret = 0 ;
@@ -1770,6 +1784,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1770
1784
1771
1785
if (ret ) {
1772
1786
urb = td -> urb ;
1787
+ urb_priv = urb -> hcpriv ;
1773
1788
/* Leave the TD around for the reset endpoint function
1774
1789
* to use(but only if it's not a control endpoint,
1775
1790
* since we already queued the Set TR dequeue pointer
@@ -1778,7 +1793,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1778
1793
if (usb_endpoint_xfer_control (& urb -> ep -> desc ) ||
1779
1794
(trb_comp_code != COMP_STALL &&
1780
1795
trb_comp_code != COMP_BABBLE ))
1781
- kfree ( td );
1796
+ xhci_urb_free_priv ( xhci , urb_priv );
1782
1797
1783
1798
usb_hcd_unlink_urb_from_ep (xhci_to_hcd (xhci ), urb );
1784
1799
xhci_dbg (xhci , "Giveback URB %p, len = %d, "
@@ -1979,10 +1994,12 @@ static int prepare_transfer(struct xhci_hcd *xhci,
1979
1994
unsigned int stream_id ,
1980
1995
unsigned int num_trbs ,
1981
1996
struct urb * urb ,
1982
- struct xhci_td * * td ,
1997
+ unsigned int td_index ,
1983
1998
gfp_t mem_flags )
1984
1999
{
1985
2000
int ret ;
2001
+ struct urb_priv * urb_priv ;
2002
+ struct xhci_td * td ;
1986
2003
struct xhci_ring * ep_ring ;
1987
2004
struct xhci_ep_ctx * ep_ctx = xhci_get_ep_ctx (xhci , xdev -> out_ctx , ep_index );
1988
2005
@@ -1998,24 +2015,29 @@ static int prepare_transfer(struct xhci_hcd *xhci,
1998
2015
num_trbs , mem_flags );
1999
2016
if (ret )
2000
2017
return ret ;
2001
- * td = kzalloc (sizeof (struct xhci_td ), mem_flags );
2002
- if (!* td )
2003
- return - ENOMEM ;
2004
- INIT_LIST_HEAD (& (* td )-> td_list );
2005
- INIT_LIST_HEAD (& (* td )-> cancelled_td_list );
2006
2018
2007
- ret = usb_hcd_link_urb_to_ep (xhci_to_hcd (xhci ), urb );
2008
- if (unlikely (ret )) {
2009
- kfree (* td );
2010
- return ret ;
2019
+ urb_priv = urb -> hcpriv ;
2020
+ td = urb_priv -> td [td_index ];
2021
+
2022
+ INIT_LIST_HEAD (& td -> td_list );
2023
+ INIT_LIST_HEAD (& td -> cancelled_td_list );
2024
+
2025
+ if (td_index == 0 ) {
2026
+ ret = usb_hcd_link_urb_to_ep (xhci_to_hcd (xhci ), urb );
2027
+ if (unlikely (ret )) {
2028
+ xhci_urb_free_priv (xhci , urb_priv );
2029
+ urb -> hcpriv = NULL ;
2030
+ return ret ;
2031
+ }
2011
2032
}
2012
2033
2013
- (* td )-> urb = urb ;
2014
- urb -> hcpriv = (void * ) (* td );
2034
+ td -> urb = urb ;
2015
2035
/* Add this TD to the tail of the endpoint ring's TD list */
2016
- list_add_tail (& (* td )-> td_list , & ep_ring -> td_list );
2017
- (* td )-> start_seg = ep_ring -> enq_seg ;
2018
- (* td )-> first_trb = ep_ring -> enqueue ;
2036
+ list_add_tail (& td -> td_list , & ep_ring -> td_list );
2037
+ td -> start_seg = ep_ring -> enq_seg ;
2038
+ td -> first_trb = ep_ring -> enqueue ;
2039
+
2040
+ urb_priv -> td [td_index ] = td ;
2019
2041
2020
2042
return 0 ;
2021
2043
}
@@ -2154,6 +2176,7 @@ static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2154
2176
{
2155
2177
struct xhci_ring * ep_ring ;
2156
2178
unsigned int num_trbs ;
2179
+ struct urb_priv * urb_priv ;
2157
2180
struct xhci_td * td ;
2158
2181
struct scatterlist * sg ;
2159
2182
int num_sgs ;
@@ -2174,9 +2197,13 @@ static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2174
2197
2175
2198
trb_buff_len = prepare_transfer (xhci , xhci -> devs [slot_id ],
2176
2199
ep_index , urb -> stream_id ,
2177
- num_trbs , urb , & td , mem_flags );
2200
+ num_trbs , urb , 0 , mem_flags );
2178
2201
if (trb_buff_len < 0 )
2179
2202
return trb_buff_len ;
2203
+
2204
+ urb_priv = urb -> hcpriv ;
2205
+ td = urb_priv -> td [0 ];
2206
+
2180
2207
/*
2181
2208
* Don't give the first TRB to the hardware (by toggling the cycle bit)
2182
2209
* until we've finished creating all the other TRBs. The ring's cycle
@@ -2297,6 +2324,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2297
2324
struct urb * urb , int slot_id , unsigned int ep_index )
2298
2325
{
2299
2326
struct xhci_ring * ep_ring ;
2327
+ struct urb_priv * urb_priv ;
2300
2328
struct xhci_td * td ;
2301
2329
int num_trbs ;
2302
2330
struct xhci_generic_trb * start_trb ;
@@ -2342,10 +2370,13 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2342
2370
2343
2371
ret = prepare_transfer (xhci , xhci -> devs [slot_id ],
2344
2372
ep_index , urb -> stream_id ,
2345
- num_trbs , urb , & td , mem_flags );
2373
+ num_trbs , urb , 0 , mem_flags );
2346
2374
if (ret < 0 )
2347
2375
return ret ;
2348
2376
2377
+ urb_priv = urb -> hcpriv ;
2378
+ td = urb_priv -> td [0 ];
2379
+
2349
2380
/*
2350
2381
* Don't give the first TRB to the hardware (by toggling the cycle bit)
2351
2382
* until we've finished creating all the other TRBs. The ring's cycle
@@ -2431,6 +2462,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2431
2462
struct xhci_generic_trb * start_trb ;
2432
2463
int start_cycle ;
2433
2464
u32 field , length_field ;
2465
+ struct urb_priv * urb_priv ;
2434
2466
struct xhci_td * td ;
2435
2467
2436
2468
ep_ring = xhci_urb_to_transfer_ring (xhci , urb );
@@ -2458,10 +2490,13 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2458
2490
num_trbs ++ ;
2459
2491
ret = prepare_transfer (xhci , xhci -> devs [slot_id ],
2460
2492
ep_index , urb -> stream_id ,
2461
- num_trbs , urb , & td , mem_flags );
2493
+ num_trbs , urb , 0 , mem_flags );
2462
2494
if (ret < 0 )
2463
2495
return ret ;
2464
2496
2497
+ urb_priv = urb -> hcpriv ;
2498
+ td = urb_priv -> td [0 ];
2499
+
2465
2500
/*
2466
2501
* Don't give the first TRB to the hardware (by toggling the cycle bit)
2467
2502
* until we've finished creating all the other TRBs. The ring's cycle
0 commit comments