Date: Thu, 5 Sep 2013 15:30:01 GMT From: "Charbon, Julien" <jcharbon@verisign.com> To: freebsd-net@FreeBSD.org Subject: Re: kern/176446: [netinet] [patch] Concurrency in ixgbe driving out-of-order packet process and spurious RST Message-ID: <201309051530.r85FU1uo006945@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/176446; it has been noted by GNATS. From: "Charbon, Julien" <jcharbon@verisign.com> To: bug-followup@freebsd.org, jcharbon@verisign.com Cc: John Baldwin <jhb@freebsd.org> Subject: Re: kern/176446: [netinet] [patch] Concurrency in ixgbe driving out-of-order packet process and spurious RST Date: Thu, 05 Sep 2013 15:05:15 +0200 This is a multi-part message in MIME format. --------------090007000606090509060801 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Just a PR update: This issue is fixed in releng/9.2 (since 9.2-RC2 and later), especially with these commits: - Fix local timer watchdog using taskque_enqueue(&que->que_task) instead of taskqueue_enqueue(&txr->txq_task)(one line change in ixgbe_local_timer()): http://svnweb.freebsd.org/base?view=revision&revision=251964 - Not calling (and then remove) ixgbe_rearm_queues(): http://svnweb.freebsd.org/base?view=revision&revision=253865 These changes did not reach (yet) stable/8. Joined the current patch for releng/8.4. Thanks to John Balwin for accepting and pushing these changes. -- Julien Charbon --------------090007000606090509060801 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="releng-8.4.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="releng-8.4.patch" diff --git a/sys/dev/ixgbe/ixgbe.c b/sys/dev/ixgbe/ixgbe.c index df37621..9a00517 100644 --- a/sys/dev/ixgbe/ixgbe.c +++ b/sys/dev/ixgbe/ixgbe.c @@ -1396,23 +1396,6 @@ ixgbe_disable_queue(struct adapter *adapter, u32 vector) } } -static inline void -ixgbe_rearm_queues(struct adapter *adapter, u64 queues) -{ - u32 mask; - - if (adapter->hw.mac.type == ixgbe_mac_82598EB) { - mask = (IXGBE_EIMS_RTX_QUEUE & queues); - IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS, mask); - } else { - mask = (queues & 0xFFFFFFFF); - IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(0), mask); - mask = (queues >> 32); - IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(1), mask); - } -} - - static void ixgbe_handle_que(void *context, int pending) { @@ -2046,14 +2029,13 @@ ixgbe_local_timer(void *arg) (paused == 0)) ++hung; else if (txr->queue_status == IXGBE_QUEUE_WORKING) - taskqueue_enqueue(que->tq, &que->que_task); + taskqueue_enqueue(que->tq, &txr->txq_task); } /* Only truely watchdog if all queues show hung */ if (hung == adapter->num_tx_queues) goto watchdog; out: - ixgbe_rearm_queues(adapter, adapter->que_mask); callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter); return; @@ -4559,7 +4541,6 @@ next_desc: ** Schedule another interrupt if so. */ if ((staterr & IXGBE_RXD_STAT_DD) != 0) { - ixgbe_rearm_queues(adapter, (u64)(1 << que->msix)); return (TRUE); } --------------090007000606090509060801--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309051530.r85FU1uo006945>