#18922: eth1 (ag71xx): transmit queue 0 timed out
------------------------+--------------------------------
  Reporter:  fpv2000@…  |      Owner:  developers
      Type:  defect     |     Status:  new
  Priority:  normal     |  Milestone:  Chaos Calmer 15.05
 Component:  kernel     |    Version:  Trunk
Resolution:             |   Keywords:
------------------------+--------------------------------

Comment (by anonymous):

 Update: the patch in the previous comment wasn't sufficient to solve the
 issue, but this *did*:
 {{{
 diff --git
 a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
 b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
 index dc77699..28669ef 100644
 ---
 a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
 +++
 b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
 @@ -489,6 +489,8 @@ static void ag71xx_hw_init(struct ag71xx *ag)
         ag71xx_hw_setup(ag);

         ag71xx_dma_reset(ag);
 +
 +       printk("ag71xx_hw_init\n");
  }

  static void ag71xx_fast_reset(struct ag71xx *ag)
 @@ -865,13 +867,19 @@ static void ag71xx_restart_work_func(struct
 work_struct *work)
  {
         struct ag71xx *ag = container_of(work, struct ag71xx,
 restart_work);

 +#if 0
         if (ag71xx_get_pdata(ag)->is_ar724x) {
                 ag->link = 0;
                 ag71xx_link_adjust(ag);
                 return;
         }
 +#endif

         ag71xx_stop(ag->dev);
 +
 +       if (ag71xx_get_pdata(ag)->is_ar724x)
 +               ag71xx_hw_init(ag);
 +
         ag71xx_open(ag->dev);
  }

 @@ -914,7 +922,7 @@ static int ag71xx_tx_packets(struct ag71xx *ag)
                 struct sk_buff *skb = ring->buf[i].skb;

                 if (!ag71xx_desc_empty(desc)) {
 -                       if (pdata->is_ar7240 &&
 +                       if (pdata->is_ar724x &&
                             ag71xx_check_dma_stuck(ag,
 ring->buf[i].timestamp))
                                 schedule_work(&ag->restart_work);
                         break;

 }}}

 Log snippet:
 {{{
 [66994.010000] ------------[ cut here ]------------
 [66994.010000] WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:303
 dev_watchdog+0x1d8/0x25c()
 [66994.020000] NETDEV WATCHDOG: eth1 (ag71xx): transmit queue 0 timed out
 [66994.020000] Modules linked in: ath9k ath9k_common pppoe ppp_async
 iptable_nat ath9k_hw ath pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6
 nf_conntrack_ipv4 mac80211 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time
 xt_tcpudp xt_tcpmss xt_statistic xt_state xt_recent xt_nat xt_multiport
 xt_mark xt_mac xt_limit xt_length xt_id xt_hl xt_helper xt_ecn xt_dscp
 xt_conntrack xt_connmark xt_connlimit xt_connbytes xt_comment xt_TCPMSS
 xt_REDIRECT xt_LOG xt_HL xt_DSCP xt_CT xt_CLASSIFY slhc nf_reject_ipv4
 nf_nat_masquerade_ipv4 nf_nat_ftp nf_nat nf_log_ipv4 nf_defrag_ipv6
 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack_ftp nf_conntrack
 iptable_raw iptable_mangle iptable_filter ipt_ECN ip_tables crc_ccitt
 compat fuse act_ipt em_nbyte sch_teql sch_prio sch_pie sch_codel sch_gred
 em_meta sch_htb cls_basic em_text sch_tbf sch_red sch_sfq sch_fq
 act_police em_cmp sch_dsmark act_skbedit act_mirred em_u32 cls_u32
 cls_tcindex cls_flow cls_route cls_fw sch_hfsc sch_ingress ledtrig_usbdev
 ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_raw
 ip6table_mangle ip6table_filter ip6_tables x_tables ifb zram
 lzo_decompress lzo_compress lz4_decompress lz4_compress zsmalloc ipv6 arc4
 crypto_blkcipher usb_storage ohci_platform ohci_hcd ehci_platform ehci_hcd
 sd_mod scsi_mod gpio_button_hotplug ext4 jbd2 mbcache usbcore nls_base
 usb_common crc16 crypto_hash
 [66994.140000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.18.23 #1
 [66994.150000] Stack : 00000000 00000000 00000000 00000000 803b4292
 00000032 00000000 8024d7e8
 [66994.150000]    00000001 00000059 80305cd8 8035c9e3 00000000 803b34d0
 8035cd18 00000059
 [66994.150000]    803b3918 00000001 00000004 800a35cc 00000003 800803bc
 0000012f 00000059
 [66994.150000]    803092d0 80357c6c 00000000 00000000 00000000 00000000
 00000000 00000000
 [66994.150000]    00000000 00000000 00000000 00000000 00000000 00000000
 00000000 00000000
 [66994.150000]    ...
 [66994.190000] Call Trace:
 [66994.190000] [<80070fe0>] show_stack+0x50/0x84
 [66994.190000] [<800804c4>] warn_slowpath_common+0x84/0xb4
 [66994.200000] [<80080520>] warn_slowpath_fmt+0x2c/0x38
 [66994.200000] [<8024d7e8>] dev_watchdog+0x1d8/0x25c
 [66994.210000] [<800ab068>] call_timer_fn.isra.38+0x24/0x84
 [66994.210000] [<800ab880>] run_timer_softirq+0x1bc/0x1f8
 [66994.220000] [<800829c4>] __do_softirq+0xf8/0x230
 [66994.220000] [<80082d30>] irq_exit+0x54/0x70
 [66994.230000] [<80060830>] ret_from_irq+0x0/0x4
 [66994.230000] [<80060a80>] __r4k_wait+0x20/0x40
 [66994.240000] [<8009f564>] cpu_startup_entry+0xf0/0x13c
 [66994.240000] [<80375b5c>] start_kernel+0x42c/0x444
 [66994.250000]
 [66994.250000] ---[ end trace 46214145c634dfe5 ]---
 [66994.250000] eth1: tx timeout
 [66994.260000] eth1: link down
 [66994.940000] ag71xx_hw_init
 [66997.650000] eth1: link up (100Mbps/Half duplex)
 }}}

 With the above patch, a tx timeout triggered while I was simultaneously
 downloading via bittorrent *and* via http, and the http download was not
 interrupted during recovery from the timeout event.

 I'll try another build that only disables that same code block in the
 ag71xx_restart_work_func, as I'm not sure if it was the ag71xx_hw_init
 addition that was the reason for the successful recovery. This may take
 some time, as it took a *long time* to trigger the bug.

--
Ticket URL: <https://dev.openwrt.org/ticket/18922#comment:3>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets

Reply via email to