X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fconfig.c;h=97020fb3d7130f632e397c82f05211d42e530278;hb=45c03bbe082c35bfc9ac8f231d2946503922efb9;hp=b07376af9a7dbc0ab45b7b16821e9cc73c074a8d;hpb=8f3c4176fc11ed10dac9384a33ca470f3ef52c6a;p=dpdk.git diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index b07376af9a..97020fb3d7 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1049,15 +1049,24 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, enum item_spec_type type) { size_t size = 0; - const void *item_spec = + const void *data = type == ITEM_SPEC ? item->spec : type == ITEM_LAST ? item->last : type == ITEM_MASK ? item->mask : NULL; - if (!item_spec) + if (!item->spec || !data) goto empty; switch (item->type) { + union { + const struct rte_flow_item_raw *raw; + } spec; + union { + const struct rte_flow_item_raw *raw; + } last; + union { + const struct rte_flow_item_raw *raw; + } mask; union { const struct rte_flow_item_raw *raw; } src; @@ -1067,12 +1076,21 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, size_t off; case RTE_FLOW_ITEM_TYPE_RAW: - src.raw = item_spec; + spec.raw = item->spec; + last.raw = item->last ? item->last : item->spec; + mask.raw = item->mask ? item->mask : &rte_flow_item_raw_mask; + src.raw = data; dst.raw = buf; off = RTE_ALIGN_CEIL(sizeof(struct rte_flow_item_raw), sizeof(*src.raw->pattern)); - size = off + ((const struct rte_flow_item_raw *)item->spec)-> - length * sizeof(*src.raw->pattern); + if (type == ITEM_SPEC || + (type == ITEM_MASK && + ((spec.raw->length & mask.raw->length) >= + (last.raw->length & mask.raw->length)))) + size = spec.raw->length & mask.raw->length; + else + size = last.raw->length & mask.raw->length; + size = off + size * sizeof(*src.raw->pattern); if (dst.raw) { memcpy(dst.raw, src.raw, sizeof(*src.raw)); dst.raw->pattern = memcpy((uint8_t *)dst.raw + off, @@ -1083,7 +1101,7 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, default: size = flow_item[item->type].size; if (buf) - memcpy(buf, item_spec, size); + memcpy(buf, data, size); break; } empty: @@ -1821,6 +1839,11 @@ rxtx_config_display(void) struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf[0]; uint16_t *nb_rx_desc = &ports[pid].nb_rx_desc[0]; uint16_t *nb_tx_desc = &ports[pid].nb_tx_desc[0]; + uint16_t nb_rx_desc_tmp; + uint16_t nb_tx_desc_tmp; + struct rte_eth_rxq_info rx_qinfo; + struct rte_eth_txq_info tx_qinfo; + int32_t rc; /* per port config */ printf(" port %d: RX queue number: %d Tx queue number: %d\n", @@ -1832,9 +1855,15 @@ rxtx_config_display(void) /* per rx queue config only for first queue to be less verbose */ for (qid = 0; qid < 1; qid++) { + rc = rte_eth_rx_queue_info_get(pid, qid, &rx_qinfo); + if (rc) + nb_rx_desc_tmp = nb_rx_desc[qid]; + else + nb_rx_desc_tmp = rx_qinfo.nb_desc; + printf(" RX queue: %d\n", qid); printf(" RX desc=%d - RX free threshold=%d\n", - nb_rx_desc[qid], rx_conf[qid].rx_free_thresh); + nb_rx_desc_tmp, rx_conf[qid].rx_free_thresh); printf(" RX threshold registers: pthresh=%d hthresh=%d " " wthresh=%d\n", rx_conf[qid].rx_thresh.pthresh, @@ -1846,9 +1875,15 @@ rxtx_config_display(void) /* per tx queue config only for first queue to be less verbose */ for (qid = 0; qid < 1; qid++) { + rc = rte_eth_tx_queue_info_get(pid, qid, &tx_qinfo); + if (rc) + nb_tx_desc_tmp = nb_tx_desc[qid]; + else + nb_tx_desc_tmp = tx_qinfo.nb_desc; + printf(" TX queue: %d\n", qid); printf(" TX desc=%d - TX free threshold=%d\n", - nb_tx_desc[qid], tx_conf[qid].tx_free_thresh); + nb_tx_desc_tmp, tx_conf[qid].tx_free_thresh); printf(" TX threshold registers: pthresh=%d hthresh=%d " " wthresh=%d\n", tx_conf[qid].tx_thresh.pthresh,