From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9AA60A0537; Tue, 4 Feb 2020 19:05:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 17DD11C21B; Tue, 4 Feb 2020 19:05:04 +0100 (CET) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id 84FA01C210 for ; Tue, 4 Feb 2020 19:05:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1580839501; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=XGVVbiWZIk0HCuj4OS27u4X5gYroQk2avsp3Mioqgek=; b=aG8qG000QzgfA+I16G71i7Vs+CeuFA0flEoH2glLxwLaWleljttWhtklkPLEGVytPi5ts6 K24AEV27IeKLTvzEvFmiZLOHP8460lx1uUvj4IoG/IuUwu+2xI1+ZbloLds2Qydyc9hjpB znA2l4x2FlqFWtJ+yqD622kDoXdQA/s= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-260-xnUi6rEePeuboMerKfLk2A-1; Tue, 04 Feb 2020 13:05:00 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 36744107B7D4; Tue, 4 Feb 2020 18:04:59 +0000 (UTC) Received: from [10.36.112.40] (ovpn-112-40.ams2.redhat.com [10.36.112.40]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6AC1D5C1B5; Tue, 4 Feb 2020 18:04:57 +0000 (UTC) To: Itsuro Oda , dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com References: <20200108062510.3478-1-oda@valinux.co.jp> <20200108232209.5460-1-oda@valinux.co.jp> <20200108232209.5460-4-oda@valinux.co.jp> From: Maxime Coquelin Autocrypt: addr=maxime.coquelin@redhat.com; keydata= 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 Mwqu3GQ= Message-ID: <1d26f787-99a9-a178-97cb-4de9eaca0393@redhat.com> Date: Tue, 4 Feb 2020 19:04:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200108232209.5460-4-oda@valinux.co.jp> Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: xnUi6rEePeuboMerKfLk2A-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH 3/4] net/vhost: delay vhost driver setup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list 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 1/9/20 12:22 AM, Itsuro Oda wrote: > setting vhost driver is delayed at eth_dev configuration Sentences starts with an upper-case. Vhost driver setup is delayed... > in order to be able to set it from a secondary process. Add Fixes tag and cc stable. > Signed-off-by: Itsuro Oda > --- > drivers/net/vhost/rte_eth_vhost.c | 130 ++++++++++++++++++------------ > 1 file changed, 78 insertions(+), 52 deletions(-) >=20 > diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_et= h_vhost.c > index 1b07aad24..44f44cea3 100644 > --- a/drivers/net/vhost/rte_eth_vhost.c > +++ b/drivers/net/vhost/rte_eth_vhost.c > @@ -96,6 +96,8 @@ struct vhost_queue { > struct pmd_internal { > =09rte_atomic32_t dev_attached; > =09char *iface_name; > +=09uint64_t flags; > +=09uint64_t disable_flags; > =09uint16_t max_queues; > =09int vid; > =09rte_atomic32_t started; > @@ -490,17 +492,6 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16= _t nb_bufs) > =09return nb_tx; > } > =20 > -static int > -eth_dev_configure(struct rte_eth_dev *dev __rte_unused) > -{ > -=09struct pmd_internal *internal =3D dev->data->dev_private; > -=09const struct rte_eth_rxmode *rxmode =3D &dev->data->dev_conf.rxmode; > - > -=09internal->vlan_strip =3D !!(rxmode->offloads & DEV_RX_OFFLOAD_VLAN_ST= RIP); > - > -=09return 0; > -} > - > static inline struct internal_list * > find_internal_resource(char *ifname) > { > @@ -876,6 +867,62 @@ static struct vhost_device_ops vhost_ops =3D { > =09.vring_state_changed =3D vring_state_changed, > }; > =20 > +static int > +vhost_driver_setup(struct rte_eth_dev *eth_dev) > +{ > +=09struct pmd_internal *internal =3D eth_dev->data->dev_private; > +=09struct internal_list *list =3D NULL; > +=09struct rte_vhost_vring_state *vring_state =3D NULL; > +=09unsigned int numa_node =3D eth_dev->device->numa_node; > +=09const char *name =3D eth_dev->device->name; > + > +=09list =3D rte_zmalloc_socket(name, sizeof(*list), 0, numa_node); > +=09if (list =3D=3D NULL) > +=09=09goto error; > + > +=09vring_state =3D rte_zmalloc_socket(name, sizeof(*vring_state), > +=09=09=09=09=09 0, numa_node); > +=09if (vring_state =3D=3D NULL) > +=09=09goto error; > + > +=09list->eth_dev =3D eth_dev; > +=09pthread_mutex_lock(&internal_list_lock); > +=09TAILQ_INSERT_TAIL(&internal_list, list, next); > +=09pthread_mutex_unlock(&internal_list_lock); > + > +=09rte_spinlock_init(&vring_state->lock); > +=09vring_states[eth_dev->data->port_id] =3D vring_state; > + > +=09if (rte_vhost_driver_register(internal->iface_name, internal->flags)) > +=09=09goto error; > + > +=09if (internal->disable_flags) { > +=09=09if (rte_vhost_driver_disable_features(internal->iface_name, > +=09=09=09=09=09=09 internal->disable_flags)) > +=09=09=09goto error; > +=09} > + > +=09if (rte_vhost_driver_callback_register(internal->iface_name, > +=09=09=09=09=09 &vhost_ops) < 0) { > +=09=09VHOST_LOG(ERR, "Can't register callbacks\n"); > +=09=09goto error; > +=09} > + > +=09if (rte_vhost_driver_start(internal->iface_name) < 0) { > +=09=09VHOST_LOG(ERR, "Failed to start driver for %s\n", > +=09=09=09 internal->iface_name); > +=09=09goto error; > +=09} > + > +=09return 0; > + > +error: > +=09rte_free(vring_state); > +=09rte_free(list); > + > +=09return -1; > +} > + > int > rte_eth_vhost_get_queue_event(uint16_t port_id, > =09=09struct rte_eth_vhost_queue_event *event) > @@ -942,6 +989,24 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id) > =09return vid; > } > =20 > +static int > +eth_dev_configure(struct rte_eth_dev *dev) > +{ > +=09struct pmd_internal *internal =3D dev->data->dev_private; > +=09const struct rte_eth_rxmode *rxmode =3D &dev->data->dev_conf.rxmode; > + > +=09/* NOTE: the same process has to operate a vhost interface > +=09 * from beginning to end (from eth_dev configure to eth_dev close). > +=09 * It is user's responsibility at the moment. > +=09 */ > +=09if (vhost_driver_setup(dev) < 0) > +=09=09return -1; > + > +=09internal->vlan_strip =3D !!(rxmode->offloads & DEV_RX_OFFLOAD_VLAN_ST= RIP); > + > +=09return 0; > +} > + > static int > eth_dev_start(struct rte_eth_dev *eth_dev) > { > @@ -1217,16 +1282,10 @@ eth_dev_vhost_create(struct rte_vdev_device *dev,= char *iface_name, > =09struct pmd_internal *internal =3D NULL; > =09struct rte_eth_dev *eth_dev =3D NULL; > =09struct rte_ether_addr *eth_addr =3D NULL; > -=09struct rte_vhost_vring_state *vring_state =3D NULL; > -=09struct internal_list *list =3D NULL; > =20 > =09VHOST_LOG(INFO, "Creating VHOST-USER backend on numa socket %u\n", > =09=09numa_node); > =20 > -=09list =3D rte_zmalloc_socket(name, sizeof(*list), 0, numa_node); > -=09if (list =3D=3D NULL) > -=09=09goto error; > - > =09/* reserve an ethdev entry */ > =09eth_dev =3D rte_eth_vdev_allocate(dev, sizeof(*internal)); > =09if (eth_dev =3D=3D NULL) > @@ -1240,11 +1299,6 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, = char *iface_name, > =09*eth_addr =3D base_eth_addr; > =09eth_addr->addr_bytes[5] =3D eth_dev->data->port_id; > =20 > -=09vring_state =3D rte_zmalloc_socket(name, > -=09=09=09sizeof(*vring_state), 0, numa_node); > -=09if (vring_state =3D=3D NULL) > -=09=09goto error; > - > =09/* now put it all together > =09 * - store queue data in internal, > =09 * - point eth_dev_data to internals > @@ -1257,18 +1311,12 @@ eth_dev_vhost_create(struct rte_vdev_device *dev,= char *iface_name, > =09=09goto error; > =09strcpy(internal->iface_name, iface_name); > =20 > -=09list->eth_dev =3D eth_dev; > -=09pthread_mutex_lock(&internal_list_lock); > -=09TAILQ_INSERT_TAIL(&internal_list, list, next); > -=09pthread_mutex_unlock(&internal_list_lock); > - > -=09rte_spinlock_init(&vring_state->lock); > -=09vring_states[eth_dev->data->port_id] =3D vring_state; > - > =09data->nb_rx_queues =3D queues; > =09data->nb_tx_queues =3D queues; > =09internal->max_queues =3D queues; > =09internal->vid =3D -1; > +=09internal->flags =3D flags; > +=09internal->disable_flags =3D disable_flags; > =09data->dev_link =3D pmd_link; > =09data->dev_flags =3D RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; > =20 > @@ -1278,35 +1326,13 @@ eth_dev_vhost_create(struct rte_vdev_device *dev,= char *iface_name, > =09eth_dev->rx_pkt_burst =3D eth_vhost_rx; > =09eth_dev->tx_pkt_burst =3D eth_vhost_tx; > =20 > -=09if (rte_vhost_driver_register(iface_name, flags)) > -=09=09goto error; > - > -=09if (disable_flags) { > -=09=09if (rte_vhost_driver_disable_features(iface_name, > -=09=09=09=09=09disable_flags)) > -=09=09=09goto error; > -=09} > - > -=09if (rte_vhost_driver_callback_register(iface_name, &vhost_ops) < 0) { > -=09=09VHOST_LOG(ERR, "Can't register callbacks\n"); > -=09=09goto error; > -=09} > - > -=09if (rte_vhost_driver_start(iface_name) < 0) { > -=09=09VHOST_LOG(ERR, "Failed to start driver for %s\n", > -=09=09=09iface_name); > -=09=09goto error; > -=09} > - > =09rte_eth_dev_probing_finish(eth_dev); > =09return data->port_id; > =20 > error: > =09if (internal) > =09=09rte_free(internal->iface_name); > -=09rte_free(vring_state); > =09rte_eth_dev_release_port(eth_dev); > -=09rte_free(list); > =20 > =09return -1; > } >=20 With above comments fixed: Reviewed-by: Maxime Coquelin Thanks, Maxime