[v2,2/3] net/ice: build on Windows

Message ID 20210311015848.4976-3-pallavi.kadam@intel.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers
Series Support ice PMD on Windows |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Kadam, Pallavi March 11, 2021, 1:58 a.m. UTC
  - Add Intel ice PMD support on Windows.
- Remove #include sys/ioctl header file as it is not needed.
- Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
types.
- Replace POSIX usleep() API with rte API.
- Add a new macro for the access() API as the original function
has been deprecated on Windows.
- Add extra cflags '-fno-asynchronous-unwind-tables'
to avoid MinGW build error:
	Error: invalid register for .seh_savexmm
- Add documentation to support ice PMD on Windows.
Update the release notes and features list for the same.

Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
---
 doc/guides/nics/features/ice.ini       |  1 +
 doc/guides/nics/ice.rst                | 18 ++++++++++++++++--
 doc/guides/rel_notes/release_21_05.rst |  4 ++++
 drivers/net/ice/base/ice_flow.c        |  2 +-
 drivers/net/ice/base/ice_flow.h        |  2 +-
 drivers/net/ice/base/ice_osdep.h       | 15 +++++++++++++++
 drivers/net/ice/base/ice_switch.c      |  2 +-
 drivers/net/ice/base/ice_vlan_mode.h   |  1 +
 drivers/net/ice/base/meson.build       |  4 ++++
 drivers/net/ice/ice_dcf_ethdev.c       |  1 -
 drivers/net/ice/ice_dcf_parent.c       | 10 +++++-----
 drivers/net/ice/ice_ethdev.c           |  6 +++---
 drivers/net/ice/ice_rxtx_vec_avx2.c    |  2 +-
 drivers/net/ice/ice_rxtx_vec_avx512.c  |  2 +-
 drivers/net/ice/meson.build            | 10 ++++------
 15 files changed, 58 insertions(+), 22 deletions(-)
  

Comments

Jie Zhou March 25, 2021, 4:48 p.m. UTC | #1
On Wed, Mar 10, 2021 at 05:58:47PM -0800, Pallavi Kadam wrote:
> - Add Intel ice PMD support on Windows.
> - Remove #include sys/ioctl header file as it is not needed.
> - Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
> types.
> - Replace POSIX usleep() API with rte API.
> - Add a new macro for the access() API as the original function
> has been deprecated on Windows.
> - Add extra cflags '-fno-asynchronous-unwind-tables'
> to avoid MinGW build error:
> 	Error: invalid register for .seh_savexmm
> - Add documentation to support ice PMD on Windows.
> Update the release notes and features list for the same.
> 
> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>

Acked-by: Jie Zhou <jizh@microsoft.com>

> ---
>  doc/guides/nics/features/ice.ini       |  1 +
>  doc/guides/nics/ice.rst                | 18 ++++++++++++++++--
>  doc/guides/rel_notes/release_21_05.rst |  4 ++++
>  drivers/net/ice/base/ice_flow.c        |  2 +-
>  drivers/net/ice/base/ice_flow.h        |  2 +-
>  drivers/net/ice/base/ice_osdep.h       | 15 +++++++++++++++
>  drivers/net/ice/base/ice_switch.c      |  2 +-
>  drivers/net/ice/base/ice_vlan_mode.h   |  1 +
>  drivers/net/ice/base/meson.build       |  4 ++++
>  drivers/net/ice/ice_dcf_ethdev.c       |  1 -
>  drivers/net/ice/ice_dcf_parent.c       | 10 +++++-----
>  drivers/net/ice/ice_ethdev.c           |  6 +++---
>  drivers/net/ice/ice_rxtx_vec_avx2.c    |  2 +-
>  drivers/net/ice/ice_rxtx_vec_avx512.c  |  2 +-
>  drivers/net/ice/meson.build            | 10 ++++------
>  15 files changed, 58 insertions(+), 22 deletions(-)
>
  
Ferruh Yigit March 26, 2021, 11:51 a.m. UTC | #2
On 3/11/2021 1:58 AM, Pallavi Kadam wrote:
> - Add Intel ice PMD support on Windows.
> - Remove #include sys/ioctl header file as it is not needed.
> - Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
> types.
> - Replace POSIX usleep() API with rte API.
> - Add a new macro for the access() API as the original function
> has been deprecated on Windows.
> - Add extra cflags '-fno-asynchronous-unwind-tables'
> to avoid MinGW build error:
> 	Error: invalid register for .seh_savexmm
> - Add documentation to support ice PMD on Windows.
> Update the release notes and features list for the same.
> 
> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>

<...>

> --- a/drivers/net/ice/base/ice_switch.c
> +++ b/drivers/net/ice/base/ice_switch.c
> @@ -6684,7 +6684,7 @@ ice_fill_valid_words(struct ice_adv_lkup_elem *rule,
>   
>   	for (j = 0; j < sizeof(rule->m_u) / sizeof(u16); j++)
>   		if (((u16 *)&rule->m_u)[j] &&
> -		    rule->type < ARRAY_SIZE(ice_prot_ext)) {
> +		    (unsigned long long)rule->type < ARRAY_SIZE(ice_prot_ext)) {

isn't 'ARRAY_SIZE' return type is 'size_t', if 'size_t' is supported in Windows 
why not cast to it, instead of "unsigned long long".

<...>

> index b82d05fe7..01f8f409d 100644
> --- a/drivers/net/ice/base/meson.build
> +++ b/drivers/net/ice/base/meson.build
> @@ -29,6 +29,10 @@ foreach flag: error_cflags
>   	endif
>   endforeach
>   
> +if is_windows and cc.get_id() != 'clang'
> +	cflags += ['-fno-asynchronous-unwind-tables']
> +endif
> +

This seems not having affect [1], may be because 'cflags' is not used for build 
but 'c_args', moving the block above "c_args = cflags" assignment may work.

[1]
http://mails.dpdk.org/archives/test-report/2021-March/182218.html
  
Ferruh Yigit March 26, 2021, 11:58 a.m. UTC | #3
On 3/11/2021 1:58 AM, Pallavi Kadam wrote:
> - Add Intel ice PMD support on Windows.
> - Remove #include sys/ioctl header file as it is not needed.
> - Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
> types.
> - Replace POSIX usleep() API with rte API.
> - Add a new macro for the access() API as the original function
> has been deprecated on Windows.
> - Add extra cflags '-fno-asynchronous-unwind-tables'
> to avoid MinGW build error:
> 	Error: invalid register for .seh_savexmm
> - Add documentation to support ice PMD on Windows.
> Update the release notes and features list for the same.
> 
> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>

<...>

> index 23f7f0bff..15b812ac5 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -70,6 +70,10 @@ New Features
>     * Added command to display Rx queue used descriptor count.
>       ``show port (port_id) rxq (queue_id) desc used count``
>   
> +* **Updated Intel ice driver.**
> +
> +  * Added Intel ice support on Windows.
> +
>  

Can you please move the update just after 'Hisilicon' PMD update, we are trying 
to keep PMD updates in order base on vendor alphabetical order.
Overall the release note update order is described more in the section comment 
of the document.
  
Kadam, Pallavi March 28, 2021, 3 a.m. UTC | #4
On 3/26/2021 4:51 AM, Ferruh Yigit wrote:
> On 3/11/2021 1:58 AM, Pallavi Kadam wrote:
>> - Add Intel ice PMD support on Windows.
>> - Remove #include sys/ioctl header file as it is not needed.
>> - Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
>> types.
>> - Replace POSIX usleep() API with rte API.
>> - Add a new macro for the access() API as the original function
>> has been deprecated on Windows.
>> - Add extra cflags '-fno-asynchronous-unwind-tables'
>> to avoid MinGW build error:
>>     Error: invalid register for .seh_savexmm
>> - Add documentation to support ice PMD on Windows.
>> Update the release notes and features list for the same.
>>
>> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
>> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
>
> <...>
>
>> --- a/drivers/net/ice/base/ice_switch.c
>> +++ b/drivers/net/ice/base/ice_switch.c
>> @@ -6684,7 +6684,7 @@ ice_fill_valid_words(struct ice_adv_lkup_elem 
>> *rule,
>>         for (j = 0; j < sizeof(rule->m_u) / sizeof(u16); j++)
>>           if (((u16 *)&rule->m_u)[j] &&
>> -            rule->type < ARRAY_SIZE(ice_prot_ext)) {
>> +            (unsigned long long)rule->type < 
>> ARRAY_SIZE(ice_prot_ext)) {
>
> isn't 'ARRAY_SIZE' return type is 'size_t', if 'size_t' is supported 
> in Windows why not cast to it, instead of "unsigned long long".

Ok. Yes, size_t works on Windows. Will replace it in v3.

>
> <...>
>
>> index b82d05fe7..01f8f409d 100644
>> --- a/drivers/net/ice/base/meson.build
>> +++ b/drivers/net/ice/base/meson.build
>> @@ -29,6 +29,10 @@ foreach flag: error_cflags
>>       endif
>>   endforeach
>>   +if is_windows and cc.get_id() != 'clang'
>> +    cflags += ['-fno-asynchronous-unwind-tables']
>> +endif
>> +
>
> This seems not having affect [1], may be because 'cflags' is not used 
> for build but 'c_args', moving the block above "c_args = cflags" 
> assignment may work.
>
> [1]
> http://mails.dpdk.org/archives/test-report/2021-March/182218.html

Thanks, Ferrruh. Ok, will move this cflag above the assignment and give 
it a try.

Either way I am not able to reproduce this error. Let's see if UNH lab 
still reports it.
  
Kadam, Pallavi March 28, 2021, 3:04 a.m. UTC | #5
On 3/26/2021 4:58 AM, Ferruh Yigit wrote:
> On 3/11/2021 1:58 AM, Pallavi Kadam wrote:
>> - Add Intel ice PMD support on Windows.
>> - Remove #include sys/ioctl header file as it is not needed.
>> - Replace x86intrin.h with rte_vect.h to avoid __m_prefetchw conflicting
>> types.
>> - Replace POSIX usleep() API with rte API.
>> - Add a new macro for the access() API as the original function
>> has been deprecated on Windows.
>> - Add extra cflags '-fno-asynchronous-unwind-tables'
>> to avoid MinGW build error:
>>     Error: invalid register for .seh_savexmm
>> - Add documentation to support ice PMD on Windows.
>> Update the release notes and features list for the same.
>>
>> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
>> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
>
> <...>
>
>> index 23f7f0bff..15b812ac5 100644
>> --- a/doc/guides/rel_notes/release_21_05.rst
>> +++ b/doc/guides/rel_notes/release_21_05.rst
>> @@ -70,6 +70,10 @@ New Features
>>     * Added command to display Rx queue used descriptor count.
>>       ``show port (port_id) rxq (queue_id) desc used count``
>>   +* **Updated Intel ice driver.**
>> +
>> +  * Added Intel ice support on Windows.
>> +
>>
>
> Can you please move the update just after 'Hisilicon' PMD update, we 
> are trying to keep PMD updates in order base on vendor alphabetical 
> order.
> Overall the release note update order is described more in the section 
> comment of the document.

Ok, I'll update the order in v3.
  

Patch

diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
index e30a7d2e5..2b93872b1 100644
--- a/doc/guides/nics/features/ice.ini
+++ b/doc/guides/nics/features/ice.ini
@@ -40,5 +40,6 @@  Module EEPROM dump   = Y
 Multiprocess aware   = Y
 FreeBSD              = Y
 Linux                = Y
+Windows              = Y
 x86-32               = Y
 x86-64               = Y
diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
index ccda26f82..100086132 100644
--- a/doc/guides/nics/ice.rst
+++ b/doc/guides/nics/ice.rst
@@ -8,8 +8,8 @@  The ice PMD (**librte_net_ice**) provides poll mode driver support for
 10/25/50/100 Gbps Intel® Ethernet 800 Series Network Adapters based on
 the Intel Ethernet Controller E810 and Intel Ethernet Connection E822/E823.
 
-Prerequisites
--------------
+Linux Prerequisites
+-------------------
 
 - Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` to setup the basic DPDK environment.
 
@@ -25,6 +25,20 @@  Prerequisites
 - To understand DDP for COMMs usage with DPDK, please review `Intel® Ethernet 800 Series Telecommunication (Comms)
   Dynamic Device Personalization (DDP) Package <https://cdrdv2.intel.com/v1/dl/getContent/618651>`_.
 
+Windows Prerequisites
+---------------------
+
+- Follow the DPDK `Getting Started Guide for Windows <https://doc.dpdk.org/guides/windows_gsg/index.html>`_ to setup the basic DPDK environment.
+
+- Identify the Intel® Ethernet adapter and get the latest NVM/FW version.
+
+- To access any Intel® Ethernet hardware, load the NetUIO driver in place of existing built-in (inbox) driver.
+
+- To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
+  <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
+
+- Loading of private Dynamic Device Personalization (DDP) package is not supported on Windows.
+
 
 Recommended Matching List
 -------------------------
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 23f7f0bff..15b812ac5 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -70,6 +70,10 @@  New Features
   * Added command to display Rx queue used descriptor count.
     ``show port (port_id) rxq (queue_id) desc used count``
 
+* **Updated Intel ice driver.**
+
+  * Added Intel ice support on Windows.
+
 
 Removed Items
 -------------
diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c
index a081fbe5a..a4c233d4c 100644
--- a/drivers/net/ice/base/ice_flow.c
+++ b/drivers/net/ice/base/ice_flow.c
@@ -3139,7 +3139,7 @@  enum ice_status ice_flow_rem_entry(struct ice_hw *hw, enum ice_block blk,
 	if (entry_h == ICE_FLOW_ENTRY_HANDLE_INVAL)
 		return ICE_ERR_PARAM;
 
-	entry = ICE_FLOW_ENTRY_PTR((unsigned long)entry_h);
+	entry = ICE_FLOW_ENTRY_PTR((intptr_t)entry_h);
 
 	/* Retain the pointer to the flow profile as the entry will be freed */
 	prof = entry->prof;
diff --git a/drivers/net/ice/base/ice_flow.h b/drivers/net/ice/base/ice_flow.h
index c3bce1319..af15ecb0f 100644
--- a/drivers/net/ice/base/ice_flow.h
+++ b/drivers/net/ice/base/ice_flow.h
@@ -446,7 +446,7 @@  struct ice_flow_entry {
 	u8 acts_cnt;
 };
 
-#define ICE_FLOW_ENTRY_HNDL(e)	((unsigned long)e)
+#define ICE_FLOW_ENTRY_HNDL(e)	((intptr_t)e)
 #define ICE_FLOW_ENTRY_PTR(h)	((struct ice_flow_entry *)(h))
 
 struct ice_flow_prof {
diff --git a/drivers/net/ice/base/ice_osdep.h b/drivers/net/ice/base/ice_osdep.h
index 46ac86834..f4cc762e9 100644
--- a/drivers/net/ice/base/ice_osdep.h
+++ b/drivers/net/ice/base/ice_osdep.h
@@ -62,9 +62,24 @@  typedef uint64_t        s64;
 #define __be64          uint64_t
 #endif
 
+/* Avoid macro redefinition warning on Windows */
+#ifdef RTE_EXEC_ENV_WINDOWS
+#ifdef min
+#undef min
+#endif
+#ifdef max
+#undef max
+#endif
+#endif
 #define min(a, b) RTE_MIN(a, b)
 #define max(a, b) RTE_MAX(a, b)
 
+#ifdef RTE_EXEC_ENV_WINDOWS
+#define ice_access _access
+#else
+#define ice_access access
+#endif
+
 #define FIELD_SIZEOF(t, f) RTE_SIZEOF_FIELD(t, f)
 #define ARRAY_SIZE(arr) RTE_DIM(arr)
 
diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 4568242c1..b546e3d4e 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -6684,7 +6684,7 @@  ice_fill_valid_words(struct ice_adv_lkup_elem *rule,
 
 	for (j = 0; j < sizeof(rule->m_u) / sizeof(u16); j++)
 		if (((u16 *)&rule->m_u)[j] &&
-		    rule->type < ARRAY_SIZE(ice_prot_ext)) {
+		    (unsigned long long)rule->type < ARRAY_SIZE(ice_prot_ext)) {
 			/* No more space to accommodate */
 			if (word >= ICE_MAX_CHAIN_WORDS)
 				return 0;
diff --git a/drivers/net/ice/base/ice_vlan_mode.h b/drivers/net/ice/base/ice_vlan_mode.h
index e9f13e781..bcb6ff713 100644
--- a/drivers/net/ice/base/ice_vlan_mode.h
+++ b/drivers/net/ice/base/ice_vlan_mode.h
@@ -6,6 +6,7 @@ 
 #define _ICE_VLAN_MODE_H_
 
 #include "ice_osdep.h"
+#include "ice_status.h"
 
 struct ice_hw;
 
diff --git a/drivers/net/ice/base/meson.build b/drivers/net/ice/base/meson.build
index b82d05fe7..01f8f409d 100644
--- a/drivers/net/ice/base/meson.build
+++ b/drivers/net/ice/base/meson.build
@@ -29,6 +29,10 @@  foreach flag: error_cflags
 	endif
 endforeach
 
+if is_windows and cc.get_id() != 'clang'
+	cflags += ['-fno-asynchronous-unwind-tables']
+endif
+
 base_lib = static_library('ice_base', sources,
 	dependencies: static_rte_eal,
 	c_args: c_args)
diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
index e0772295e..af4731f55 100644
--- a/drivers/net/ice/ice_dcf_ethdev.c
+++ b/drivers/net/ice/ice_dcf_ethdev.c
@@ -5,7 +5,6 @@ 
 #include <errno.h>
 #include <stdbool.h>
 #include <sys/types.h>
-#include <sys/ioctl.h>
 #include <unistd.h>
 
 #include <rte_interrupts.h>
diff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c
index 476fd4906..a8571b35e 100644
--- a/drivers/net/ice/ice_dcf_parent.c
+++ b/drivers/net/ice/ice_dcf_parent.c
@@ -121,7 +121,7 @@  ice_dcf_vsi_update_service_handler(void *param)
 	struct ice_dcf_hw *hw = reset_param->dcf_hw;
 	struct ice_dcf_adapter *adapter;
 
-	usleep(ICE_DCF_VSI_UPDATE_SERVICE_INTERVAL);
+	rte_delay_us(ICE_DCF_VSI_UPDATE_SERVICE_INTERVAL);
 
 	rte_spinlock_lock(&vsi_update_lock);
 
@@ -315,24 +315,24 @@  ice_dcf_request_pkg_name(struct ice_hw *hw, char *pkg_name)
 	snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE,
 		 ICE_PKG_FILE_SEARCH_PATH_UPDATES "ice-%016llx.pkg",
 		 (unsigned long long)dsn);
-	if (!access(pkg_name, 0))
+	if (!ice_access(pkg_name, 0))
 		return 0;
 
 	snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE,
 		 ICE_PKG_FILE_SEARCH_PATH_DEFAULT "ice-%016llx.pkg",
 		 (unsigned long long)dsn);
-	if (!access(pkg_name, 0))
+	if (!ice_access(pkg_name, 0))
 		return 0;
 
 pkg_file_direct:
 	snprintf(pkg_name,
 		 ICE_MAX_PKG_FILENAME_SIZE, "%s", ICE_PKG_FILE_UPDATES);
-	if (!access(pkg_name, 0))
+	if (!ice_access(pkg_name, 0))
 		return 0;
 
 	snprintf(pkg_name,
 		 ICE_MAX_PKG_FILENAME_SIZE, "%s", ICE_PKG_FILE_DEFAULT);
-	if (!access(pkg_name, 0))
+	if (!ice_access(pkg_name, 0))
 		return 0;
 
 	return -1;
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index dfd99ace9..d22bc92ff 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -1674,17 +1674,17 @@  ice_pkg_file_search_path(struct rte_pci_device *pci_dev, char *pkg_file)
 
 	strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_UPDATES,
 		ICE_MAX_PKG_FILENAME_SIZE);
-	if (!access(strcat(pkg_file, opt_ddp_filename), 0))
+	if (!ice_access(strcat(pkg_file, opt_ddp_filename), 0))
 		return 0;
 
 	strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_DEFAULT,
 		ICE_MAX_PKG_FILENAME_SIZE);
-	if (!access(strcat(pkg_file, opt_ddp_filename), 0))
+	if (!ice_access(strcat(pkg_file, opt_ddp_filename), 0))
 		return 0;
 
 fail_dsn:
 	strncpy(pkg_file, ICE_PKG_FILE_UPDATES, ICE_MAX_PKG_FILENAME_SIZE);
-	if (!access(pkg_file, 0))
+	if (!ice_access(pkg_file, 0))
 		return 0;
 	strncpy(pkg_file, ICE_PKG_FILE_DEFAULT, ICE_MAX_PKG_FILENAME_SIZE);
 	return 0;
diff --git a/drivers/net/ice/ice_rxtx_vec_avx2.c b/drivers/net/ice/ice_rxtx_vec_avx2.c
index 1cc54903c..25efd30e6 100644
--- a/drivers/net/ice/ice_rxtx_vec_avx2.c
+++ b/drivers/net/ice/ice_rxtx_vec_avx2.c
@@ -4,7 +4,7 @@ 
 
 #include "ice_rxtx_vec_common.h"
 
-#include <x86intrin.h>
+#include <rte_vect.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wcast-qual"
diff --git a/drivers/net/ice/ice_rxtx_vec_avx512.c b/drivers/net/ice/ice_rxtx_vec_avx512.c
index 0e5a676e6..835d0aa70 100644
--- a/drivers/net/ice/ice_rxtx_vec_avx512.c
+++ b/drivers/net/ice/ice_rxtx_vec_avx512.c
@@ -4,7 +4,7 @@ 
 
 #include "ice_rxtx_vec_common.h"
 
-#include <x86intrin.h>
+#include <rte_vect.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wcast-qual"
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index 9a67c8f7b..44ef64b4c 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/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
-
 subdir('base')
 objs = [base_objs]
 
@@ -26,6 +20,10 @@  includes += include_directories('base', '../../common/iavf')
 if arch_subdir == 'x86'
 	sources += files('ice_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