USB-CDC: called handle_interrupts inside usb_eth_send
PATCH v2 2/2 USB-CDC: called handle_interrupts inside usb_eth_send
The patch removes an endless loop in the usb_eth_send if the tx_complete is not called before going in the loop. The driver interrupt routine is called allowing the driver to check if the TX is completed.
---
Changes from V1:
- Comments by Remy Bohmer: moved usb_ep_queue inside timeout to not break at91 code
drivers/usb/gadget/ether.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
drivers/usb/gadget/ether.c +10 -2
@@ -1808,6 +1808,8 @@ static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int lestruct usb_request *req =NULL ;struct eth_dev *dev = &l_ethdev; +unsigned long ts; +unsigned long timeout =USB_CONNECT_TIMEOUT ;dprintf ("%s:...\n" ,__func__); req = dev->tx_req;
@@ -1833,13 +1835,19 @@ static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int le#endif dev->tx_qlen=1 ; + ts =get_timer (0 ); + packet_sent=0 ; retval =usb_ep_queue (dev->in_ep, req,GFP_ATOMIC );if (!retval) -dprintf ("%s: packet queued\n" ,__func__); +debug ("%s: packet queued\n" ,__func__);while (!packet_sent) { - packet_sent=0 ; +if (get_timer (ts) > timeout) { +printf ("timeout sending packets to usb ethernet\n" ); +return -1 ; + } +usb_gadget_handle_interrupts (); }return 0 ;
Signature · 1 line
1.6.3.3
PATCH v2 2/2 USB-CDC: called handle_interrupts inside usb_eth_send
Quoted 7 lines · Stefano Babic
The patch removes an endless loop in the
usb_eth_sendif thetx_completeis not called before going in the loop. The driver interrupt routine is called allowing the driver to check if the TX is completed.Signed-off-by Stefano Babic <[email protected]>---
[...]
drivers/usb/gadget/ether.c static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int le · line 1812
Quoted 10 lines
drivers/usb/gadget/ether.c +2
-0@@ -1808,6 +1808,8 @@ static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int lestruct usb_request *req =NULL ;struct eth_dev *dev = &l_ethdev; +unsigned long ts; +unsigned long timeout =USB_CONNECT_TIMEOUT ;
Please keep an empty line after the declaration block.
drivers/usb/gadget/ether.c static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int le · line 1839
Quoted 6 lines
drivers/usb/gadget/ether.c +2
-0@@ -1833,13 +1835,19 @@ static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int le#endif dev->tx_qlen=1 ; + ts =get_timer (0 ); + packet_sent=0 ;
Please keep the style consistent and add spaces before/after =.
drivers/usb/gadget/ether.c static int usb_eth_send(struct eth_device* netdev, volatile void* packet, int le · line 1847
Quoted 10 lines
drivers/usb/gadget/ether.c +3
-2retval =usb_ep_queue (dev->in_ep, req,GFP_ATOMIC );if (!retval) -dprintf ("%s: packet queued\n" ,__func__); +debug ("%s: packet queued\n" ,__func__);while (!packet_sent) { - packet_sent=0 ; +if (get_timer (ts) > timeout) { +printf ("timeout sending packets to usb ethernet\n" );
Please be consistent and remove space before paren. U-Boot nwo seems to
follow the Linux coding style...
WBR, Sergei
PATCH v2 2/2 USB-CDC: called handle_interrupts inside usb_eth_send
In reply to Stefano BabicHi,
2010/8/14 Stefano Babic <[email protected]>:
Quoted 11 lines
The patch removes an endless loop ?in the
usb_eth_sendif thetx_completeis not called before going in the loop. The driver interrupt routine is called allowing the driver to check if the TX is completed.Signed-off-by Stefano Babic <[email protected]>---
Changes from V1:
- Comments by Remy Bohmer: movedusb_ep_queueinside timeout to not break at91 code
Sorry, patch does not apply any more after applying the series from Vitaly yesterday. please rebase.
Kind regards,
Remy
PATCH v2 2/2 USB-CDC: called handle_interrupts inside usb_eth_send
Quoted 11 lines · Remy Bohmer
Hi,
2010/8/14 Stefano Babic <[email protected]>:
Quoted 8 lines
The patch removes an endless loop in the
usb_eth_sendif thetx_completeis not called before going in the loop. The driver interrupt routine is called allowing the driver to check if the TX is completed.Signed-off-by Stefano Babic <[email protected]>---
Quoted 6 lines
Quoted 3 lines
Changes from V1:
- Comments by Remy Bohmer: movedusb_ep_queueinside timeout to not break at91 codeSorry, patch does not apply any more after applying the series from Vitaly yesterday. please rebase.
No problem, I rebase it.
Best regards,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================