[dpdk-dev] [PATCH 3/3] examples/vhost: add new vhost example

Stephen Hemminger stephen at networkplumber.org
Wed Aug 6 05:32:54 CEST 2014


> +static const uint16_t external_pkt_default_vlan_tag = 2000;
> +const uint16_t vlan_tags[] = {
> +	1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
> +	1008, 1009, 1010, 1011,	1012, 1013, 1014, 1015,
> +	1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
> +	1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
> +	1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
> +	1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
> +	1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
> +	1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
> +};

Why pre-compute table if it is just: vlan_tag = n + 1000?


> +
> +/* Per-device statistics struct */
> +struct device_statistics {
> +	uint64_t tx_total;
> +	rte_atomic64_t rx_total_atomic;
> +	uint64_t rx_total;
> +	uint64_t tx;
> +	rte_atomic64_t rx_atomic;
> +	uint64_t rx;
> +} __rte_cache_aligned;
> +struct device_statistics dev_statistics[MAX_DEVICES];

Doing per-core statistics would be faster than using atomic's
which have implicit lock.

> +/*
> + * Builds up the correct configuration for VMDQ VLAN pool map
> + * according to the pool & queue limits.
> + */
> +static inline int
> +get_eth_conf(struct rte_eth_conf *eth_conf, uint32_t num_devices)
> +{
> +	struct rte_eth_vmdq_rx_conf conf;
> +	unsigned i;
> +
> +	memset(&conf, 0, sizeof(conf));
> +	conf.nb_queue_pools = (enum rte_eth_nb_pools)num_devices;
> +	conf.nb_pool_maps = num_devices;
> +	conf.enable_loop_back =
> +		vmdq_conf_default.rx_adv_conf.vmdq_rx_conf.enable_loop_back;
> +
> +	for (i = 0; i < conf.nb_pool_maps; i++) {
> +		conf.pool_map[i].vlan_id = vlan_tags[i];
> +		conf.pool_map[i].pools = (1UL << i);
> +	}
> +
> +	(void)(rte_memcpy(eth_conf, &vmdq_conf_default, sizeof(*eth_conf)));
> +	(void)(rte_memcpy(&eth_conf->rx_adv_conf.vmdq_rx_conf, &conf,
> +		   sizeof(eth_conf->rx_adv_conf.vmdq_rx_conf)));
> +	return 0;
> +}

If function always returns 0 just make it void.
No point in making non-fastpath code inline.
The cast to (void) is unnecessary and just makes things ugly.
Why not use structure assignment rather than memcpy() which is not type safe?


More information about the dev mailing list