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 A5A75A0553 for ; Mon, 17 Feb 2020 18:46:58 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9F7A41DA12; Mon, 17 Feb 2020 18:46:58 +0100 (CET) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id 193151DA12 for ; Mon, 17 Feb 2020 18:46:57 +0100 (CET) Received: by mail-wr1-f68.google.com with SMTP id u6so20853946wrt.0 for ; Mon, 17 Feb 2020 09:46:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UXB6sqBImiHZTVEKSy6GhbDOnQP8M5jWj8DCXDHnMqk=; b=SNuxzA7lOzcshPnEWVs9q53yb6mNMCoPWUghF90RrG7Qn7uwXdbLNnS+AgPTWDfTq9 OuvslHtysTWK4b1YPHbm0GU7NU9INPb+vE5cPz2+74ljewHN5X8vPaehEAQfZz2L7PUf Ij0StfrZmoQEUYn+RQnnZFiCDVsWUvPaeWgDWAMf1Qm8cfWJ0LCRglC2dZaCOlDDK76l lbezMF5hZFj4E8KMQDSLrURInCL0+zdAhLrQKVMSlLCThm0qBj6WXEFlKy1VOS46rIH+ wgn2VnfW6pf/HrH83paYirSu8OVQs94h2fBd2lCROVeHAl9VJr3cxb5UCTfMgk3gMJut zF5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UXB6sqBImiHZTVEKSy6GhbDOnQP8M5jWj8DCXDHnMqk=; b=c9fhfv4eubGmme8Z+CNjUvwZsuPkbMCYkc4YnKT11UsCOQw6/COKhSbxGWlnkMy0VL Pk3Ui0A2HQ663dvm4gvxYi8evmyLIAhIJAMBte7s1XmSYZl5lyf4FqxHwn0zh/TkgtHw dtHB5ICyGVF5FXElyJ1AlBuK9hPtPtQe2ok3r+W296szXipq0prHxk4pU8uDXT30Vqo2 sHy7N9qk3SAEGJtAkfkyCRcNNxjXtZwK2OGQGeJeYkysT5O1qpQKG02pM42dV2N8FGYA UXP2lY+5C7OLpk178t/kvr1WoaMTBDVeKUpT4jiMQ27J7OYRqJfj0W9vIY8cF4hBr5CR hfqA== X-Gm-Message-State: APjAAAXM5AKbJLjlAsiy+6mLaVMCMqAUdIZQ1a6rw42732xDHPR/km4D WsFfbk6ABUCWH6psdEH13/A= X-Google-Smtp-Source: APXvYqy3bWGB4gQQ7ePkMkfk6U7myyxUfTUdqlyxL8uz8cx8ItaMJqTwJmM2uzvMDKnM7snt4qS78Q== X-Received: by 2002:a5d:45cc:: with SMTP id b12mr22476118wrs.424.1581961616781; Mon, 17 Feb 2020 09:46:56 -0800 (PST) Received: from localhost (userh634.uk.uudial.com. [194.69.103.7]) by smtp.gmail.com with ESMTPSA id h71sm201260wme.26.2020.02.17.09.46.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2020 09:46:56 -0800 (PST) From: luca.boccassi@gmail.com To: Itsuro Oda Cc: Maxime Coquelin , dpdk stable Date: Mon, 17 Feb 2020 17:45:31 +0000 Message-Id: <20200217174546.25334-39-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200217174546.25334-1-luca.boccassi@gmail.com> References: <20200211112216.3929-190-luca.boccassi@gmail.com> <20200217174546.25334-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/vhost: delay driver setup' has been queued to stable release 19.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/19/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Luca Boccassi --- >From a5bae1950be6e9a347ee460f3e76f052f84acff2 Mon Sep 17 00:00:00 2001 From: Itsuro Oda Date: Thu, 6 Feb 2020 10:39:34 +0900 Subject: [PATCH] net/vhost: delay driver setup [ upstream commit 3d01b759d2679c216725689eabe44147d1737326 ] Vhost driver setup is delayed at eth_dev configuration in order to be able to set it from a secondary process. Fixes: 4852aa8f6e21 ("drivers/net: enable hotplug on secondary process") Signed-off-by: Itsuro Oda Reviewed-by: Maxime Coquelin --- drivers/net/vhost/rte_eth_vhost.c | 130 ++++++++++++++++++------------ 1 file changed, 78 insertions(+), 52 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index cea2ead2da..d7bba5c6e2 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -97,6 +97,8 @@ struct pmd_internal { rte_atomic32_t dev_attached; char *dev_name; char *iface_name; + uint64_t flags; + uint64_t disable_flags; uint16_t max_queues; int vid; rte_atomic32_t started; @@ -491,17 +493,6 @@ out: return nb_tx; } -static int -eth_dev_configure(struct rte_eth_dev *dev __rte_unused) -{ - struct pmd_internal *internal = dev->data->dev_private; - const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; - - internal->vlan_strip = !!(rxmode->offloads & DEV_RX_OFFLOAD_VLAN_STRIP); - - return 0; -} - static inline struct internal_list * find_internal_resource(char *ifname) { @@ -877,6 +868,62 @@ static struct vhost_device_ops vhost_ops = { .vring_state_changed = vring_state_changed, }; +static int +vhost_driver_setup(struct rte_eth_dev *eth_dev) +{ + struct pmd_internal *internal = eth_dev->data->dev_private; + struct internal_list *list = NULL; + struct rte_vhost_vring_state *vring_state = NULL; + unsigned int numa_node = eth_dev->device->numa_node; + const char *name = eth_dev->device->name; + + list = rte_zmalloc_socket(name, sizeof(*list), 0, numa_node); + if (list == NULL) + goto error; + + vring_state = rte_zmalloc_socket(name, sizeof(*vring_state), + 0, numa_node); + if (vring_state == NULL) + goto error; + + list->eth_dev = eth_dev; + pthread_mutex_lock(&internal_list_lock); + TAILQ_INSERT_TAIL(&internal_list, list, next); + pthread_mutex_unlock(&internal_list_lock); + + rte_spinlock_init(&vring_state->lock); + vring_states[eth_dev->data->port_id] = vring_state; + + if (rte_vhost_driver_register(internal->iface_name, internal->flags)) + goto error; + + if (internal->disable_flags) { + if (rte_vhost_driver_disable_features(internal->iface_name, + internal->disable_flags)) + goto error; + } + + if (rte_vhost_driver_callback_register(internal->iface_name, + &vhost_ops) < 0) { + VHOST_LOG(ERR, "Can't register callbacks\n"); + goto error; + } + + if (rte_vhost_driver_start(internal->iface_name) < 0) { + VHOST_LOG(ERR, "Failed to start driver for %s\n", + internal->iface_name); + goto error; + } + + return 0; + +error: + rte_free(vring_state); + rte_free(list); + + return -1; +} + int rte_eth_vhost_get_queue_event(uint16_t port_id, struct rte_eth_vhost_queue_event *event) @@ -943,6 +990,24 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id) return vid; } +static int +eth_dev_configure(struct rte_eth_dev *dev) +{ + struct pmd_internal *internal = dev->data->dev_private; + const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; + + /* NOTE: the same process has to operate a vhost interface + * from beginning to end (from eth_dev configure to eth_dev close). + * It is user's responsibility at the moment. + */ + if (vhost_driver_setup(dev) < 0) + return -1; + + internal->vlan_strip = !!(rxmode->offloads & DEV_RX_OFFLOAD_VLAN_STRIP); + + return 0; +} + static int eth_dev_start(struct rte_eth_dev *eth_dev) { @@ -1219,16 +1284,10 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, struct pmd_internal *internal = NULL; struct rte_eth_dev *eth_dev = NULL; struct rte_ether_addr *eth_addr = NULL; - struct rte_vhost_vring_state *vring_state = NULL; - struct internal_list *list = NULL; VHOST_LOG(INFO, "Creating VHOST-USER backend on numa socket %u\n", numa_node); - list = rte_zmalloc_socket(name, sizeof(*list), 0, numa_node); - if (list == NULL) - goto error; - /* reserve an ethdev entry */ eth_dev = rte_eth_vdev_allocate(dev, sizeof(*internal)); if (eth_dev == NULL) @@ -1242,11 +1301,6 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, *eth_addr = base_eth_addr; eth_addr->addr_bytes[5] = eth_dev->data->port_id; - vring_state = rte_zmalloc_socket(name, - sizeof(*vring_state), 0, numa_node); - if (vring_state == NULL) - goto error; - /* now put it all together * - store queue data in internal, * - point eth_dev_data to internals @@ -1262,18 +1316,12 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, goto error; strcpy(internal->iface_name, iface_name); - list->eth_dev = eth_dev; - pthread_mutex_lock(&internal_list_lock); - TAILQ_INSERT_TAIL(&internal_list, list, next); - pthread_mutex_unlock(&internal_list_lock); - - rte_spinlock_init(&vring_state->lock); - vring_states[eth_dev->data->port_id] = vring_state; - data->nb_rx_queues = queues; data->nb_tx_queues = queues; internal->max_queues = queues; internal->vid = -1; + internal->flags = flags; + internal->disable_flags = disable_flags; data->dev_link = pmd_link; data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; @@ -1283,26 +1331,6 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, eth_dev->rx_pkt_burst = eth_vhost_rx; eth_dev->tx_pkt_burst = eth_vhost_tx; - if (rte_vhost_driver_register(iface_name, flags)) - goto error; - - if (disable_flags) { - if (rte_vhost_driver_disable_features(iface_name, - disable_flags)) - goto error; - } - - if (rte_vhost_driver_callback_register(iface_name, &vhost_ops) < 0) { - VHOST_LOG(ERR, "Can't register callbacks\n"); - goto error; - } - - if (rte_vhost_driver_start(iface_name) < 0) { - VHOST_LOG(ERR, "Failed to start driver for %s\n", - iface_name); - goto error; - } - rte_eth_dev_probing_finish(eth_dev); return 0; @@ -1311,9 +1339,7 @@ error: rte_free(internal->iface_name); free(internal->dev_name); } - rte_free(vring_state); rte_eth_dev_release_port(eth_dev); - rte_free(list); return -1; } -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-02-17 17:00:16.405857588 +0000 +++ 0039-net-vhost-delay-driver-setup.patch 2020-02-17 17:00:15.359951192 +0000 @@ -1,13 +1,14 @@ -From 3d01b759d2679c216725689eabe44147d1737326 Mon Sep 17 00:00:00 2001 +From a5bae1950be6e9a347ee460f3e76f052f84acff2 Mon Sep 17 00:00:00 2001 From: Itsuro Oda Date: Thu, 6 Feb 2020 10:39:34 +0900 Subject: [PATCH] net/vhost: delay driver setup +[ upstream commit 3d01b759d2679c216725689eabe44147d1737326 ] + Vhost driver setup is delayed at eth_dev configuration in order to be able to set it from a secondary process. Fixes: 4852aa8f6e21 ("drivers/net: enable hotplug on secondary process") -Cc: stable@dpdk.org Signed-off-by: Itsuro Oda Reviewed-by: Maxime Coquelin