From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Burakov, Anatoly" Subject: Re: [PATCH v3 3/5] bus/vdev: bus scan by multi-process channel Date: Fri, 20 Apr 2018 09:41:14 +0100 Message-ID: <59ed38b8-6ee5-5bc9-089c-c9a437c030c1@intel.com> References: <1520177405-59091-1-git-send-email-jianfeng.tan@intel.com> <1524156618-81402-1-git-send-email-jianfeng.tan@intel.com> <1524156618-81402-4-git-send-email-jianfeng.tan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: thomas@monjalon.net To: Jianfeng Tan , dev@dpdk.org Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id DAC425F2B for ; Fri, 20 Apr 2018 10:41:17 +0200 (CEST) In-Reply-To: <1524156618-81402-4-git-send-email-jianfeng.tan@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 > Reviewed-by: Qi Zhang > --- <...> > +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