X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fquota_watermark%2Fqw%2Fmain.c;h=c55d38744fa74bc3aadfb954e6f5bffd3cbc17d8;hb=14de8734c401457dab76be917852417203f9bfb3;hp=2dcddea6c215cbba78dde875c4bdddc41f8a5989;hpb=ecaed092b677d09b4b8645a3ddc38aac0ea929f7;p=dpdk.git diff --git a/examples/quota_watermark/qw/main.c b/examples/quota_watermark/qw/main.c index 2dcddea6c2..c55d38744f 100644 --- a/examples/quota_watermark/qw/main.c +++ b/examples/quota_watermark/qw/main.c @@ -1,34 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation */ #include @@ -67,14 +38,15 @@ struct ether_fc_frame { int *quota; unsigned int *low_watermark; +unsigned int *high_watermark; -uint8_t port_pairs[RTE_MAX_ETHPORTS]; +uint16_t port_pairs[RTE_MAX_ETHPORTS]; struct rte_ring *rings[RTE_MAX_LCORE][RTE_MAX_ETHPORTS]; struct rte_mempool *mbuf_pool; -static void send_pause_frame(uint8_t port_id, uint16_t duration) +static void send_pause_frame(uint16_t port_id, uint16_t duration) { struct rte_mbuf *mbuf; struct ether_fc_frame *pause_frame; @@ -154,10 +126,11 @@ receive_stage(__attribute__((unused)) void *args) { int i, ret; - uint8_t port_id; + uint16_t port_id; uint16_t nb_rx_pkts; unsigned int lcore_id; + unsigned int free; struct rte_mbuf *pkts[MAX_PKT_QUOTA]; struct rte_ring *ring; @@ -189,13 +162,13 @@ receive_stage(__attribute__((unused)) void *args) nb_rx_pkts = rte_eth_rx_burst(port_id, 0, pkts, (uint16_t) *quota); ret = rte_ring_enqueue_bulk(ring, (void *) pkts, - nb_rx_pkts); - if (ret == -EDQUOT) { + nb_rx_pkts, &free); + if (RING_SIZE - free > *high_watermark) { ring_state[port_id] = RING_OVERLOADED; send_pause_frame(port_id, 1337); } - else if (ret == -ENOBUFS) { + if (ret == 0) { /* * Return mbufs to the pool, @@ -208,15 +181,16 @@ receive_stage(__attribute__((unused)) void *args) } } -static void +static int pipeline_stage(__attribute__((unused)) void *args) { int i, ret; int nb_dq_pkts; - uint8_t port_id; + uint16_t port_id; unsigned int lcore_id, previous_lcore_id; + unsigned int free; void *pkts[MAX_PKT_QUOTA]; struct rte_ring *rx, *tx; @@ -253,11 +227,12 @@ pipeline_stage(__attribute__((unused)) void *args) continue; /* Enqueue them on tx */ - ret = rte_ring_enqueue_bulk(tx, pkts, nb_dq_pkts); - if (ret == -EDQUOT) + ret = rte_ring_enqueue_bulk(tx, pkts, + nb_dq_pkts, &free); + if (RING_SIZE - free > *high_watermark) ring_state[port_id] = RING_OVERLOADED; - else if (ret == -ENOBUFS) { + if (ret == 0) { /* * Return mbufs to the pool, @@ -268,15 +243,17 @@ pipeline_stage(__attribute__((unused)) void *args) } } } + + return 0; } -static void +static int send_stage(__attribute__((unused)) void *args) { uint16_t nb_dq_pkts; - uint8_t port_id; - uint8_t dest_port_id; + uint16_t port_id; + uint16_t dest_port_id; unsigned int lcore_id, previous_lcore_id; @@ -312,6 +289,8 @@ send_stage(__attribute__((unused)) void *args) /* TODO: Check if nb_dq_pkts == nb_tx_pkts? */ } } + + return 0; } int @@ -320,9 +299,9 @@ main(int argc, char **argv) int ret; unsigned int lcore_id, master_lcore_id, last_lcore_id; - uint8_t port_id; + uint16_t port_id; - rte_set_log_level(RTE_LOG_INFO); + rte_log_set_global_level(RTE_LOG_INFO); ret = rte_eal_init(argc, argv); if (ret < 0) @@ -371,15 +350,13 @@ main(int argc, char **argv) if (is_bit_set(port_id, portmask)) init_ring(lcore_id, port_id); - /* typecast is a workaround for GCC 4.3 bug */ - rte_eal_remote_launch((int (*)(void *))pipeline_stage, + rte_eal_remote_launch(pipeline_stage, NULL, lcore_id); } } /* Start send_stage() on the last slave core */ - /* typecast is a workaround for GCC 4.3 bug */ - rte_eal_remote_launch((int (*)(void *))send_stage, NULL, last_lcore_id); + rte_eal_remote_launch(send_stage, NULL, last_lcore_id); /* Start receive_stage() on the master core */ receive_stage(NULL);