Message ID | 1406217287-4069-1-git-send-email-Dmitry.Kravkov@qlogic.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, 2014-07-24 at 18:54 +0300, Dmitry Kravkov wrote: > From: Dmitry Kravkov <Dmitry.Kravkov@qlogic.com> > > When TSO packet is transmitted additional BD w/o mapping is used > to describe the packed. The BD needs special handling in tx > completion. > > kernel: Call Trace: > kernel: <IRQ> [<ffffffff815e19ba>] dump_stack+0x19/0x1b > kernel: [<ffffffff8105dee1>] warn_slowpath_common+0x61/0x80 > kernel: [<ffffffff8105df5c>] warn_slowpath_fmt+0x5c/0x80 > kernel: [<ffffffff814a8c0d>] ? find_iova+0x4d/0x90 > kernel: [<ffffffff814ab0e2>] intel_unmap_page.part.36+0x142/0x160 > kernel: [<ffffffff814ad0e6>] intel_unmap_page+0x26/0x30 > kernel: [<ffffffffa01f55d7>] bnx2x_free_tx_pkt+0x157/0x2b0 [bnx2x] > kernel: [<ffffffffa01f8dac>] bnx2x_tx_int+0xac/0x220 [bnx2x] > kernel: [<ffffffff8101a0d9>] ? read_tsc+0x9/0x20 > kernel: [<ffffffffa01f8fdb>] bnx2x_poll+0xbb/0x3c0 [bnx2x] > kernel: [<ffffffff814d041a>] net_rx_action+0x15a/0x250 > kernel: [<ffffffff81067047>] __do_softirq+0xf7/0x290 > kernel: [<ffffffff815f3a5c>] call_softirq+0x1c/0x30 > kernel: [<ffffffff81014d25>] do_softirq+0x55/0x90 > kernel: [<ffffffff810673e5>] irq_exit+0x115/0x120 > kernel: [<ffffffff815f4358>] do_IRQ+0x58/0xf0 > kernel: [<ffffffff815e94ad>] common_interrupt+0x6d/0x6d > kernel: <EOI> [<ffffffff810bbff7>] ? clockevents_notify+0x127/0x140 > kernel: [<ffffffff814834df>] ? cpuidle_enter_state+0x4f/0xc0 > kernel: [<ffffffff81483615>] cpuidle_idle_call+0xc5/0x200 > kernel: [<ffffffff8101bc7e>] arch_cpu_idle+0xe/0x30 > kernel: [<ffffffff810b4725>] cpu_startup_entry+0xf5/0x290 > kernel: [<ffffffff815cfee1>] start_secondary+0x265/0x27b > kernel: ---[ end trace 11aa7726f18d7e80 ]--- > > Reported-by: Yulong Pei <ypei@redhat.com> > Cc: Michal Schmidt <mschmidt@redhat.com> > Signed-off-by: Dmitry Kravkov <Dmitry.Kravkov@qlogic.com> > --- How old is this bug ? Can you point original commit adding it ? Thanks ! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Dmitry Kravkov <Dmitry.Kravkov@qlogic.com> Date: Thu, 24 Jul 2014 21:48:34 +0000 > >> -----Original Message----- >> From: Eric Dumazet [mailto:eric.dumazet@gmail.com] >> Sent: Thursday, July 24, 2014 7:38 PM >> To: Dmitry Kravkov >> Cc: netdev; David Miller; ypei@redhat.com; mschmidt@redhat.com; Dmitry >> Kravkov >> Subject: Re: [PATCH RESEND] bnx2x: fix crash during TSO tunneling >> >> On Thu, 2014-07-24 at 18:54 +0300, Dmitry Kravkov wrote: >> > From: Dmitry Kravkov <Dmitry.Kravkov@qlogic.com> >> > >> > When TSO packet is transmitted additional BD w/o mapping is used to >> > describe the packed. The BD needs special handling in tx completion. ... >> > Reported-by: Yulong Pei <ypei@redhat.com> >> > Cc: Michal Schmidt <mschmidt@redhat.com> >> > Signed-off-by: Dmitry Kravkov <Dmitry.Kravkov@qlogic.com> >> > --- >> >> How old is this bug ? Can you point original commit adding it ? >> >> Thanks ! >> > Added with initial TSO support for tunneling back in 3.10 with > a848ade408b6bfab59d575d6c246efb20afe88e3 > "bnx2x: add CSUM and TSO support for encapsulation protocols" > and can be seen only with *_iommu=on Applied with an ppropriate "Fixes: " tag added, and queued up for -stable. Thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index 4cab09d..8206a29 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h @@ -346,6 +346,7 @@ struct sw_tx_bd { u8 flags; /* Set on the first BD descriptor when there is a split BD */ #define BNX2X_TSO_SPLIT_BD (1<<0) +#define BNX2X_HAS_SECOND_PBD (1<<1) }; struct sw_rx_page { diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 4b875da..c43e723 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -227,6 +227,12 @@ static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata, --nbd; bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + if (tx_buf->flags & BNX2X_HAS_SECOND_PBD) { + /* Skip second parse bd... */ + --nbd; + bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + } + /* TSO headers+data bds share a common mapping. See bnx2x_tx_split() */ if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) { tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd; @@ -3889,6 +3895,9 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) /* set encapsulation flag in start BD */ SET_FLAG(tx_start_bd->general_data, ETH_TX_START_BD_TUNNEL_EXIST, 1); + + tx_buf->flags |= BNX2X_HAS_SECOND_PBD; + nbd++; } else if (xmit_type & XMIT_CSUM) { /* Set PBD in checksum offload case w/o encapsulation */