* [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support
@ 2026-07-10 1:59 Mengyuan Lou
2026-07-10 1:59 ` [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf Mengyuan Lou
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Mengyuan Lou @ 2026-07-10 1:59 UTC (permalink / raw)
To: netdev; +Cc: jiawenwu, duanqiangwen, horms, kuba, pabeni, Mengyuan Lou
This series improves ethtool support for Wangxun VF drivers
(ngbevf and txgbevf) in libwx.
This series extends VF support by enabling:
ring parameter configuration via ethtool -G
interrupt coalescing configuration via ethtool -C
Patch 1 adds support for set_ringparam in wx_ethtool_ops_vf,
allowing VF users to adjust TX/RX descriptor ring sizes.
Patch 2 enables set_coalesce support for VF devices and updates
EITR programming to use the VF-specific register access helper.
Changelog:
v7:
- Remove patch3 and netdev_stat_ops support is deferred to a follow-up patch.
v6: https://lore.kernel.org/all/20260701100145.23738-1-mengyuanlou@net-swift.com/
- Patch 1:
Clarify comments describing wx_set_ring() failure semantics.
- Patch 2:
Expand commit message to explain VF ITR encoding changes.
- Patch 3:
Protect ring accesses in wx_update_stats().
v5: https://lore.kernel.org/all/20260615104849.60444-1-mengyuanlou@net-swift.com
- Patch 3:
Convert WX_NUM_{RX,TX}_QUEUES macros to take explicit netdev parameter
as suggested by Simon Horman.
v4: https://lore.kernel.org/all/20260608103946.25786-1-mengyuanlou@net-swift.com
sashiko: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260529075147.88398-1-mengyuanlou%40net-swift.com
- Patch 2:
PF and VF share the same ITR value range. Update wx_write_eitr_vf() to apply
identical range clamping as the PF path, ensuring consistent coalesce behavior
across both device types.
- Patch 3:
Remove wx_update_stats in wxvf_down.
Replace both WX_GLOBAL_STATS_LEN and WX_STATS_LEN macros with type-safe
static helpers wx_global_stats_len() and wx_stats_len().
v3: https://lore.kernel.org/all/20260529075147.88398-1-mengyuanlou@net-swift.com
- Patch 3:
Drop netdev_stat_ops support from this patch.
v2: https://lore.kernel.org/all/20260525101115.13151-1-mengyuanlou@net-swift.com
- Patch 3:
Remove some stats which can be replaced by standard stats defined in
include/net/netdev_queues.h.
- Patch 1:
Adding a return value to wx_set_ring to make wx_set_ringparam_vf can
be passed back to userspace.
Remove freeing and requesting of IRQs. Ring resize only updates descriptor
resources and does not change MSI-X vector or interrupt configuration,
so IRQs do not need to be reallocated.
v1: https://lore.kernel.org/all/20260514103405.42175-1-mengyuanlou@net-swift.com
Mengyuan Lou (2):
net: libwx: add support for set_ringparam in wx_ethtool_ops_vf
net: libwx: add support for set_coalesce in wx_ethtool_ops_vf
.../net/ethernet/wangxun/libwx/wx_ethtool.c | 68 ++++++++++++++++++-
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 9 +--
drivers/net/ethernet/wangxun/libwx/wx_lib.h | 4 +-
drivers/net/ethernet/wangxun/libwx/wx_vf.h | 1 -
.../net/ethernet/wangxun/libwx/wx_vf_common.c | 4 +-
.../net/ethernet/wangxun/libwx/wx_vf_common.h | 2 +
.../net/ethernet/wangxun/libwx/wx_vf_lib.c | 13 +++-
7 files changed, 90 insertions(+), 11 deletions(-)
--
2.30.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf 2026-07-10 1:59 [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support Mengyuan Lou @ 2026-07-10 1:59 ` Mengyuan Lou 2026-07-10 10:19 ` Przemek Kitszel 2026-07-10 1:59 ` [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce " Mengyuan Lou ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Mengyuan Lou @ 2026-07-10 1:59 UTC (permalink / raw) To: netdev; +Cc: jiawenwu, duanqiangwen, horms, kuba, pabeni, Mengyuan Lou Add support for the set_ringparam in wx_ethtool_ops_vf, which is used to set ring sizes for ngbevf and txgbevf. Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com> --- .../net/ethernet/wangxun/libwx/wx_ethtool.c | 61 +++++++++++++++++++ drivers/net/ethernet/wangxun/libwx/wx_lib.c | 9 +-- drivers/net/ethernet/wangxun/libwx/wx_lib.h | 4 +- .../net/ethernet/wangxun/libwx/wx_vf_common.c | 4 +- .../net/ethernet/wangxun/libwx/wx_vf_common.h | 2 + 5 files changed, 72 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c index 5df971aca9e3..eae038df6875 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c @@ -9,6 +9,7 @@ #include "wx_ethtool.h" #include "wx_hw.h" #include "wx_lib.h" +#include "wx_vf_common.h" struct wx_stats { char stat_string[ETH_GSTRING_LEN]; @@ -775,6 +776,65 @@ static int wx_get_link_ksettings_vf(struct net_device *netdev, return 0; } +static int wx_set_ringparam_vf(struct net_device *netdev, + struct ethtool_ringparam *ring, + struct kernel_ethtool_ringparam *kernel_ring, + struct netlink_ext_ack *extack) +{ + struct wx *wx = netdev_priv(netdev); + u32 new_rx_count, new_tx_count; + struct wx_ring *temp_ring; + int i, err = 0; + + new_tx_count = clamp_t(u32, ring->tx_pending, WX_MIN_TXD, WX_MAX_TXD); + new_tx_count = ALIGN(new_tx_count, WX_REQ_TX_DESCRIPTOR_MULTIPLE); + + new_rx_count = clamp_t(u32, ring->rx_pending, WX_MIN_RXD, WX_MAX_RXD); + new_rx_count = ALIGN(new_rx_count, WX_REQ_RX_DESCRIPTOR_MULTIPLE); + + if (new_tx_count == wx->tx_ring_count && + new_rx_count == wx->rx_ring_count) + return 0; + + mutex_lock(&wx->reset_lock); + set_bit(WX_STATE_RESETTING, wx->state); + + if (!netif_running(wx->netdev)) { + for (i = 0; i < wx->num_tx_queues; i++) + wx->tx_ring[i]->count = new_tx_count; + for (i = 0; i < wx->num_rx_queues; i++) + wx->rx_ring[i]->count = new_rx_count; + wx->tx_ring_count = new_tx_count; + wx->rx_ring_count = new_rx_count; + + goto clear_reset; + } + + /* allocate temporary buffer to store rings in */ + i = max_t(int, wx->num_tx_queues, wx->num_rx_queues); + temp_ring = kvmalloc_objs(struct wx_ring, i); + if (!temp_ring) { + err = -ENOMEM; + goto clear_reset; + } + + wxvf_down(wx); + /* wx_set_ring() may partially apply changes before + * returning an error. The error indicates that not all + * requested ring parameters could be configured. + */ + err = wx_set_ring(wx, new_tx_count, new_rx_count, temp_ring); + if (err) + wx_err(wx, "failed to set ring parameters: %d", err); + wx_configure_vf(wx); + wxvf_up_complete(wx); + kvfree(temp_ring); +clear_reset: + clear_bit(WX_STATE_RESETTING, wx->state); + mutex_unlock(&wx->reset_lock); + return err; +} + static const struct ethtool_ops wx_ethtool_ops_vf = { .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ | @@ -782,6 +842,7 @@ static const struct ethtool_ops wx_ethtool_ops_vf = { .get_drvinfo = wx_get_drvinfo, .get_link = ethtool_op_get_link, .get_ringparam = wx_get_ringparam, + .set_ringparam = wx_set_ringparam_vf, .get_msglevel = wx_get_msglevel, .get_coalesce = wx_get_coalesce, .get_ts_info = ethtool_op_get_ts_info, diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c index d042567b8128..2e5dba88d04a 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c @@ -3248,8 +3248,8 @@ netdev_features_t wx_features_check(struct sk_buff *skb, } EXPORT_SYMBOL(wx_features_check); -void wx_set_ring(struct wx *wx, u32 new_tx_count, - u32 new_rx_count, struct wx_ring *temp_ring) +int wx_set_ring(struct wx *wx, u32 new_tx_count, + u32 new_rx_count, struct wx_ring *temp_ring) { int i, err = 0; @@ -3271,7 +3271,7 @@ void wx_set_ring(struct wx *wx, u32 new_tx_count, i--; wx_free_tx_resources(&temp_ring[i]); } - return; + return err; } } @@ -3299,7 +3299,7 @@ void wx_set_ring(struct wx *wx, u32 new_tx_count, i--; wx_free_rx_resources(&temp_ring[i]); } - return; + return err; } } @@ -3311,6 +3311,7 @@ void wx_set_ring(struct wx *wx, u32 new_tx_count, wx->rx_ring_count = new_rx_count; } + return 0; } EXPORT_SYMBOL(wx_set_ring); diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.h b/drivers/net/ethernet/wangxun/libwx/wx_lib.h index aed6ea8cf0d6..bc671786978e 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.h +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.h @@ -36,8 +36,8 @@ netdev_features_t wx_fix_features(struct net_device *netdev, netdev_features_t wx_features_check(struct sk_buff *skb, struct net_device *netdev, netdev_features_t features); -void wx_set_ring(struct wx *wx, u32 new_tx_count, - u32 new_rx_count, struct wx_ring *temp_ring); +int wx_set_ring(struct wx *wx, u32 new_tx_count, + u32 new_rx_count, struct wx_ring *temp_ring); void wx_service_event_schedule(struct wx *wx); void wx_service_event_complete(struct wx *wx); void wx_service_timer(struct timer_list *t); diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c index 0d2db8d38cd5..26de78e9a69e 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c @@ -269,7 +269,7 @@ static void wxvf_irq_enable(struct wx *wx) wr32(wx, WX_VXIMC, wx->eims_enable_mask); } -static void wxvf_up_complete(struct wx *wx) +void wxvf_up_complete(struct wx *wx) { /* Always set the carrier off */ netif_carrier_off(wx->netdev); @@ -324,7 +324,7 @@ int wxvf_open(struct net_device *netdev) } EXPORT_SYMBOL(wxvf_open); -static void wxvf_down(struct wx *wx) +void wxvf_down(struct wx *wx) { struct net_device *netdev = wx->netdev; diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h index cbbb1b178cb2..d45d5d8ac3ab 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h @@ -15,7 +15,9 @@ void wx_set_rx_mode_vf(struct net_device *netdev); void wx_configure_vf(struct wx *wx); int wx_set_mac_vf(struct net_device *netdev, void *p); void wxvf_watchdog_update_link(struct wx *wx); +void wxvf_up_complete(struct wx *wx); int wxvf_open(struct net_device *netdev); +void wxvf_down(struct wx *wx); int wxvf_close(struct net_device *netdev); void wxvf_init_service(struct wx *wx); -- 2.30.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf 2026-07-10 1:59 ` [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf Mengyuan Lou @ 2026-07-10 10:19 ` Przemek Kitszel 2026-07-13 2:44 ` mengyuanlou 0 siblings, 1 reply; 9+ messages in thread From: Przemek Kitszel @ 2026-07-10 10:19 UTC (permalink / raw) To: Mengyuan Lou; +Cc: jiawenwu, duanqiangwen, netdev, horms, kuba, pabeni On 7/10/26 03:59, Mengyuan Lou wrote: > Add support for the set_ringparam in wx_ethtool_ops_vf, > which is used to set ring sizes for ngbevf and txgbevf. > > Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com> > --- > .../net/ethernet/wangxun/libwx/wx_ethtool.c | 61 +++++++++++++++++++ > drivers/net/ethernet/wangxun/libwx/wx_lib.c | 9 +-- > drivers/net/ethernet/wangxun/libwx/wx_lib.h | 4 +- > .../net/ethernet/wangxun/libwx/wx_vf_common.c | 4 +- > .../net/ethernet/wangxun/libwx/wx_vf_common.h | 2 + > 5 files changed, 72 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c > index 5df971aca9e3..eae038df6875 100644 > --- a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c > +++ b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c > @@ -9,6 +9,7 @@ > #include "wx_ethtool.h" > #include "wx_hw.h" > #include "wx_lib.h" > +#include "wx_vf_common.h" > > struct wx_stats { > char stat_string[ETH_GSTRING_LEN]; > @@ -775,6 +776,65 @@ static int wx_get_link_ksettings_vf(struct net_device *netdev, > return 0; > } > > +static int wx_set_ringparam_vf(struct net_device *netdev, > + struct ethtool_ringparam *ring, > + struct kernel_ethtool_ringparam *kernel_ring, > + struct netlink_ext_ack *extack) > +{ > + struct wx *wx = netdev_priv(netdev); > + u32 new_rx_count, new_tx_count; > + struct wx_ring *temp_ring; > + int i, err = 0; > + > + new_tx_count = clamp_t(u32, ring->tx_pending, WX_MIN_TXD, WX_MAX_TXD); > + new_tx_count = ALIGN(new_tx_count, WX_REQ_TX_DESCRIPTOR_MULTIPLE); > + > + new_rx_count = clamp_t(u32, ring->rx_pending, WX_MIN_RXD, WX_MAX_RXD); > + new_rx_count = ALIGN(new_rx_count, WX_REQ_RX_DESCRIPTOR_MULTIPLE); > + > + if (new_tx_count == wx->tx_ring_count && > + new_rx_count == wx->rx_ring_count) > + return 0; > + > + mutex_lock(&wx->reset_lock); > + set_bit(WX_STATE_RESETTING, wx->state); > + > + if (!netif_running(wx->netdev)) { > + for (i = 0; i < wx->num_tx_queues; i++) > + wx->tx_ring[i]->count = new_tx_count; > + for (i = 0; i < wx->num_rx_queues; i++) > + wx->rx_ring[i]->count = new_rx_count; > + wx->tx_ring_count = new_tx_count; > + wx->rx_ring_count = new_rx_count; > + > + goto clear_reset; > + } > + > + /* allocate temporary buffer to store rings in */ > + i = max_t(int, wx->num_tx_queues, wx->num_rx_queues); > + temp_ring = kvmalloc_objs(struct wx_ring, i); > + if (!temp_ring) { > + err = -ENOMEM; > + goto clear_reset; > + } would be much better to move tempbuf allocation into the helper, and just do it at the beginning there in the unlikely event of -ENOMEM, you will just call the "up" in the unroll path > + > + wxvf_down(wx); > + /* wx_set_ring() may partially apply changes before > + * returning an error. The error indicates that not all > + * requested ring parameters could be configured. > + */ > + err = wx_set_ring(wx, new_tx_count, new_rx_count, temp_ring); > + if (err) > + wx_err(wx, "failed to set ring parameters: %d", err); > + wx_configure_vf(wx); > + wxvf_up_complete(wx); > + kvfree(temp_ring); > +clear_reset: > + clear_bit(WX_STATE_RESETTING, wx->state); > + mutex_unlock(&wx->reset_lock); > + return err; > +} ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf 2026-07-10 10:19 ` Przemek Kitszel @ 2026-07-13 2:44 ` mengyuanlou 0 siblings, 0 replies; 9+ messages in thread From: mengyuanlou @ 2026-07-13 2:44 UTC (permalink / raw) To: Przemek Kitszel; +Cc: jiawenwu, duanqiangwen, netdev, horms, kuba, pabeni Sorry for the late reply. > 2026年7月10日 18:19,Przemek Kitszel <przemyslaw.kitszel@intel.com> 写道: > > On 7/10/26 03:59, Mengyuan Lou wrote: >> Add support for the set_ringparam in wx_ethtool_ops_vf, >> which is used to set ring sizes for ngbevf and txgbevf. >> Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com> >> --- >> .../net/ethernet/wangxun/libwx/wx_ethtool.c | 61 +++++++++++++++++++ >> drivers/net/ethernet/wangxun/libwx/wx_lib.c | 9 +-- >> drivers/net/ethernet/wangxun/libwx/wx_lib.h | 4 +- >> .../net/ethernet/wangxun/libwx/wx_vf_common.c | 4 +- >> .../net/ethernet/wangxun/libwx/wx_vf_common.h | 2 + >> 5 files changed, 72 insertions(+), 8 deletions(-) >> diff --git a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c >> index 5df971aca9e3..eae038df6875 100644 >> --- a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c >> +++ b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c >> @@ -9,6 +9,7 @@ >> #include "wx_ethtool.h" >> #include "wx_hw.h" >> #include "wx_lib.h" >> +#include "wx_vf_common.h" >> struct wx_stats { >> char stat_string[ETH_GSTRING_LEN]; >> @@ -775,6 +776,65 @@ static int wx_get_link_ksettings_vf(struct net_device *netdev, >> return 0; >> } >> +static int wx_set_ringparam_vf(struct net_device *netdev, >> + struct ethtool_ringparam *ring, >> + struct kernel_ethtool_ringparam *kernel_ring, >> + struct netlink_ext_ack *extack) >> +{ >> + struct wx *wx = netdev_priv(netdev); >> + u32 new_rx_count, new_tx_count; >> + struct wx_ring *temp_ring; >> + int i, err = 0; >> + >> + new_tx_count = clamp_t(u32, ring->tx_pending, WX_MIN_TXD, WX_MAX_TXD); >> + new_tx_count = ALIGN(new_tx_count, WX_REQ_TX_DESCRIPTOR_MULTIPLE); >> + >> + new_rx_count = clamp_t(u32, ring->rx_pending, WX_MIN_RXD, WX_MAX_RXD); >> + new_rx_count = ALIGN(new_rx_count, WX_REQ_RX_DESCRIPTOR_MULTIPLE); >> + >> + if (new_tx_count == wx->tx_ring_count && >> + new_rx_count == wx->rx_ring_count) >> + return 0; >> + >> + mutex_lock(&wx->reset_lock); >> + set_bit(WX_STATE_RESETTING, wx->state); >> + >> + if (!netif_running(wx->netdev)) { >> + for (i = 0; i < wx->num_tx_queues; i++) >> + wx->tx_ring[i]->count = new_tx_count; >> + for (i = 0; i < wx->num_rx_queues; i++) >> + wx->rx_ring[i]->count = new_rx_count; >> + wx->tx_ring_count = new_tx_count; >> + wx->rx_ring_count = new_rx_count; >> + >> + goto clear_reset; >> + } >> + >> + /* allocate temporary buffer to store rings in */ >> + i = max_t(int, wx->num_tx_queues, wx->num_rx_queues); >> + temp_ring = kvmalloc_objs(struct wx_ring, i); >> + if (!temp_ring) { >> + err = -ENOMEM; >> + goto clear_reset; >> + } > > would be much better to move tempbuf allocation into the helper, > and just do it at the beginning there > > in the unlikely event of -ENOMEM, you will just call the "up" > in the unroll path This change touches wx_set_ring(), which is shared with PF drivers (ngbe/txgbe). To keep this patch focused on VF ringparam support, I will cleanup it a follow-up patch. > >> + >> + wxvf_down(wx); >> + /* wx_set_ring() may partially apply changes before >> + * returning an error. The error indicates that not all >> + * requested ring parameters could be configured. >> + */ >> + err = wx_set_ring(wx, new_tx_count, new_rx_count, temp_ring); >> + if (err) >> + wx_err(wx, "failed to set ring parameters: %d", err); >> + wx_configure_vf(wx); >> + wxvf_up_complete(wx); >> + kvfree(temp_ring); >> +clear_reset: >> + clear_bit(WX_STATE_RESETTING, wx->state); >> + mutex_unlock(&wx->reset_lock); >> + return err; >> +} > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce in wx_ethtool_ops_vf 2026-07-10 1:59 [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support Mengyuan Lou 2026-07-10 1:59 ` [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf Mengyuan Lou @ 2026-07-10 1:59 ` Mengyuan Lou 2026-07-10 10:24 ` Przemek Kitszel 2026-07-20 6:59 ` [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support mengyuanlou 2026-07-21 22:20 ` patchwork-bot+netdevbpf 3 siblings, 1 reply; 9+ messages in thread From: Mengyuan Lou @ 2026-07-10 1:59 UTC (permalink / raw) To: netdev; +Cc: jiawenwu, duanqiangwen, horms, kuba, pabeni, Mengyuan Lou Add support for set_coalesce in wx_ethtool_ops_vf, which is used to set interrupt coalescing parameters. Update wx_write_eitr_vf() to use the same interrupt moderation encoding as PF devices, since PF and VF share the same register layout. And remove the now-unused WX_VXITR_MASK definition. Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com> --- drivers/net/ethernet/wangxun/libwx/wx_ethtool.c | 7 ++++++- drivers/net/ethernet/wangxun/libwx/wx_vf.h | 1 - drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c | 13 ++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c index eae038df6875..22037f015ded 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c @@ -10,6 +10,7 @@ #include "wx_hw.h" #include "wx_lib.h" #include "wx_vf_common.h" +#include "wx_vf_lib.h" struct wx_stats { char stat_string[ETH_GSTRING_LEN]; @@ -488,7 +489,10 @@ int wx_set_coalesce(struct net_device *netdev, else /* rx only or mixed */ q_vector->itr = rx_itr_param; - wx_write_eitr(q_vector); + if (wx->pdev->is_virtfn) + wx_write_eitr_vf(q_vector); + else + wx_write_eitr(q_vector); } wx_update_rsc(wx); @@ -845,6 +849,7 @@ static const struct ethtool_ops wx_ethtool_ops_vf = { .set_ringparam = wx_set_ringparam_vf, .get_msglevel = wx_get_msglevel, .get_coalesce = wx_get_coalesce, + .set_coalesce = wx_set_coalesce, .get_ts_info = ethtool_op_get_ts_info, .get_link_ksettings = wx_get_link_ksettings_vf, }; diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf.h b/drivers/net/ethernet/wangxun/libwx/wx_vf.h index eb6ca3fe4e97..b64a4de089f2 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf.h +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf.h @@ -41,7 +41,6 @@ #define WX_VF_MAX_RX_QUEUES 4 #define WX_VXITR(i) (0x200 + (4 * (i))) /* i=[0,1] */ -#define WX_VXITR_MASK GENMASK(8, 0) #define WX_VXITR_CNT_WDIS BIT(31) #define WX_VXIVAR_MISC 0x260 #define WX_VXIVAR(i) (0x240 + (4 * (i))) /* i=[0,3] */ diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c index aa8be036956c..7325b475ee10 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c @@ -16,7 +16,18 @@ void wx_write_eitr_vf(struct wx_q_vector *q_vector) int v_idx = q_vector->v_idx; u32 itr_reg; - itr_reg = q_vector->itr & WX_VXITR_MASK; + switch (wx->mac.type) { + case wx_mac_sp: + itr_reg = q_vector->itr & WX_SP_MAX_EITR; + break; + case wx_mac_aml: + case wx_mac_aml40: + itr_reg = (q_vector->itr >> 3) & WX_AML_MAX_EITR; + break; + default: + itr_reg = q_vector->itr & WX_EM_MAX_EITR; + break; + } /* set the WDIS bit to not clear the timer bits and cause an * immediate assertion of the interrupt -- 2.30.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce in wx_ethtool_ops_vf 2026-07-10 1:59 ` [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce " Mengyuan Lou @ 2026-07-10 10:24 ` Przemek Kitszel 0 siblings, 0 replies; 9+ messages in thread From: Przemek Kitszel @ 2026-07-10 10:24 UTC (permalink / raw) To: Mengyuan Lou; +Cc: jiawenwu, duanqiangwen, netdev, horms, kuba, pabeni On 7/10/26 03:59, Mengyuan Lou wrote: > Add support for set_coalesce in wx_ethtool_ops_vf, which > is used to set interrupt coalescing parameters. > > Update wx_write_eitr_vf() to use the same interrupt > moderation encoding as PF devices, since PF and VF share > the same register layout. And remove the now-unused > WX_VXITR_MASK definition. > > Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com> > --- > drivers/net/ethernet/wangxun/libwx/wx_ethtool.c | 7 ++++++- > drivers/net/ethernet/wangxun/libwx/wx_vf.h | 1 - > drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c | 13 ++++++++++++- > 3 files changed, 18 insertions(+), 3 deletions(-) looks good, Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support 2026-07-10 1:59 [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support Mengyuan Lou 2026-07-10 1:59 ` [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf Mengyuan Lou 2026-07-10 1:59 ` [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce " Mengyuan Lou @ 2026-07-20 6:59 ` mengyuanlou 2026-07-21 18:23 ` Jakub Kicinski 2026-07-21 22:20 ` patchwork-bot+netdevbpf 3 siblings, 1 reply; 9+ messages in thread From: mengyuanlou @ 2026-07-20 6:59 UTC (permalink / raw) To: netdev; +Cc: jiawenwu, duanqiangwen, horms, kuba, pabeni Hi, Gentle ping. Any comments on this series would be appreciated. Thanks. > 2026年7月10日 09:59,Mengyuan Lou <mengyuanlou@net-swift.com> 写道: > > This series improves ethtool support for Wangxun VF drivers > (ngbevf and txgbevf) in libwx. > > This series extends VF support by enabling: > ring parameter configuration via ethtool -G > interrupt coalescing configuration via ethtool -C > > Patch 1 adds support for set_ringparam in wx_ethtool_ops_vf, > allowing VF users to adjust TX/RX descriptor ring sizes. > Patch 2 enables set_coalesce support for VF devices and updates > EITR programming to use the VF-specific register access helper. > > Changelog: > v7: > - Remove patch3 and netdev_stat_ops support is deferred to a follow-up patch. > v6: https://lore.kernel.org/all/20260701100145.23738-1-mengyuanlou@net-swift.com/ > - Patch 1: > Clarify comments describing wx_set_ring() failure semantics. > - Patch 2: > Expand commit message to explain VF ITR encoding changes. > - Patch 3: > Protect ring accesses in wx_update_stats(). > v5: https://lore.kernel.org/all/20260615104849.60444-1-mengyuanlou@net-swift.com > - Patch 3: > Convert WX_NUM_{RX,TX}_QUEUES macros to take explicit netdev parameter > as suggested by Simon Horman. > v4: https://lore.kernel.org/all/20260608103946.25786-1-mengyuanlou@net-swift.com > sashiko: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260529075147.88398-1-mengyuanlou%40net-swift.com > - Patch 2: > PF and VF share the same ITR value range. Update wx_write_eitr_vf() to apply > identical range clamping as the PF path, ensuring consistent coalesce behavior > across both device types. > - Patch 3: > Remove wx_update_stats in wxvf_down. > Replace both WX_GLOBAL_STATS_LEN and WX_STATS_LEN macros with type-safe > static helpers wx_global_stats_len() and wx_stats_len(). > v3: https://lore.kernel.org/all/20260529075147.88398-1-mengyuanlou@net-swift.com > - Patch 3: > Drop netdev_stat_ops support from this patch. > v2: https://lore.kernel.org/all/20260525101115.13151-1-mengyuanlou@net-swift.com > - Patch 3: > Remove some stats which can be replaced by standard stats defined in > include/net/netdev_queues.h. > - Patch 1: > Adding a return value to wx_set_ring to make wx_set_ringparam_vf can > be passed back to userspace. > Remove freeing and requesting of IRQs. Ring resize only updates descriptor > resources and does not change MSI-X vector or interrupt configuration, > so IRQs do not need to be reallocated. > v1: https://lore.kernel.org/all/20260514103405.42175-1-mengyuanlou@net-swift.com > > Mengyuan Lou (2): > net: libwx: add support for set_ringparam in wx_ethtool_ops_vf > net: libwx: add support for set_coalesce in wx_ethtool_ops_vf > > .../net/ethernet/wangxun/libwx/wx_ethtool.c | 68 ++++++++++++++++++- > drivers/net/ethernet/wangxun/libwx/wx_lib.c | 9 +-- > drivers/net/ethernet/wangxun/libwx/wx_lib.h | 4 +- > drivers/net/ethernet/wangxun/libwx/wx_vf.h | 1 - > .../net/ethernet/wangxun/libwx/wx_vf_common.c | 4 +- > .../net/ethernet/wangxun/libwx/wx_vf_common.h | 2 + > .../net/ethernet/wangxun/libwx/wx_vf_lib.c | 13 +++- > 7 files changed, 90 insertions(+), 11 deletions(-) > > -- > 2.30.1 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support 2026-07-20 6:59 ` [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support mengyuanlou @ 2026-07-21 18:23 ` Jakub Kicinski 0 siblings, 0 replies; 9+ messages in thread From: Jakub Kicinski @ 2026-07-21 18:23 UTC (permalink / raw) To: mengyuanlou@net-swift.com; +Cc: netdev, jiawenwu, duanqiangwen, horms, pabeni On Mon, 20 Jul 2026 14:59:46 +0800 mengyuanlou@net-swift.com wrote: > Any comments on this series would be appreciated. Read the documentation and the mailing list. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support 2026-07-10 1:59 [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support Mengyuan Lou ` (2 preceding siblings ...) 2026-07-20 6:59 ` [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support mengyuanlou @ 2026-07-21 22:20 ` patchwork-bot+netdevbpf 3 siblings, 0 replies; 9+ messages in thread From: patchwork-bot+netdevbpf @ 2026-07-21 22:20 UTC (permalink / raw) To: mengyuanlou; +Cc: netdev, jiawenwu, duanqiangwen, horms, kuba, pabeni Hello: This series was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Fri, 10 Jul 2026 09:59:23 +0800 you wrote: > This series improves ethtool support for Wangxun VF drivers > (ngbevf and txgbevf) in libwx. > > This series extends VF support by enabling: > ring parameter configuration via ethtool -G > interrupt coalescing configuration via ethtool -C > > [...] Here is the summary with links: - [net-next,v7,1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf https://git.kernel.org/netdev/net-next/c/0ce45ae881fd - [net-next,v7,2/2] net: libwx: add support for set_coalesce in wx_ethtool_ops_vf https://git.kernel.org/netdev/net-next/c/e424cd462638 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-07-21 22:20 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-10 1:59 [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support Mengyuan Lou 2026-07-10 1:59 ` [PATCH net-next v7 1/2] net: libwx: add support for set_ringparam in wx_ethtool_ops_vf Mengyuan Lou 2026-07-10 10:19 ` Przemek Kitszel 2026-07-13 2:44 ` mengyuanlou 2026-07-10 1:59 ` [PATCH net-next v7 2/2] net: libwx: add support for set_coalesce " Mengyuan Lou 2026-07-10 10:24 ` Przemek Kitszel 2026-07-20 6:59 ` [PATCH net-next v7 0/2] net: libwx: improve VF ethtool support mengyuanlou 2026-07-21 18:23 ` Jakub Kicinski 2026-07-21 22:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox