X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx4%2Fmlx4_flow.c;h=86bac1bc29f79dae36e8f50aaca4358ed09c4b75;hb=a9b3568e73c197a2e87223d62b666adbcefe6c1b;hp=7a6097faf5b4674e77dd8acbbd1799394c57d6cd;hpb=d8a4baafe8756ce95e12deac89599d74e53e27a1;p=dpdk.git diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 7a6097faf5..86bac1bc29 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -1342,6 +1342,7 @@ next_vlan: assert(flow->ibv_attr->type == IBV_FLOW_ATTR_NORMAL); assert(flow->ibv_attr->num_of_specs == 1); assert(eth->type == IBV_FLOW_SPEC_ETH); + assert(flow->rss); if (rule_vlan && (eth->val.vlan_tag != *rule_vlan || eth->mask.vlan_tag != RTE_BE16(0x0fff))) @@ -1354,8 +1355,13 @@ next_vlan: eth->val.src_mac[j] != UINT8_C(0x00) || eth->mask.src_mac[j] != UINT8_C(0x00)) break; - if (j == sizeof(mac->addr_bytes)) - break; + if (j != sizeof(mac->addr_bytes)) + continue; + if (flow->rss->queues != queues || + memcmp(flow->rss->queue_id, rss_conf->queue, + queues * sizeof(flow->rss->queue_id[0]))) + continue; + break; } if (!flow || !flow->internal) { /* Not found, create a new flow rule. */ @@ -1389,6 +1395,13 @@ next_vlan: break; } } + if (flow && flow->internal) { + assert(flow->rss); + if (flow->rss->queues != queues || + memcmp(flow->rss->queue_id, rss_conf->queue, + queues * sizeof(flow->rss->queue_id[0]))) + flow = NULL; + } if (!flow || !flow->internal) { /* Not found, create a new flow rule. */ if (priv->dev->data->promiscuous) {