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 A46BCA051C; Fri, 26 Jun 2020 15:49:12 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 863D51BF81; Fri, 26 Jun 2020 15:49:12 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id 94C851B13C for ; Fri, 26 Jun 2020 15:49:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593179350; 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=eLZTKv5dt8IbTZpk4cL6xCBvxo6oRFbjOeOQMEdB158=; b=COfYFKHswIoJjq+RMUFk9npUrx7h3CD3nTHOBbD2qFNd06ErzaY+lnUJQqBxk83y3GmBlI Vc90NZ51kgkWbmx/4bp1vXY23O9UeqvV8vqTU69OFyzU4CKNwULIu6clvvk5emVN2fqUoD pmCGj9hWtXiGSc8V4wKT8IRqhIWFuIg= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-73-kU2sfMmZOiOnftBsHCFMxA-1; Fri, 26 Jun 2020 09:49:08 -0400 X-MC-Unique: kU2sfMmZOiOnftBsHCFMxA-1 Received: by mail-wm1-f72.google.com with SMTP id g138so2397546wme.7 for ; Fri, 26 Jun 2020 06:49:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=eLZTKv5dt8IbTZpk4cL6xCBvxo6oRFbjOeOQMEdB158=; b=dHyCndHbSGhcLpfz7gGS7QET/G4xJ03qw3cJiyo6WG81ENX18Cq6T9jFVroDhCWuP/ JQVxROqFWKUfcrdGPt3oPOCLHlbZsdMptCauyFszVWJ80z7a09LgvV5r2bFEBzA5fXeV L+RWtGZAt3faBhmn4pStPUSjibDC7U6Jq9x1BB91WMdrsVUfX9OLE3cDM8lFjg1R9YFN ujh8+8168iorQERAmyp75Xiveeq4wlQYlzQhjIuXHfpsCs4z5Hm12ITwaUrWCjqBRp2k SOsFF22nnNbx6zZDpvUICjsK+v4qI83xA/d/cxjjnyEaNVX9ngM+sVWRLTvqJ3x8W1pf zH7g== X-Gm-Message-State: AOAM532ForcaLdpIWMuynirdmNVHHFHMDgbL/uAUFa1bL7k+B2yNK0HL aeg5qXgUXgraS441/N9qaaoXj1RRV47OHYcPkKEK2jHsSunlWzJVII/kl50BAQAEyZbtIqEZ7lw 0t6k= X-Received: by 2002:a5d:630d:: with SMTP id i13mr3979928wru.208.1593179347090; Fri, 26 Jun 2020 06:49:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXMooU9EqE7KIpJRUu8VRoXd8F4l3Cf6c5iI+NiWxaSw1OKWUixQzydSACzL9ds25ltaMPbg== X-Received: by 2002:a5d:630d:: with SMTP id i13mr3979901wru.208.1593179346750; Fri, 26 Jun 2020 06:49:06 -0700 (PDT) Received: from amorenoz.users.ipa.redhat.com ([92.176.159.3]) by smtp.gmail.com with ESMTPSA id p8sm1008781wrq.29.2020.06.26.06.49.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 Jun 2020 06:49:06 -0700 (PDT) To: Maxime Coquelin , matan@mellanox.com, xiao.w.wang@intel.com, zhihong.wang@intel.com, chenbo.xia@intel.com, david.marchand@redhat.com, viacheslavo@mellanox.com, hemant.agrawal@nxp.com, sachin.saxena@nxp.com, grive@u256.net, dev@dpdk.org References: <20200626132712.1437673-1-maxime.coquelin@redhat.com> <20200626132712.1437673-5-maxime.coquelin@redhat.com> From: Adrian Moreno Autocrypt: addr=amorenoz@redhat.com; prefer-encrypt=mutual; keydata= mQENBF1syNUBCADQ9dk3fDMxOZ/+OQpmbanpodYxEv8IRtDz8PXw8YX7UyGfozOpLjQ8Fftj ZxuubYNbt2QVbSgviFilFdNWu2eTnN/JaGtfhmTOLPVoakkPHZF8lbgImMoch7L0fH8wN2IM KPxQyPNlX+K9FD5brHsV1lfe1TwAxmhcvLW8yNrVq+9eDIDykxc7tH4exIqXgZroahGxMHKy c8Ti2kJka/t6pDfRaY0J+6J7I1nrn6GXXSMNA45EH8+0N/QlcXhP3rfftnoPeVmpjswzvJqY FNjf/Q5VPLx7RX0Qx+y8mMB2JcChV5Bl7D7x5EUbItj6+Sy7QfOgCtPegk9HSrBCNYaLABEB AAG0I0FkcmlhbiBNb3Jlbm8gPGFtb3Jlbm96QHJlZGhhdC5jb20+iQFUBBMBCAA+FiEEogUD gihhmbOPHy26d5C5fbYeFsUFAl1syNUCGwMFCQHhM4AFCwkIBwIGFQoJCAsCBBYCAwECHgEC F4AACgkQd5C5fbYeFsX7qwgArGHSkX+ILNcujkVzjTG4OtkpJMPFlkn/1PxSEKD0jLuzx14B COzpg/Mqj3Re/QBuOas+ci9bsUA0/2nORtmmEBvzDOJpR5FH1jaGCx8USlY4WM6QqEDNZgTw hsy9KhjFzFjMk+oo3HyItXA+Uq9yrRBTjNBGTXxezMRcMuUZ4MIAfY0IRBglL2BufiuL43jD BvTENNFLoQ/wFV7qkFWSkv+8IjTsxr7M6XUo1QLd29Hn0dvwssN579HL1+BP46i2REpzeBEG L75iVChi+YnIQQNMJ9NYarVabZx4Y1Gn8+7B/1SNArDV+IDgnYgt7E58otoV2Ap310dmtuvE VbxGpbkBDQRdbMjVAQgAqyp9oA7WDu7/Y9T4Ommt69iZx8os7shUIfdgPEy5xrcPn6qGwN1/ HQ4j8nWfBG9uuX1X0RXUZIUEtYTxtED4yaCQMTqDUf9cBAwAA2mYxBfoiNYx8YqxM+sT0/J4 2qmDd+y+20UR4yzHE8AmIbspTzDFIJDAi+jKSR8F355z0sfW7CIMDC4ZWrPsskjEy1YN/U10 r6tRRH1kNyrCSbTG0d9MtcQO58h7DLXuzUhErB+BtG52A04t5cweIJTJC+koV5XPeilzlHnm RFoj0ncruGa9Odns21BNt3cy9wLfK+aUnWuAB1uc6bJGQPiAwjkilz7g7MBRUuIQ2Zt7HGLc SwARAQABiQE8BBgBCAAmFiEEogUDgihhmbOPHy26d5C5fbYeFsUFAl1syNUCGwwFCQHhM4AA CgkQd5C5fbYeFsUlSwf8CH+u/IXaE7WeWxwFkMaORfW8cM4q0xrL3M6yRGuQNW+kMjnrvK9U J9G+L1/5uTRbDQ/4LdoKqize8LjehA+iF6ba4t9Npikh8fLKWgaJfQ/hPhH4C3O5gWPOLTW6 ylGxiuER4CdFwQIoAMMslhFA7G+teeOKBq36E+1+zrybI6Xy1UBSlpDK9j4CtTnMQejjuSQb Qhle+l8VroaUHq869wjAhRHHhqmtJKggI+OvzgQpDIwfHIDypb1BuKydi2W6cVYEALUYyCLS dTBDhzj8zR5tPCsga8J7+TclQzkWOiI2C6ZtiWrMsL/Uym3uXk5nsoc7lSj7yLd/MrBRhYfP JQ== Message-ID: <96375ace-bf56-98c4-3c6f-238cc037bfc4@redhat.com> Date: Fri, 26 Jun 2020 15:49:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200626132712.1437673-5-maxime.coquelin@redhat.com> Content-Language: en-US Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=amorenoz@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH v3 04/14] vhost: make vDPA framework bus agnostic 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 6/26/20 3:27 PM, Maxime Coquelin wrote: > This patch makes the vDPA framework to no more > support only PCI devices, but any devices by relying > on the generic device name as identifier. > > Signed-off-by: Maxime Coquelin > --- > drivers/vdpa/ifc/ifcvf_vdpa.c | 9 +-- > drivers/vdpa/mlx5/mlx5_vdpa.c | 8 +-- > drivers/vdpa/mlx5/mlx5_vdpa.h | 2 +- > examples/vdpa/main.c | 49 ++++++++-------- > lib/librte_vhost/rte_vdpa.h | 42 +++++++------- > lib/librte_vhost/rte_vhost_version.map | 1 + > lib/librte_vhost/vdpa.c | 79 +++++++++++--------------- > 7 files changed, 87 insertions(+), 103 deletions(-) > > diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c > index ec97178dcb..ac9e218c23 100644 > --- a/drivers/vdpa/ifc/ifcvf_vdpa.c > +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c > @@ -47,7 +47,6 @@ static const char * const ifcvf_valid_arguments[] = { > static int ifcvf_vdpa_logtype; > > struct ifcvf_internal { > - struct rte_vdpa_dev_addr dev_addr; > struct rte_pci_device *pdev; > struct ifcvf_hw hw; > int vfio_container_fd; > @@ -116,7 +115,8 @@ find_internal_resource_by_dev(struct rte_pci_device *pdev) > pthread_mutex_lock(&internal_list_lock); > > TAILQ_FOREACH(list, &internal_list, next) { > - if (pdev == list->internal->pdev) { > + if (!rte_pci_addr_cmp(&pdev->addr, > + &list->internal->pdev->addr)) { > found = 1; > break; > } > @@ -1176,8 +1176,6 @@ ifcvf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, > (1ULL << VHOST_USER_F_PROTOCOL_FEATURES) | > (1ULL << VHOST_F_LOG_ALL); > > - internal->dev_addr.pci_addr = pci_dev->addr; > - internal->dev_addr.type = VDPA_ADDR_PCI; > list->internal = internal; > > if (rte_kvargs_count(kvlist, IFCVF_SW_FALLBACK_LM)) { > @@ -1188,8 +1186,7 @@ ifcvf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, > } > internal->sw_lm = sw_fallback_lm; > > - internal->did = rte_vdpa_register_device(&internal->dev_addr, > - &ifcvf_ops); > + internal->did = rte_vdpa_register_device(&pci_dev->device, &ifcvf_ops); > if (internal->did < 0) { > DRV_LOG(ERR, "failed to register device %s", pci_dev->name); > goto error; > diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c > index 8b0b3b8193..7b5ae62bdc 100644 > --- a/drivers/vdpa/mlx5/mlx5_vdpa.c > +++ b/drivers/vdpa/mlx5/mlx5_vdpa.c > @@ -681,14 +681,13 @@ mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, > priv->caps = attr.vdpa; > priv->log_max_rqt_size = attr.log_max_rqt_size; > priv->ctx = ctx; > - priv->dev_addr.pci_addr = pci_dev->addr; > - priv->dev_addr.type = VDPA_ADDR_PCI; > + priv->pci_dev = pci_dev; > priv->var = mlx5_glue->dv_alloc_var(ctx, 0); > if (!priv->var) { > DRV_LOG(ERR, "Failed to allocate VAR %u.\n", errno); > goto error; > } > - priv->id = rte_vdpa_register_device(&priv->dev_addr, &mlx5_vdpa_ops); > + priv->id = rte_vdpa_register_device(&pci_dev->device, &mlx5_vdpa_ops); > if (priv->id < 0) { > DRV_LOG(ERR, "Failed to register vDPA device."); > rte_errno = rte_errno ? rte_errno : EINVAL; > @@ -730,8 +729,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev) > > pthread_mutex_lock(&priv_list_lock); > TAILQ_FOREACH(priv, &priv_list, next) { > - if (memcmp(&priv->dev_addr.pci_addr, &pci_dev->addr, > - sizeof(pci_dev->addr)) == 0) { > + if (!rte_pci_addr_cmp(&priv->pci_dev->addr, &pci_dev->addr)) { > found = 1; > break; > } > diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.h b/drivers/vdpa/mlx5/mlx5_vdpa.h > index 80b4c4bda9..5fc801eff3 100644 > --- a/drivers/vdpa/mlx5/mlx5_vdpa.h > +++ b/drivers/vdpa/mlx5/mlx5_vdpa.h > @@ -106,7 +106,7 @@ struct mlx5_vdpa_priv { > int id; /* vDPA device id. */ > int vid; /* vhost device id. */ > struct ibv_context *ctx; /* Device context. */ > - struct rte_vdpa_dev_addr dev_addr; > + struct rte_pci_device *pci_dev; > struct mlx5_hca_vdpa_attr caps; > uint32_t pdn; /* Protection Domain number. */ > struct ibv_pd *pd; > diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c > index bb30796df6..e72f6646e7 100644 > --- a/examples/vdpa/main.c > +++ b/examples/vdpa/main.c > @@ -280,10 +280,14 @@ static void cmd_list_vdpa_devices_parsed( > uint32_t queue_num; > uint64_t features; > struct rte_vdpa_device *vdev; > - struct rte_pci_addr addr; > + struct rte_device *dev; > + struct rte_dev_iterator dev_iter; > > - cmdline_printf(cl, "device id\tdevice address\tqueue num\tsupported features\n"); > - for (did = 0; did < dev_total; did++) { > + cmdline_printf(cl, "device id\tdevice name\tqueue num\tsupported features\n"); > + RTE_DEV_FOREACH(dev, "class=vdpa", &dev_iter) { > + did = rte_vdpa_find_device_id_by_name(dev->name); > + if (did < 0) > + continue; > vdev = rte_vdpa_get_device(did); > if (!vdev) > continue; > @@ -299,11 +303,8 @@ static void cmd_list_vdpa_devices_parsed( > "for device id %d.\n", did); > continue; > } > - addr = vdev->addr.pci_addr; > - cmdline_printf(cl, > - "%d\t\t" PCI_PRI_FMT "\t%" PRIu32 "\t\t0x%" PRIx64 "\n", > - did, addr.domain, addr.bus, addr.devid, > - addr.function, queue_num, features); > + cmdline_printf(cl, "%d\t\t%s\t\t%" PRIu32 "\t\t0x%" PRIx64 "\n", > + did, dev->name, queue_num, features); > } > } > > @@ -333,17 +334,12 @@ static void cmd_create_vdpa_port_parsed(void *parsed_result, > { > int did; > struct cmd_create_result *res = parsed_result; > - struct rte_vdpa_dev_addr addr; > > rte_strscpy(vports[devcnt].ifname, res->socket_path, MAX_PATH_LEN); > - if (rte_pci_addr_parse(res->bdf, &addr.pci_addr) != 0) { > - cmdline_printf(cl, "Unable to parse the given bdf.\n"); > - return; > - } > - addr.type = VDPA_ADDR_PCI; > - did = rte_vdpa_find_device_id(&addr); > + did = rte_vdpa_find_device_id_by_name(res->bdf); > if (did < 0) { > - cmdline_printf(cl, "Unable to find vdpa device id.\n"); > + cmdline_printf(cl, "Unable to find vdpa device id for %s.\n", > + res->bdf); > return; > } > > @@ -519,9 +515,11 @@ int > main(int argc, char *argv[]) > { > char ch; > - int i; > + int did; > int ret; > struct cmdline *cl; > + struct rte_device *dev; > + struct rte_dev_iterator dev_iter; > > ret = rte_eal_init(argc, argv); > if (ret < 0) > @@ -547,13 +545,18 @@ main(int argc, char *argv[]) > cmdline_interact(cl); > cmdline_stdin_exit(cl); > } else { > - for (i = 0; i < RTE_MIN(MAX_VDPA_SAMPLE_PORTS, dev_total); > - i++) { > - vports[i].did = i; > - snprintf(vports[i].ifname, MAX_PATH_LEN, "%s%d", > - iface, i); > + RTE_DEV_FOREACH(dev, "class=vdpa", &dev_iter) { > + did = rte_vdpa_find_device_id_by_name(dev->name); > + if (did < 0) { > + rte_panic("Failed to find device id for %s\n", > + dev->name); > + } > + vports[devcnt].did = did; > + snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d", > + iface, devcnt); > > - start_vdpa(&vports[i]); > + start_vdpa(&vports[devcnt]); > + devcnt++; > } > > printf("enter \'q\' to quit\n"); > diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h > index ecb3d911d0..b752dfeb96 100644 > --- a/lib/librte_vhost/rte_vdpa.h > +++ b/lib/librte_vhost/rte_vdpa.h > @@ -18,25 +18,6 @@ > > #define MAX_VDPA_NAME_LEN 128 > > -enum vdpa_addr_type { > - VDPA_ADDR_PCI, > - VDPA_ADDR_MAX > -}; > - > -/** > - * vdpa device address > - */ > -struct rte_vdpa_dev_addr { > - /** vdpa address type */ > - enum vdpa_addr_type type; > - > - /** vdpa pci address */ > - union { > - uint8_t __dummy[64]; > - struct rte_pci_addr pci_addr; > - }; > -}; > - > /** Maximum name length for statistics counters */ > #define RTE_VDPA_STATS_NAME_SIZE 64 > > @@ -120,8 +101,8 @@ struct rte_vdpa_dev_ops { > * vdpa device structure includes device address and device operations. > */ > struct rte_vdpa_device { > - /** vdpa device address */ > - struct rte_vdpa_dev_addr addr; > + /** Generic device information */ > + struct rte_device *device; > /** vdpa device operations */ > struct rte_vdpa_dev_ops *ops; > } __rte_cache_aligned; > @@ -141,7 +122,7 @@ struct rte_vdpa_device { > */ > __rte_experimental > int > -rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, > +rte_vdpa_register_device(struct rte_device *rte_dev, > struct rte_vdpa_dev_ops *ops); > > /** > @@ -159,6 +140,21 @@ __rte_experimental > int > rte_vdpa_unregister_device(int did); > > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Find the device id of a vdpa device from its name > + * > + * @param name > + * the vdpa device name > + * @return > + * device id on success, -1 on failure > + */ > +__rte_experimental > +int > +rte_vdpa_find_device_id_by_name(const char *name); > + > /** > * @warning > * @b EXPERIMENTAL: this API may change without prior notice > @@ -172,7 +168,7 @@ rte_vdpa_unregister_device(int did); > */ > __rte_experimental > int > -rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr); > +rte_vdpa_find_device_id(struct rte_vdpa_device *dev); > > /** > * @warning > diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map > index 3a2f7df1e5..9325ee4227 100644 > --- a/lib/librte_vhost/rte_vhost_version.map > +++ b/lib/librte_vhost/rte_vhost_version.map > @@ -69,4 +69,5 @@ EXPERIMENTAL { > rte_vhost_get_vhost_ring_inflight; > rte_vhost_get_vring_base_from_inflight; > rte_vhost_slave_config_change; > + rte_vdpa_find_device_id_by_name; > }; > diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c > index a429841691..87334c88c0 100644 > --- a/lib/librte_vhost/vdpa.c > +++ b/lib/librte_vhost/vdpa.c > @@ -18,43 +18,22 @@ > static struct rte_vdpa_device vdpa_devices[MAX_VHOST_DEVICE]; > static uint32_t vdpa_device_num; > > -static bool > -is_same_vdpa_device(struct rte_vdpa_dev_addr *a, > - struct rte_vdpa_dev_addr *b) > -{ > - bool ret = true; > - > - if (a->type != b->type) > - return false; > - > - switch (a->type) { > - case VDPA_ADDR_PCI: > - if (a->pci_addr.domain != b->pci_addr.domain || > - a->pci_addr.bus != b->pci_addr.bus || > - a->pci_addr.devid != b->pci_addr.devid || > - a->pci_addr.function != b->pci_addr.function) > - ret = false; > - break; > - default: > - break; > - } > - > - return ret; > -} > - > int > -rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, > +rte_vdpa_register_device(struct rte_device *rte_dev, > struct rte_vdpa_dev_ops *ops) > { > struct rte_vdpa_device *dev; > int i; > > - if (vdpa_device_num >= MAX_VHOST_DEVICE || addr == NULL || ops == NULL) > + if (vdpa_device_num >= MAX_VHOST_DEVICE || ops == NULL) > return -1; > > for (i = 0; i < MAX_VHOST_DEVICE; i++) { > dev = &vdpa_devices[i]; > - if (dev->ops && is_same_vdpa_device(&dev->addr, addr)) > + if (dev->ops == NULL) > + continue; > + > + if (dev->device == rte_dev) > return -1; > } > > @@ -67,7 +46,7 @@ rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, > return -1; > > dev = &vdpa_devices[i]; > - memcpy(&dev->addr, addr, sizeof(struct rte_vdpa_dev_addr)); > + dev->device = rte_dev; > dev->ops = ops; > vdpa_device_num++; > > @@ -87,12 +66,33 @@ rte_vdpa_unregister_device(int did) > } > > int > -rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr) > +rte_vdpa_find_device_id(struct rte_vdpa_device *dev) > +{ > + struct rte_vdpa_device *tmp_dev; > + int i; > + > + if (dev == NULL) > + return -1; > + > + for (i = 0; i < MAX_VHOST_DEVICE; ++i) { > + tmp_dev = &vdpa_devices[i]; > + if (tmp_dev->ops == NULL) > + continue; > + > + if (tmp_dev == dev) > + return i; > + } > + > + return -1; > +} > + > +int > +rte_vdpa_find_device_id_by_name(const char *name) > { > struct rte_vdpa_device *dev; > int i; > > - if (addr == NULL) > + if (name == NULL) > return -1; > > for (i = 0; i < MAX_VHOST_DEVICE; ++i) { > @@ -100,7 +100,7 @@ rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr) > if (dev->ops == NULL) > continue; > > - if (is_same_vdpa_device(&dev->addr, addr)) > + if (strncmp(dev->device->name, name, RTE_DEV_NAME_MAX_LEN) == 0) > return i; > } > > @@ -288,21 +288,10 @@ static int > vdpa_dev_match(struct rte_vdpa_device *dev, > const struct rte_device *rte_dev) > { > - struct rte_vdpa_dev_addr addr; > + if (dev->device == rte_dev) > + return 0; > > - /* Only PCI bus supported for now */ > - if (strcmp(rte_dev->bus->name, "pci") != 0) > - return -1; > - > - addr.type = VDPA_ADDR_PCI; > - > - if (rte_pci_addr_parse(rte_dev->name, &addr.pci_addr) != 0) > - return -1; > - > - if (!is_same_vdpa_device(&dev->addr, &addr)) > - return -1; > - > - return 0; > + return -1; > } > > /* Generic rte_vdpa_dev comparison function. */ > Acked-by: Adrián Moreno -- Adrián Moreno