Hm, since attaches are not allowed, here is the patch as text.. And.. what is the correct way to submit a patch? because I suspect that just copy and paste will not work
Dmitry ________________________________________ if between "eop = tx_ring->buffer_info[i].next_to_watch" and check for DD-status CPU is interrupted and another CPU queues send and hardware completes the send, then we next_to_watch changes and we go inside cycle with invalid eop with buffer_info->skb NULL. The solution is to reread eop at after DD-check. Signed-off-by: Dmitry Skorodumov <sdmi...@parallels.com> diff -r -p -u a/src/e1000_main.c b/src/e1000_main.c --- a/src/e1000_main.c 2011-01-13 02:33:38.000000000 +0300 +++ b/src/e1000_main.c 2011-03-24 15:35:58.000000000 +0300 @@ -3557,6 +3557,11 @@ static bool e1000_clean_tx_irq(struct e1 eop_desc = E1000_TX_DESC(*tx_ring, eop); while (eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) { + smp_rmb(); + /* eop could change between read and DD-check */ + if (eop != tx_ring->buffer_info[i].next_to_watch) + goto cont_loop; + for (cleaned = false; !cleaned; ) { tx_desc = E1000_TX_DESC(*tx_ring, i); buffer_info = &tx_ring->buffer_info[i]; @@ -3581,7 +3586,7 @@ static bool e1000_clean_tx_irq(struct e1 tx_desc->upper.data = 0; E1000_TX_DESC_INC(tx_ring,i); } - +cont_loop: eop = tx_ring->buffer_info[i].next_to_watch; eop_desc = E1000_TX_DESC(*tx_ring, eop); #ifdef CONFIG_E1000_NAPI ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired