All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: William Tu <u9012063@gmail.com>
Cc: dev@dpdk.org, ranjit.menon@intel.com
Subject: Re: [dpdk-dev] [PATCH RFC] net/virtio: Add virtio support for Windows.
Date: Sun, 15 Aug 2021 22:49:54 +0300	[thread overview]
Message-ID: <20210815224954.0bfa9266@sovereign> (raw)
In-Reply-To: <20210815145614.3826-1-u9012063@gmail.com>

2021-08-15 14:56 (UTC+0000), William Tu:
> I looked at Dmitry's patch [1] a while ago and found
> that now it's not much work to enable the virtio support.
> Pass build, but I haven't tested it yet. I plan to try it on GCP.

1. Build fails, the reason is `__rte_weak`: there are no weak symbols on
Windows. The best solution to this I came up with so far is to create a file
with stubs for weak functions. The `-fno-asynchronous-unwind-tables` flag
will also be required for MinGW to link SSE files.

2. I can say in advance it won't work without an ability to read
capabilities form PCI configuration space (`rte_pci_read_config`).
This requires adding support in bus/pci.

> 
> [1] http://inbox.dpdk.org/dev/20200228060727.192491-1-dmitry.kozliuk@gmail.com/
> 
> Signed-off-by: William Tu <u9012063@gmail.com>
> ---
>  drivers/net/virtio/meson.build                   | 6 ------
>  drivers/net/virtio/virtio_ethdev.c               | 4 ++--
>  drivers/net/virtio/virtio_pci_ethdev.c           | 2 ++
>  drivers/net/virtio/virtio_user/virtio_user_dev.h | 4 ++++
>  4 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/virtio/meson.build b/drivers/net/virtio/meson.build
> index 01a333ada2..14c02ee671 100644
> --- a/drivers/net/virtio/meson.build
> +++ b/drivers/net/virtio/meson.build
> @@ -1,12 +1,6 @@
>  # SPDX-License-Identifier: BSD-3-Clause
>  # Copyright(c) 2018 Intel Corporation
>  
> -if is_windows
> -    build = false
> -    reason = 'not supported on Windows'
> -    subdir_done()
> -endif
> -
>  sources += files(
>          'virtio.c',
>          'virtio_ethdev.c',
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index e58085a2c9..7dbf6d0ea7 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -198,7 +198,7 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
>  	 * desc_is_used has a load-acquire or rte_io_rmb inside
>  	 */
>  	while (!desc_is_used(&desc[head], vq))
> -		usleep(100);
> +		rte_delay_us_sleep(100);
>  
>  	/* now get used descriptors */
>  	vq->vq_free_cnt += nb_descs;
> @@ -274,7 +274,7 @@ virtio_send_command_split(struct virtnet_ctl *cvq,
>  	virtqueue_notify(vq);
>  
>  	while (virtqueue_nused(vq) == 0)
> -		usleep(100);
> +		rte_delay_us_sleep(100);
>  
>  	while (virtqueue_nused(vq)) {
>  		uint32_t idx, desc_idx, used_idx;
> diff --git a/drivers/net/virtio/virtio_pci_ethdev.c b/drivers/net/virtio/virtio_pci_ethdev.c
> index 4083853c48..03e9dfab71 100644
> --- a/drivers/net/virtio/virtio_pci_ethdev.c
> +++ b/drivers/net/virtio/virtio_pci_ethdev.c
> @@ -220,7 +220,9 @@ static struct rte_pci_driver rte_virtio_net_pci_pmd = {
>  
>  RTE_INIT(rte_virtio_net_pci_pmd_init)
>  {
> +#if !(defined(_WIN32) || defined(_WIN64))
>  	rte_eal_iopl_init();
> +#endif

I think rte_eal_iopl_init() should not be called from this PMD at all,
because it is allready called by PCI bus driver before probing.

Also, DPDK code should use #ifdef RTE_EXEC_ENV_WINDOWS, etc. to test
if it is building for a specific execution environment.

>  	rte_pci_register(&rte_virtio_net_pci_pmd);
>  }
>  
> diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h
> index 819f6463ba..01cb962770 100644
> --- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
> +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
> @@ -11,6 +11,10 @@
>  #include "../virtio.h"
>  #include "../virtio_ring.h"
>  
> +#if defined(_WIN32) || defined(_WIN64)
> +#define PATH_MAX MAX_PATH
> +#endif
> +

There's rte_os_shim.h for that.

>  enum virtio_user_backend_type {
>  	VIRTIO_USER_BACKEND_UNKNOWN,
>  	VIRTIO_USER_BACKEND_VHOST_USER,

  reply	other threads:[~2021-08-15 19:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-15 14:56 [dpdk-dev] [PATCH RFC] net/virtio: Add virtio support for Windows William Tu
2021-08-15 19:49 ` Dmitry Kozlyuk [this message]
2021-08-17  7:45   ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210815224954.0bfa9266@sovereign \
    --to=dmitry.kozliuk@gmail.com \
    --cc=dev@dpdk.org \
    --cc=ranjit.menon@intel.com \
    --cc=u9012063@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.