[v2,2/3] net/ice: build on Windows
Checks
Commit Message
- 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
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(-)
>
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
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.
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.
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.
@@ -40,5 +40,6 @@ Module EEPROM dump = Y
Multiprocess aware = Y
FreeBSD = Y
Linux = Y
+Windows = Y
x86-32 = Y
x86-64 = Y
@@ -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
-------------------------
@@ -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
-------------
@@ -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;
@@ -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 {
@@ -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)
@@ -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;
@@ -6,6 +6,7 @@
#define _ICE_VLAN_MODE_H_
#include "ice_osdep.h"
+#include "ice_status.h"
struct ice_hw;
@@ -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)
@@ -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>
@@ -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;
@@ -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;
@@ -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"
@@ -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"
@@ -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