net/iavf: build on Windows
authorPallavi Kadam <pallavi.kadam@intel.com>
Thu, 9 Sep 2021 23:23:19 +0000 (16:23 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 30 Sep 2021 20:09:49 +0000 (22:09 +0200)
- Enable IAVF PMD build on Windows
- Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
  types
- Fix for pointer and integer sign warnings using Clang compiler on
  Windows
- Add extra cflags '-fno-asynchronous-unwind-tables'
  to avoid MinGW build error:
  Error: invalid register for .seh_savexmm

Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
Acked-by: Shivanshu Shukla <shivanshu.shukla@intel.com>
doc/guides/nics/intel_vf.rst
doc/guides/rel_notes/release_21_11.rst
drivers/net/iavf/iavf.h
drivers/net/iavf/iavf_rxtx_vec_avx2.c
drivers/net/iavf/iavf_rxtx_vec_avx512.c
drivers/net/iavf/iavf_tm.c
drivers/net/iavf/meson.build

index fcea815..4c35513 100644 (file)
@@ -334,6 +334,8 @@ The expected guest operating systems in a virtualized environment are:
 
 For supported kernel versions, refer to the *DPDK Release Notes*.
 
+.. _intel_vf_kvm:
+
 Setting Up a KVM Virtual Machine Monitor
 ----------------------------------------
 
@@ -392,9 +394,8 @@ The setup procedure is as follows:
 #.  Create a Virtual Machine and install Fedora 14 on the Virtual Machine.
     This is referred to as the Guest Operating System (Guest OS).
 
-#.  Download and install the latest ixgbe driver from:
-
-    `http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&amp;DwnldID=14687 <http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&amp;DwnldID=14687>`_
+#.  Download and install the latest ixgbe driver from
+    `intel.com <https://downloadcenter.intel.com/download/14687>`_.
 
 #.  In the Host OS
 
@@ -616,3 +617,25 @@ which belongs to the destination VF on the VM.
 .. figure:: img/inter_vm_comms.*
 
    Inter-VM Communication
+
+
+Windows Support
+---------------
+
+*   IAVF PMD currently is supported only inside Windows guest created on Linux host.
+
+*   Physical PCI resources are exposed as virtual functions
+    into Windows VM using SR-IOV pass-through feature.
+
+*   Create a Windows guest on Linux host using KVM hypervisor.
+    Refer to the steps mentioned in the above section: :ref:`intel_vf_kvm`.
+
+*   In the Host machine, download and install the kernel Ethernet driver
+    for `i40e <https://downloadcenter.intel.com/download/24411>`_
+    or `ice <https://downloadcenter.intel.com/download/29746>`_.
+
+*   For Windows guest, install NetUIO driver
+    in place of existing built-in (inbox) Virtual Function driver.
+
+*   To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
+    <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
index 945a3d4..37dc1a7 100644 (file)
@@ -73,6 +73,10 @@ New Features
   * Implement support for tunnel offload.
   * Updated HWRM API to version 1.10.2.44
 
+* **Updated Intel iavf driver.**
+
+  * Added Intel iavf support on Windows.
+
 * **Updated Intel ice driver.**
 
   * Added 1PPS out support by a devargs.
index 771f3b7..90f80a7 100644 (file)
@@ -337,7 +337,8 @@ _clear_cmd(struct iavf_info *vf)
 static inline int
 _atomic_set_cmd(struct iavf_info *vf, enum virtchnl_ops ops)
 {
-       int ret = rte_atomic32_cmpset(&vf->pend_cmd, VIRTCHNL_OP_UNKNOWN, ops);
+       int ret = rte_atomic32_cmpset((volatile uint32_t *)&vf->pend_cmd,
+               VIRTCHNL_OP_UNKNOWN, ops);
 
        if (!ret)
                PMD_DRV_LOG(ERR, "There is incomplete cmd %d", vf->pend_cmd);
index 475070e..96c05d9 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "iavf_rxtx_vec_common.h"
 
-#include <x86intrin.h>
+#include <rte_vect.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wcast-qual"
index 571161c..cb0b057 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "iavf_rxtx_vec_common.h"
 
-#include <x86intrin.h>
+#include <rte_vect.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wcast-qual"
index 3c80276..8d92062 100644 (file)
@@ -321,7 +321,7 @@ iavf_tm_node_add(struct rte_eth_dev *dev, uint32_t node_id,
        }
        /* check level */
        if (level_id != RTE_TM_NODE_LEVEL_ID_ANY &&
-           level_id != parent_node_type + 1) {
+           level_id != (uint32_t)parent_node_type + 1) {
                error->type = RTE_TM_ERROR_TYPE_NODE_PARAMS;
                error->message = "Wrong level";
                return -EINVAL;
index f2010a8..36a82e3 100644 (file)
@@ -1,11 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
-if is_windows
-    build = false
-    reason = 'not supported on Windows'
-    subdir_done()
-endif
 
 cflags += ['-Wno-strict-aliasing']
 
@@ -25,6 +20,10 @@ sources = files(
 if arch_subdir == 'x86'
     sources += files('iavf_rxtx_vec_sse.c')
 
+    if is_windows and cc.get_id() != 'clang'
+        cflags += ['-fno-asynchronous-unwind-tables']
+    endif
+
     # compile AVX2 version if either:
     # a. we have AVX supported in minimum instruction set baseline
     # b. it's not minimum instruction set, but supported by compiler