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 BA6F3A0350; Fri, 26 Jun 2020 12:45:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5A5B71BE90; Fri, 26 Jun 2020 12:45:02 +0200 (CEST) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id 5D1CD1B951 for ; Fri, 26 Jun 2020 12:45:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593168300; 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=PIFkQpiX7iejUC2mfxCdhZTtZdJM6cxHpReuNW4CbYY=; b=IzvK2827orVFNs3is0gxylp4f62gR8v8kKqqFixO8h6QJ74yGZf2grl1gDkQPRmAmXl7L5 H1zY4JQ60CwksVJ2TVmKpFDq1kWTLot+2kM4YIlXb1SY3BMJwPdnVs1loZUF8Hj0Pl5RlS 6tGDfdwdKl2k/sZ3rYmkRYpHtNNAXTI= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-11-rY3F3h5JPRSOZfQJVd8l0Q-1; Fri, 26 Jun 2020 06:44:59 -0400 X-MC-Unique: rY3F3h5JPRSOZfQJVd8l0Q-1 Received: by mail-wm1-f71.google.com with SMTP id a21so10372443wmd.0 for ; Fri, 26 Jun 2020 03:44:59 -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=PIFkQpiX7iejUC2mfxCdhZTtZdJM6cxHpReuNW4CbYY=; b=S/Gv5ia8vs4wu9k4j/4V7Ahpbwh7Ko0V+/Z2i88NNTQ8SFlffnmThNjK30/wX+A+TR JLSJRuL0zY16zAGkqYLoKu8VzRSLGQmNHsPrOnnCo8HBYcWc4BGya/By5q859+B9fEJS 9PT8/U644XfFIVtnh6zdC1xi60w0YkC665pmDR8JzSPCPNsLk4FMuTOqV/tBLWEkpYUX nU3T0H5/wcfcrqLLAl/JHUyh8EkahYUJjMy6YM+AJdkUwQUcs9ueeoBrpaVv7KnjHHhT E5xjXy+j+gvBDaAVEXiEPt59P+jG5tZo4mWt6tqlROnDaNDAeqgb6WwcmBP5hyBRhCK3 ZDWg== X-Gm-Message-State: AOAM530o2PLCIhVr5JfjFPcMS2SM8/8ankPVTcOzEMvFKuVXpMu7dZQW kQH7h1tq4dBE0Zh3R3qD6dFun7UwDjYG5No7sJ0TWBb8U6y2YP2MEoRULAaGcsGDUquyXjq6g8x t9Nw= X-Received: by 2002:adf:ee0f:: with SMTP id y15mr3029443wrn.76.1593168297693; Fri, 26 Jun 2020 03:44:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyc7+1i6q+4XXmNao+Lj2LvSjqqkkpQNYuFbHHK4YYTSleY6bh5c1GSGG5fuczVbQ9ZbXvpuA== X-Received: by 2002:adf:ee0f:: with SMTP id y15mr3029402wrn.76.1593168297243; Fri, 26 Jun 2020 03:44:57 -0700 (PDT) Received: from amorenoz.users.ipa.redhat.com ([92.176.159.3]) by smtp.gmail.com with ESMTPSA id a81sm17059858wmf.30.2020.06.26.03.44.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 Jun 2020 03:44:56 -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: <20200624122701.1369327-1-maxime.coquelin@redhat.com> <20200624122701.1369327-8-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: <65ef838c-aa1c-0a71-8bce-4a19b87f910a@redhat.com> Date: Fri, 26 Jun 2020 12:44:54 +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: <20200624122701.1369327-8-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 v2 07/14] vhost: replace device ID in applications 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/24/20 2:26 PM, Maxime Coquelin wrote: > This patch replaces the use of vDPA device ID with > vDPA device pointer. The goals is to remove the vDPA > device ID to avoid condusion with the Vhost ID. > > Signed-off-by: Maxime Coquelin > --- > examples/vdpa/main.c | 118 +++++++++++++------------ > lib/librte_vhost/rte_vdpa.h | 44 ++++++--- > lib/librte_vhost/rte_vhost_version.map | 3 +- > lib/librte_vhost/vdpa.c | 64 +++++++------- > 4 files changed, 123 insertions(+), 106 deletions(-) > > diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c > index 6a719e32d8..54f4940b31 100644 > --- a/examples/vdpa/main.c > +++ b/examples/vdpa/main.c > @@ -27,7 +27,7 @@ > > struct vdpa_port { > char ifname[MAX_PATH_LEN]; > - int did; > + struct rte_vdpa_device *dev; > int vid; > uint64_t flags; > int stats_n; > @@ -105,16 +105,23 @@ static int > new_device(int vid) > { > char ifname[MAX_PATH_LEN]; > + struct rte_device *dev; > int i; > > rte_vhost_get_ifname(vid, ifname, sizeof(ifname)); > for (i = 0; i < MAX_VDPA_SAMPLE_PORTS; i++) { > - if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN) == 0) { > - printf("\nnew port %s, did: %d\n", > - ifname, vports[i].did); > - vports[i].vid = vid; > - break; > + if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN)) > + continue; > + > + dev = rte_vdpa_get_rte_device(vports[i].dev); > + if (!dev) { > + RTE_LOG(ERR, VDPA, > + "Failed to get generic device for port %d\n", i); > + continue; > } > + printf("\nnew port %s, device : %s\n", ifname, dev->name); > + vports[i].vid = vid; > + break; > } > > if (i >= MAX_VDPA_SAMPLE_PORTS) > @@ -126,16 +133,24 @@ new_device(int vid) > static void > destroy_device(int vid) > { > + struct rte_device *dev; > char ifname[MAX_PATH_LEN]; > int i; > > rte_vhost_get_ifname(vid, ifname, sizeof(ifname)); > for (i = 0; i < MAX_VDPA_SAMPLE_PORTS; i++) { > - if (strcmp(ifname, vports[i].ifname) == 0) { > - printf("\ndestroy port %s, did: %d\n", > - ifname, vports[i].did); > - break; > + if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN)) > + continue; > + > + dev = rte_vdpa_get_rte_device(vports[i].dev); > + if (!dev) { > + RTE_LOG(ERR, VDPA, > + "Failed to get generic device for port %d\n", i); > + continue; > } > + > + printf("\ndestroy port %s, device: %s\n", ifname, dev->name); > + break; > } > } > > @@ -149,8 +164,6 @@ start_vdpa(struct vdpa_port *vport) > { > int ret; > char *socket_path = vport->ifname; > - struct rte_vdpa_device *vdev; > - int did = vport->did; > > if (client_mode) > vport->flags |= RTE_VHOST_USER_CLIENT; > @@ -174,13 +187,7 @@ start_vdpa(struct vdpa_port *vport) > "register driver ops failed: %s\n", > socket_path); > > - vdev = rte_vdpa_get_device(did); > - if (!vdev) > - rte_exit(EXIT_FAILURE, > - "vDPA device retrieval failed: %p\n", > - vdev); > - > - ret = rte_vhost_driver_attach_vdpa_device(socket_path, vdev); > + ret = rte_vhost_driver_attach_vdpa_device(socket_path, vport->dev); > if (ret != 0) > rte_exit(EXIT_FAILURE, > "attach vdpa device failed: %s\n", > @@ -283,35 +290,31 @@ static void cmd_list_vdpa_devices_parsed( > struct cmdline *cl, > __rte_unused void *data) > { > - int did; > uint32_t queue_num; > uint64_t features; > struct rte_vdpa_device *vdev; > struct rte_device *dev; > struct rte_dev_iterator dev_iter; > > - cmdline_printf(cl, "device id\tdevice name\tqueue num\tsupported features\n"); > + cmdline_printf(cl, "device 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); > + vdev = rte_vdpa_find_device_by_name(dev->name); > if (!vdev) > continue; > if (vdev->ops->get_queue_num(vdev, &queue_num) < 0) { > RTE_LOG(ERR, VDPA, > "failed to get vdpa queue number " > - "for device id %d.\n", did); > + "for device %s.\n", dev->name); > continue; > } > if (vdev->ops->get_features(vdev, &features) < 0) { > RTE_LOG(ERR, VDPA, > "failed to get vdpa features " > - "for device id %d.\n", did); > + "for device %s.\n", dev->name); > continue; > } > - cmdline_printf(cl, "%d\t\t%s\t\t%" PRIu32 "\t\t0x%" PRIx64 "\n", > - did, dev->name, queue_num, features); > + cmdline_printf(cl, "%s\t\t%" PRIu32 "\t\t0x%" PRIx64 "\n", > + dev->name, queue_num, features); > } > } > > @@ -339,18 +342,18 @@ static void cmd_create_vdpa_port_parsed(void *parsed_result, > struct cmdline *cl, > __rte_unused void *data) > { > - int did; > + struct rte_vdpa_device *dev; > struct cmd_create_result *res = parsed_result; > > rte_strscpy(vports[devcnt].ifname, res->socket_path, MAX_PATH_LEN); > - did = rte_vdpa_find_device_id_by_name(res->bdf); > - if (did < 0) { > + dev = rte_vdpa_find_device_by_name(res->bdf); > + if (dev == NULL) { > cmdline_printf(cl, "Unable to find vdpa device id for %s.\n", > res->bdf); > return; > } > > - vports[devcnt].did = did; > + vports[devcnt].dev = dev; > > if (start_vdpa(&vports[devcnt]) == 0) > devcnt++; > @@ -378,7 +381,7 @@ cmdline_parse_inst_t cmd_create_vdpa_port = { > /* *** STATS *** */ > struct cmd_stats_result { > cmdline_fixed_string_t stats; > - uint16_t did; > + cmdline_fixed_string_t bdf; > uint16_t qid; > }; > > @@ -386,25 +389,24 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl, > __rte_unused void *data) > { > struct cmd_stats_result *res = parsed_result; > - struct rte_vdpa_device *vdev = rte_vdpa_get_device(res->did); > + struct rte_vdpa_device *vdev = rte_vdpa_find_device_by_name(res->bdf); > struct vdpa_port *vport = NULL; > uint32_t first, last; > int i; > > if (!vdev) { > - RTE_LOG(ERR, VDPA, "Invalid device id %" PRIu16 ".\n", > - res->did); > + RTE_LOG(ERR, VDPA, "Invalid device: %s.\n", > + res->bdf); > return; > } > for (i = 0; i < RTE_MIN(MAX_VDPA_SAMPLE_PORTS, dev_total); i++) { > - if (vports[i].did == res->did) { > + if (vports[i].dev == vdev) { > vport = &vports[i]; > break; > } > } > if (!vport) { > - RTE_LOG(ERR, VDPA, "Device id %" PRIu16 " was not created.\n", > - res->did); > + RTE_LOG(ERR, VDPA, "Device %s was not created.\n", res->bdf); > return; > } > if (res->qid == 0xFFFF) { > @@ -412,7 +414,7 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl, > last = rte_vhost_get_vring_num(vport->vid); > if (last == 0) { > RTE_LOG(ERR, VDPA, "Failed to get num of actual virtqs" > - " for device id %d.\n", (int)res->did); > + " for device %s.\n", res->bdf); > return; > } > last--; > @@ -421,10 +423,10 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl, > last = res->qid; > } > if (!vport->stats_names) { > - vport->stats_n = rte_vdpa_get_stats_names(vport->did, NULL, 0); > + vport->stats_n = rte_vdpa_get_stats_names(vport->dev, NULL, 0); > if (vport->stats_n <= 0) { > RTE_LOG(ERR, VDPA, "Failed to get names number of " > - "device %d stats.\n", (int)res->did); > + "device %s stats.\n", res->bdf); > return; > } > vport->stats_names = rte_zmalloc(NULL, > @@ -432,26 +434,26 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl, > vport->stats_n, 0); > if (!vport->stats_names) { > RTE_LOG(ERR, VDPA, "Failed to allocate memory for stat" > - " names of device %d.\n", (int)res->did); > + " names of device %s.\n", res->bdf); > return; > } > - i = rte_vdpa_get_stats_names(vport->did, vport->stats_names, > + i = rte_vdpa_get_stats_names(vport->dev, vport->stats_names, > vport->stats_n); > if (vport->stats_n != i) { > - RTE_LOG(ERR, VDPA, "Failed to get names of device %d " > - "stats.\n", (int)res->did); > + RTE_LOG(ERR, VDPA, "Failed to get names of device %s " > + "stats.\n", res->bdf); > return; > } > vport->stats = (struct rte_vdpa_stat *) > (vport->stats_names + vport->stats_n); > } > - cmdline_printf(cl, "\nDevice %d:\n", (int)res->did); > + cmdline_printf(cl, "\nDevice %s:\n", res->bdf); > for (; first <= last; first++) { > memset(vport->stats, 0, sizeof(*vport->stats) * vport->stats_n); > - if (rte_vdpa_get_stats(vport->did, (int)first, vport->stats, > + if (rte_vdpa_get_stats(vport->dev, (int)first, vport->stats, > vport->stats_n) <= 0) { > RTE_LOG(ERR, VDPA, "Failed to get vdpa queue statistics" > - " for device id %d qid %d.\n", (int)res->did, > + " for device %s qid %d.\n", res->bdf, > (int)first); > return; > } > @@ -467,8 +469,8 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl, > > cmdline_parse_token_string_t cmd_device_stats_ = > TOKEN_STRING_INITIALIZER(struct cmd_stats_result, stats, "stats"); > -cmdline_parse_token_num_t cmd_device_id = > - TOKEN_NUM_INITIALIZER(struct cmd_stats_result, did, UINT32); > +cmdline_parse_token_string_t cmd_device_bdf = > + TOKEN_STRING_INITIALIZER(struct cmd_stats_result, bdf, NULL); > cmdline_parse_token_num_t cmd_queue_id = > TOKEN_NUM_INITIALIZER(struct cmd_stats_result, qid, UINT32); > > @@ -478,7 +480,7 @@ cmdline_parse_inst_t cmd_device_stats = { > .help_str = "stats: show device statistics", > .tokens = { > (void *)&cmd_device_stats_, > - (void *)&cmd_device_id, > + (void *)&cmd_device_bdf, > (void *)&cmd_queue_id, > NULL, > }, > @@ -522,9 +524,9 @@ int > main(int argc, char *argv[]) > { > char ch; > - int did; > int ret; > struct cmdline *cl; > + struct rte_vdpa_device *vdev; > struct rte_device *dev; > struct rte_dev_iterator dev_iter; > > @@ -553,12 +555,12 @@ main(int argc, char *argv[]) > cmdline_stdin_exit(cl); > } else { > 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", > + vdev = rte_vdpa_find_device_by_name(dev->name); > + if (vdev == NULL) { > + rte_panic("Failed to find vDPA dev for %s\n", > dev->name); > } > - vports[devcnt].did = did; > + vports[devcnt].dev = vdev; > snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d", > iface, devcnt); > > diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h > index 109cf83b8f..549b0a2cb0 100644 > --- a/lib/librte_vhost/rte_vdpa.h > +++ b/lib/librte_vhost/rte_vdpa.h > @@ -153,11 +153,26 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *); > * @param name > * the vdpa device name > * @return > - * device id on success, -1 on failure > + * vDPA device pointer on success, NULL on failure > */ > __rte_experimental > -int > -rte_vdpa_find_device_id_by_name(const char *name); > +struct rte_vdpa_device * > +rte_vdpa_find_device_by_name(const char *name); > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Get the generic device from the vdpa device > + * > + * @param vdpa_dev > + * the vdpa device pointer > + * @return > + * generic device pointer on success, NULL on failure > + */ > +__rte_experimental > +struct rte_device * > +rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev); > > /** > * @warning > @@ -252,8 +267,8 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m); > * And the array index is same with id field of 'struct rte_vdpa_stat': > * stats[i].id == i > * > - * @param did > - * device id > + * @param dev > + * vDPA device pointer > * @param stats_names > * array of at least size elements to be filled. > * If set to NULL, the function returns the required number of elements. > @@ -265,8 +280,9 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m); > */ > __rte_experimental > int > -rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names, > - unsigned int size); > +rte_vdpa_get_stats_names(struct rte_vdpa_device *dev, > + struct rte_vdpa_stat_name *stats_names, > + unsigned int size); > > /** > * @warning > @@ -280,8 +296,8 @@ rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names, > * And the array index is same with id field of 'struct rte_vdpa_stat': > * stats[i].id == i > * > - * @param did > - * device id > + * @param dev > + * vDPA device pointer > * @param qid > * queue id > * @param stats > @@ -295,16 +311,16 @@ rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names, > */ > __rte_experimental > int > -rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats, > - unsigned int n); > +rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid, > + struct rte_vdpa_stat *stats, unsigned int n); > /** > * @warning > * @b EXPERIMENTAL: this API may change without prior notice > * > * Reset statistics of a vDPA device. > * > - * @param did > - * device id > + * @param dev > + * vDPA device pointer > * @param qid > * queue id > * @return > @@ -312,5 +328,5 @@ rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats, > */ > __rte_experimental > int > -rte_vdpa_reset_stats(int did, uint16_t qid); > +rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid); > #endif /* _RTE_VDPA_H_ */ > diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map > index 60d67445d7..ba55f6f421 100644 > --- a/lib/librte_vhost/rte_vhost_version.map > +++ b/lib/librte_vhost/rte_vhost_version.map > @@ -69,5 +69,6 @@ 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; > + rte_vdpa_find_device_by_name; > + rte_vdpa_get_rte_device; > }; > diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c > index ed20082f0f..91bc483774 100644 > --- a/lib/librte_vhost/vdpa.c > +++ b/lib/librte_vhost/vdpa.c > @@ -40,14 +40,14 @@ rte_vdpa_find_device_id(struct rte_vdpa_device *dev) > return -1; > } > > -int > -rte_vdpa_find_device_id_by_name(const char *name) > +struct rte_vdpa_device * > +rte_vdpa_find_device_by_name(const char *name) > { > struct rte_vdpa_device *dev; > int i; > > if (name == NULL) > - return -1; > + return NULL; > > for (i = 0; i < MAX_VHOST_DEVICE; ++i) { > dev = &vdpa_devices[i]; > @@ -55,10 +55,19 @@ rte_vdpa_find_device_id_by_name(const char *name) > continue; > > if (strcmp(dev->device->name, name) == 0) > - return i; > + return dev; > } > > - return -1; > + return NULL; > +} > + > +struct rte_device * > +rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev) > +{ > + if (vdpa_dev == NULL) > + return NULL; > + > + return vdpa_dev->device; > } > > struct rte_vdpa_device * > @@ -228,50 +237,39 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m) > } > > int > -rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names, > - unsigned int size) > +rte_vdpa_get_stats_names(struct rte_vdpa_device *dev, > + struct rte_vdpa_stat_name *stats_names, > + unsigned int size) > { > - struct rte_vdpa_device *vdpa_dev; > - > - vdpa_dev = rte_vdpa_get_device(did); > - if (!vdpa_dev) > - return -ENODEV; > + if (!dev) > + return -EINVAL; > > - RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_stats_names, -ENOTSUP); > + RTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats_names, -ENOTSUP); > > - return vdpa_dev->ops->get_stats_names(vdpa_dev, stats_names, size); > + return dev->ops->get_stats_names(dev, stats_names, size); > } > > int > -rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats, > - unsigned int n) > +rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid, > + struct rte_vdpa_stat *stats, unsigned int n) > { > - struct rte_vdpa_device *vdpa_dev; > - > - vdpa_dev = rte_vdpa_get_device(did); > - if (!vdpa_dev) > - return -ENODEV; > - > - if (!stats || !n) > + if (!dev || !stats || !n) > return -EINVAL; > > - RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_stats, -ENOTSUP); > + RTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats, -ENOTSUP); > > - return vdpa_dev->ops->get_stats(vdpa_dev, qid, stats, n); > + return dev->ops->get_stats(dev, qid, stats, n); > } > > int > -rte_vdpa_reset_stats(int did, uint16_t qid) > +rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid) > { > - struct rte_vdpa_device *vdpa_dev; > - > - vdpa_dev = rte_vdpa_get_device(did); > - if (!vdpa_dev) > - return -ENODEV; > + if (!dev) > + return -EINVAL; > > - RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->reset_stats, -ENOTSUP); > + RTE_FUNC_PTR_OR_ERR_RET(dev->ops->reset_stats, -ENOTSUP); > > - return vdpa_dev->ops->reset_stats(vdpa_dev, qid); > + return dev->ops->reset_stats(dev, qid); > } > > static uint16_t > Acked-by: Adrián Moreno -- Adrián Moreno