git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
examples/l3fwd-power: exit on power lib init failure
[dpdk.git]
/
examples
/
l3fwd-power
/
main.c
diff --git
a/examples/l3fwd-power/main.c
b/examples/l3fwd-power/main.c
index
8ddc9ce
..
be50ec0
100644
(file)
--- a/
examples/l3fwd-power/main.c
+++ b/
examples/l3fwd-power/main.c
@@
-238,8
+238,7
@@
static struct lcore_params lcore_params_array_default[] = {
};
struct lcore_params *lcore_params = lcore_params_array_default;
};
struct lcore_params *lcore_params = lcore_params_array_default;
-uint16_t nb_lcore_params = sizeof(lcore_params_array_default) /
- sizeof(lcore_params_array_default[0]);
+uint16_t nb_lcore_params = RTE_DIM(lcore_params_array_default);
static struct rte_eth_conf port_conf = {
.rxmode = {
static struct rte_eth_conf port_conf = {
.rxmode = {
@@
-281,7
+280,7
@@
struct ipv4_5tuple {
uint16_t port_dst;
uint16_t port_src;
uint8_t proto;
uint16_t port_dst;
uint16_t port_src;
uint8_t proto;
-} __
attribute__((__packed__))
;
+} __
rte_packed
;
struct ipv6_5tuple {
uint8_t ip_dst[IPV6_ADDR_LEN];
struct ipv6_5tuple {
uint8_t ip_dst[IPV6_ADDR_LEN];
@@
-289,7
+288,7
@@
struct ipv6_5tuple {
uint16_t port_dst;
uint16_t port_src;
uint8_t proto;
uint16_t port_dst;
uint16_t port_src;
uint8_t proto;
-} __
attribute__((__packed__))
;
+} __
rte_packed
;
struct ipv4_l3fwd_route {
struct ipv4_5tuple key;
struct ipv4_l3fwd_route {
struct ipv4_5tuple key;
@@
-326,12
+325,6
@@
static lookup_struct_t *ipv6_l3fwd_lookup_struct[NB_SOCKETS];
#define L3FWD_HASH_ENTRIES 1024
#define L3FWD_HASH_ENTRIES 1024
-#define IPV4_L3FWD_NUM_ROUTES \
- (sizeof(ipv4_l3fwd_route_array) / sizeof(ipv4_l3fwd_route_array[0]))
-
-#define IPV6_L3FWD_NUM_ROUTES \
- (sizeof(ipv6_l3fwd_route_array) / sizeof(ipv6_l3fwd_route_array[0]))
-
static uint16_t ipv4_l3fwd_out_if[L3FWD_HASH_ENTRIES] __rte_cache_aligned;
static uint16_t ipv6_l3fwd_out_if[L3FWD_HASH_ENTRIES] __rte_cache_aligned;
#endif
static uint16_t ipv4_l3fwd_out_if[L3FWD_HASH_ENTRIES] __rte_cache_aligned;
static uint16_t ipv6_l3fwd_out_if[L3FWD_HASH_ENTRIES] __rte_cache_aligned;
#endif
@@
-354,9
+347,6
@@
static struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
{RTE_IPV4(8,1,1,0), 24, 7},
};
{RTE_IPV4(8,1,1,0), 24, 7},
};
-#define IPV4_L3FWD_NUM_ROUTES \
- (sizeof(ipv4_l3fwd_route_array) / sizeof(ipv4_l3fwd_route_array[0]))
-
#define IPV4_L3FWD_LPM_MAX_RULES 1024
typedef struct rte_lpm lookup_struct_t;
#define IPV4_L3FWD_LPM_MAX_RULES 1024
typedef struct rte_lpm lookup_struct_t;
@@
-471,8
+461,8
@@
signal_exit_now(int sigtype)
/* Freqency scale down timer callback */
static void
/* Freqency scale down timer callback */
static void
-power_timer_cb(__
attribute__((unused))
struct rte_timer *tim,
- __
attribute__((unused))
void *arg)
+power_timer_cb(__
rte_unused
struct rte_timer *tim,
+ __
rte_unused
void *arg)
{
uint64_t hz;
float sleep_time_ratio;
{
uint64_t hz;
float sleep_time_ratio;
@@
-880,7
+870,6
@@
sleep_until_rx_interrupt(int num)
port_id = ((uintptr_t)data) >> CHAR_BIT;
queue_id = ((uintptr_t)data) &
RTE_LEN2MASK(CHAR_BIT, uint8_t);
port_id = ((uintptr_t)data) >> CHAR_BIT;
queue_id = ((uintptr_t)data) &
RTE_LEN2MASK(CHAR_BIT, uint8_t);
- rte_eth_dev_rx_intr_disable(port_id, queue_id);
RTE_LOG(INFO, L3FWD_POWER,
"lcore %u is waked up from rx interrupt on"
" port %d queue %d\n",
RTE_LOG(INFO, L3FWD_POWER,
"lcore %u is waked up from rx interrupt on"
" port %d queue %d\n",
@@
-890,7
+879,7
@@
sleep_until_rx_interrupt(int num)
return 0;
}
return 0;
}
-static void turn_on_
intr(struct lcore_conf *qconf
)
+static void turn_on_
off_intr(struct lcore_conf *qconf, bool on
)
{
int i;
struct lcore_rx_queue *rx_queue;
{
int i;
struct lcore_rx_queue *rx_queue;
@@
-903,7
+892,10
@@
static void turn_on_intr(struct lcore_conf *qconf)
queue_id = rx_queue->queue_id;
rte_spinlock_lock(&(locks[port_id]));
queue_id = rx_queue->queue_id;
rte_spinlock_lock(&(locks[port_id]));
- rte_eth_dev_rx_intr_enable(port_id, queue_id);
+ if (on)
+ rte_eth_dev_rx_intr_enable(port_id, queue_id);
+ else
+ rte_eth_dev_rx_intr_disable(port_id, queue_id);
rte_spinlock_unlock(&(locks[port_id]));
}
}
rte_spinlock_unlock(&(locks[port_id]));
}
}
@@
-935,7
+927,7
@@
static int event_register(struct lcore_conf *qconf)
}
/* main processing loop */
static int
}
/* main processing loop */
static int
-main_telemetry_loop(__
attribute__((unused))
void *dummy)
+main_telemetry_loop(__
rte_unused
void *dummy)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned int lcore_id;
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned int lcore_id;
@@
-1055,7
+1047,7
@@
main_telemetry_loop(__attribute__((unused)) void *dummy)
}
/* main processing loop */
static int
}
/* main processing loop */
static int
-main_empty_poll_loop(__
attribute__((unused))
void *dummy)
+main_empty_poll_loop(__
rte_unused
void *dummy)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned int lcore_id;
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned int lcore_id;
@@
-1159,7
+1151,7
@@
main_empty_poll_loop(__attribute__((unused)) void *dummy)
}
/* main processing loop */
static int
}
/* main processing loop */
static int
-main_loop(__
attribute__((unused))
void *dummy)
+main_loop(__
rte_unused
void *dummy)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
@@
-1336,11
+1328,12
@@
start_rx:
*/
rte_delay_us(lcore_idle_hint);
else {
*/
rte_delay_us(lcore_idle_hint);
else {
- /* suspend until rx interrupt trigges */
+ /* suspend until rx interrupt trigge
r
s */
if (intr_en) {
if (intr_en) {
- turn_on_
intr(qconf
);
+ turn_on_
off_intr(qconf, 1
);
sleep_until_rx_interrupt(
qconf->n_rx_queue);
sleep_until_rx_interrupt(
qconf->n_rx_queue);
+ turn_on_off_intr(qconf, 0);
/**
* start receiving packets immediately
*/
/**
* start receiving packets immediately
*/
@@
-1839,7
+1832,7
@@
setup_hash(int socketid)
/* populate the ipv4 hash */
/* populate the ipv4 hash */
- for (i = 0; i <
IPV4_L3FWD_NUM_ROUTES
; i++) {
+ for (i = 0; i <
RTE_DIM(ipv4_l3fwd_route_array)
; i++) {
ret = rte_hash_add_key (ipv4_l3fwd_lookup_struct[socketid],
(void *) &ipv4_l3fwd_route_array[i].key);
if (ret < 0) {
ret = rte_hash_add_key (ipv4_l3fwd_lookup_struct[socketid],
(void *) &ipv4_l3fwd_route_array[i].key);
if (ret < 0) {
@@
-1852,7
+1845,7
@@
setup_hash(int socketid)
}
/* populate the ipv6 hash */
}
/* populate the ipv6 hash */
- for (i = 0; i <
IPV6_L3FWD_NUM_ROUTES
; i++) {
+ for (i = 0; i <
RTE_DIM(ipv6_l3fwd_route_array)
; i++) {
ret = rte_hash_add_key (ipv6_l3fwd_lookup_struct[socketid],
(void *) &ipv6_l3fwd_route_array[i].key);
if (ret < 0) {
ret = rte_hash_add_key (ipv6_l3fwd_lookup_struct[socketid],
(void *) &ipv6_l3fwd_route_array[i].key);
if (ret < 0) {
@@
-1889,7
+1882,7
@@
setup_lpm(int socketid)
" on socket %d\n", socketid);
/* populate the LPM table */
" on socket %d\n", socketid);
/* populate the LPM table */
- for (i = 0; i <
IPV4_L3FWD_NUM_ROUTES
; i++) {
+ for (i = 0; i <
RTE_DIM(ipv4_l3fwd_route_array)
; i++) {
ret = rte_lpm_add(ipv4_l3fwd_lookup_struct[socketid],
ipv4_l3fwd_route_array[i].ip,
ipv4_l3fwd_route_array[i].depth,
ret = rte_lpm_add(ipv4_l3fwd_lookup_struct[socketid],
ipv4_l3fwd_route_array[i].ip,
ipv4_l3fwd_route_array[i].depth,
@@
-1970,6
+1963,7
@@
check_all_ports_link_status(uint32_t port_mask)
uint8_t count, all_ports_up, print_flag = 0;
uint16_t portid;
struct rte_eth_link link;
uint8_t count, all_ports_up, print_flag = 0;
uint16_t portid;
struct rte_eth_link link;
+ int ret;
printf("\nChecking link status");
fflush(stdout);
printf("\nChecking link status");
fflush(stdout);
@@
-1979,7
+1973,14
@@
check_all_ports_link_status(uint32_t port_mask)
if ((port_mask & (1 << portid)) == 0)
continue;
memset(&link, 0, sizeof(link));
if ((port_mask & (1 << portid)) == 0)
continue;
memset(&link, 0, sizeof(link));
- rte_eth_link_get_nowait(portid, &link);
+ ret = rte_eth_link_get_nowait(portid, &link);
+ if (ret < 0) {
+ all_ports_up = 0;
+ if (print_flag == 1)
+ printf("Port %u link get failed: %s\n",
+ portid, rte_strerror(-ret));
+ continue;
+ }
/* print link status if flag set */
if (print_flag == 1) {
if (link.link_status)
/* print link status if flag set */
if (print_flag == 1) {
if (link.link_status)
@@
-2064,22
+2065,24
@@
static int check_ptype(uint16_t portid)
static int
init_power_library(void)
{
static int
init_power_library(void)
{
- int ret = 0, lcore_id;
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
- if (rte_lcore_is_enabled(lcore_id)) {
- /* init power management library */
- ret = rte_power_init(lcore_id);
- if (ret)
- RTE_LOG(ERR, POWER,
+ unsigned int lcore_id;
+ int ret = 0;
+
+ RTE_LCORE_FOREACH(lcore_id) {
+ /* init power management library */
+ ret = rte_power_init(lcore_id);
+ if (ret) {
+ RTE_LOG(ERR, POWER,
"Library initialization failed on core %u\n",
lcore_id);
"Library initialization failed on core %u\n",
lcore_id);
+ return ret;
}
}
return ret;
}
static void
}
}
return ret;
}
static void
-update_telemetry(__
attribute__((unused))
struct rte_timer *tim,
- __
attribute__((unused))
void *arg)
+update_telemetry(__
rte_unused
struct rte_timer *tim,
+ __
rte_unused
void *arg)
{
unsigned int lcore_id = rte_lcore_id();
struct lcore_conf *qconf;
{
unsigned int lcore_id = rte_lcore_id();
struct lcore_conf *qconf;
@@
-2223,8
+2226,8
@@
main(int argc, char **argv)
if (ret < 0)
rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
if (ret < 0)
rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
- if (init_power_library())
-
RTE_LOG(ERR, L3FWD_POWER
, "init_power_library failed\n");
+ if (
app_mode != APP_MODE_TELEMETRY &&
init_power_library())
+
rte_exit(EXIT_FAILURE
, "init_power_library failed\n");
if (update_lcore_params() < 0)
rte_exit(EXIT_FAILURE, "update_lcore_params failed\n");
if (update_lcore_params() < 0)
rte_exit(EXIT_FAILURE, "update_lcore_params failed\n");
@@
-2315,7
+2318,12
@@
main(int argc, char **argv)
"Cannot adjust number of descriptors: err=%d, port=%d\n",
ret, portid);
"Cannot adjust number of descriptors: err=%d, port=%d\n",
ret, portid);
- rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
+ ret = rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
+ if (ret < 0)
+ rte_exit(EXIT_FAILURE,
+ "Cannot get MAC address: err=%d, port=%d\n",
+ ret, portid);
+
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf(", ");
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf(", ");