Bug 280 - X710 PF Reset Issue with DPDK VF Driver
Summary: X710 PF Reset Issue with DPDK VF Driver
Status: CONFIRMED
Alias: None
Product: DPDK
Classification: Unclassified
Component: doc (show other bugs)
Version: 19.05
Hardware: Other Linux
: Normal major
Target Milestone: ---
Assignee: beilei.xing
URL:
Depends on:
Blocks:
 
Reported: 2019-05-16 12:40 CEST by Vipin Varghese
Modified: 2019-07-15 21:02 CEST (History)
2 users (show)



Attachments

Description Vipin Varghese 2019-05-16 12:40:05 CEST
LOGS:
[93011.069202] i40e 0000:82:00.2: VF 11 successfully unset unicast promiscuous mode
[95318.521782] i40e 0000:82:00.2: Malicious Driver Detection event 0x00 on TX queue 141 PF number 0x02 VF number 0x4d
[95318.521787] i40e 0000:82:00.2: TX driver issue detected, PF reset issued
[95318.521801] i40e 0000:82:00.2: TX driver issue detected on VF 13
[95318.521803] i40e 0000:82:00.2: Too many MDD events on VF 13, disabled
[95318.521804] i40e 0000:82:00.2: Use PF Control I/F to re-enable the VF
[95895.281551] i40e 0000:82:00.2: read: 0x000e648c = 0x0007f3fd
[96380.723377] i40e 0000:82:00.2: VF 13 successfully set multicast promiscuous mode
[96380.723382] i40e 0000:82:00.2: VF 13 successfully unset unicast promiscuous mode
[96380.787648] i40e 0000:82:00.3: VF 15 successfully set multicast promiscuous mode
[96380.787650] i40e 0000:82:00.3: VF 15 successfully unset unicast promiscuous mode

ROOT CAUSE: Sending incorrect packet size through TX queue causes the MDD failure.

Solution:
static uint16_t
precheck_pkts(uint8_t port __rte_unused, uint16_t qidx __rte_unused,
                struct rte_mbuf **pkts, uint16_t nb_pkts, void *_ __rte_unused)
{
        if (unlikely(nb_pkts == 0))
                return nb_pkts;

        int i, j, k;
        struct rte_mbuf *ptr;
        struct rte_mbuf *replace[nb_pkts];

        for (i = 0, j = 0, k = 0; i < nb_pkts; i++)
        {
                ptr = pkts[i];

                if (ptr->pkt_len < 17) {
                        replace[k++] = ptr;
                } else if (!(ptr->ol_flags & PKT_TX_TCP_SEG)) {
                        if (ptr->nb_segs > 8 ||
                                        ptr->pkt_len > 9728)
                                replace[k++] = ptr;
                        else
                                pkts[j++] = ptr;
                } else if (ptr->nb_segs > 8 ||
                                ptr->tso_segsz < 256 ||
                                ptr->tso_segsz > 9674 ||
                                ptr->pkt_len > 262144) {
                        replace[k++] = ptr;
                } else {
                        pkts[j++] = ptr;
                }
        }

        for (i = 0; i < k; i++)
                rte_pktmbuf_free(replace[i]);

        //printf(" Port (%u) Queue (%u) nb_pkts - old (%u) new (%u) drop (%u)\n", port, qidx, nb_pkts, j, k);
        return j;
}

issue: neither `DPDK Release 19.05` nor `Known Issues and Limitations in Legacy Releases`
Comment 1 Ajit Khaparde 2019-07-15 21:02:36 CEST
Can you please take a look at this well? Thanks

Note You need to log in before you can comment on or make changes to this bug.