[dpdk-dev] [PATCH v3 3/5] bus/vdev: bus scan by multi-process channel
Burakov, Anatoly
anatoly.burakov at intel.com
Fri Apr 20 10:41:14 CEST 2018
On 19-Apr-18 5:50 PM, Jianfeng Tan wrote:
> To scan the vdevs in primary, we send request to primary process
> to obtain the names for vdevs.
>
> Only the name is shared from the primary. In probe(), the device
> driver is supposed to locate (or request more) the detail
> information from the primary.
>
> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
> Reviewed-by: Qi Zhang <qi.z.zhang at intel.com>
> ---
<...>
> +static int
> +vdev_action(const struct rte_mp_msg *mp_msg, const void *peer)
> +{
> + struct rte_vdev_device *dev;
> + struct rte_mp_msg mp_resp;
> + struct vdev_param *ou = (struct vdev_param *)&mp_resp.param;
> + const struct vdev_param *in = (const struct vdev_param *)mp_msg->param;
> + const char *devname;
> + int num;
> +
> + strcpy(mp_resp.name, "vdev");
> + mp_resp.len_param = sizeof(*ou);
> + mp_resp.num_fds = 0;
> +
> + switch (in->type) {
> + case VDEV_SCAN_REQ:
> + ou->type = VDEV_SCAN_ONE;
> + ou->num = 1;
> + num = 0;
> +
> + rte_spinlock_lock(&vdev_device_list_lock);
> + TAILQ_FOREACH(dev, &vdev_device_list, next) {
> + devname = rte_vdev_device_name(dev);
> + if (strlen(devname) == 0)
> + VDEV_LOG(INFO, "vdev with no name is not sent");
> + VDEV_LOG(INFO, "send vdev, %s", devname);
> + strncpy(ou->name, devname, RTE_DEV_NAME_MAX_LEN);
Probably better use strlcpy as it always null-terminates.
> + if (rte_mp_sendmsg(&mp_resp) < 0)
> + VDEV_LOG(ERR, "send vdev, %s, failed, %s",
> + devname, strerror(rte_errno));
> + num++;
Some comments on what is going on here (why are we sending messages in
response? why multiple? who will receive these messages?) would be nice.
I have a sneaking suspicion that you could've packed the response into
one single message, but i'm not completely sure what is going on here,
so maybe what you have here makes sense...
> + }
> + rte_spinlock_unlock(&vdev_device_list_lock);
> +
> + ou->type = VDEV_SCAN_REP;
> + ou->num = num;
> + if (rte_mp_reply(&mp_resp, peer) < 0)
> + VDEV_LOG(ERR, "Failed to reply a scan request");
> + break;
<...>
--
Thanks,
Anatoly
More information about the dev
mailing list