[dpdk-dev] [PATCH 11/12] net/vhost: support to run in the secondary process
Yuanhan Liu
yliu at fridaylinux.org
Thu Sep 21 06:29:28 CEST 2017
On Fri, Aug 25, 2017 at 09:40:51AM +0000, Jianfeng Tan wrote:
> static int
> +share_device(int vid)
> +{
> + uint32_t i, vring_num;
> + int len;
> + int fds[8];
> + struct rte_vhost_memory *mem;
> + struct vhost_params *params;
> + struct rte_vhost_vring vring;
> +
> + /* share mem table */
> + if (rte_vhost_get_mem_table(vid, &mem) < 0) {
> + printf("Failed to get mem table\n");
No printf in DPDK lib and pmd, use RTE_LOG instead.
[...]
> +static int
> +eth_dev_vhost_attach(struct rte_vdev_device *dev)
> +{
> + struct rte_eth_dev *eth_dev = NULL;
> + struct rte_eth_dev_data *data = NULL;
> +
> + RTE_LOG(INFO, PMD, "Attach vhost user port\n");
> +
> + /* reserve an ethdev entry */
> + eth_dev = rte_eth_vdev_allocate(dev, sizeof(struct pmd_internal));
> + if (eth_dev == NULL)
> + goto error;
I'd suggest to "return -1" directly here, without introducing goto.
> +
> + eth_dev->dev_ops = &ops;
> +
> + /* finally assign rx and tx ops */
> + eth_dev->rx_pkt_burst = eth_vhost_rx;
> + eth_dev->tx_pkt_burst = eth_vhost_tx;
> +
> + data = eth_dev->data;
> +
> + return data->port_id;
> +
> +error:
> + return -1;
> +}
> +
> static inline int
> open_iface(const char *key __rte_unused, const char *value, void *extra_args)
> {
> @@ -1154,6 +1244,39 @@ open_int(const char *key __rte_unused, const char *value, void *extra_args)
> }
>
> static int
> +vhost_pmd_action(const char *params, int len __rte_unused,
> + int fds[], int fds_num)
> +{
> + int i;
> + void *base_addr;
> + const struct vhost_params *p = (const struct vhost_params *)params;
The cast could be avoided if you define the action prototype with
"const void *params".
> + const struct rte_vhost_mem_region *regions;
> +
> + switch (p->type) {
> + case VHOST_MSG_TYPE_REGIONS:
> + regions = (const void *)p->regions;
Unnecessary cast.
> + for (i = 0; i < fds_num; ++i) {
> + base_addr = mmap(regions[i].mmap_addr,
> + regions[i].mmap_size,
> + PROT_READ | PROT_WRITE,
> + MAP_FIXED | MAP_SHARED, fds[i], 0);
> + if (base_addr != regions[i].mmap_addr) {
> + RTE_LOG(INFO, PMD, "mmap error");
The log level should be error, nothing will work if it happens. Also, the
log message should be more informative.
--yliu
More information about the dev
mailing list