* [PATCH iwl-net 0/2] ice: fix AQ command 0x06EE usage by retrying
@ 2026-01-13 19:38 Dawid Osuchowski
2026-01-13 19:38 ` [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ Dawid Osuchowski
2026-01-13 19:38 ` [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE Dawid Osuchowski
0 siblings, 2 replies; 8+ messages in thread
From: Dawid Osuchowski @ 2026-01-13 19:38 UTC (permalink / raw)
To: intel-wired-lan; +Cc: netdev, Dawid Osuchowski
The Admin Queue (AQ) command 0x06EE can return EBUSY when firmware link
management holds the i2c bus used to communicate with the module.
According to Intel(R) Ethernet Controller E810 Datasheet Rev 2.8 [1]
Section 3.3.10.4 Read/Write SFF EEPROM (0x06EE)
request should be retried upon receiving EBUSY from firmware.
Instead of relying on the caller of ice_aq_sff_eeprom() to implement
retrying, use the existing retry infrastructure in ice_sq_send_cmd_retry()
to always attempt retry on receiving EBUSY.
Reproduction steps
------------------
# ethtool -m <interface_name>
netlink error: Input/output error
Link: https://www.intel.com/content/www/us/en/content-details/613875/intel-ethernet-controller-e810-datasheet.html [1]
Jakub Staniszewski (2):
ice: reintroduce retry mechanism for indirect AQ
ice: fix retry for AQ command 0x06EE
drivers/net/ethernet/intel/ice/ice_common.c | 13 ++++++--
drivers/net/ethernet/intel/ice/ice_ethtool.c | 35 ++++++++------------
2 files changed, 24 insertions(+), 24 deletions(-)
base-commit: 855e576f30278714c7ca067005f46807aca2e6d4
--
2.51.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ
2026-01-13 19:38 [PATCH iwl-net 0/2] ice: fix AQ command 0x06EE usage by retrying Dawid Osuchowski
@ 2026-01-13 19:38 ` Dawid Osuchowski
2026-01-13 22:31 ` [Intel-wired-lan] " Paul Menzel
2026-02-27 6:05 ` Rinitha, SX
2026-01-13 19:38 ` [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE Dawid Osuchowski
1 sibling, 2 replies; 8+ messages in thread
From: Dawid Osuchowski @ 2026-01-13 19:38 UTC (permalink / raw)
To: intel-wired-lan
Cc: netdev, Jakub Staniszewski, Michal Schmidt, stable,
Dawid Osuchowski, Aleksandr Loktionov, Przemek Kitszel
From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Add retry mechanism for indirect Admin Queue (AQ) commands. To do so we
need to keep the command buffer.
This technically reverts commit 43a630e37e25
("ice: remove unused buffer copy code in ice_sq_send_cmd_retry()"),
but combines it with a fix in the logic by using a kmemdup() call,
making it more robust and less likely to break in the future due to
programmer error.
Cc: Michal Schmidt <mschmidt@redhat.com>
Cc: stable@vger.kernel.org
Fixes: 3056df93f7a8 ("ice: Re-send some AQ commands, as result of EBUSY AQ error")
Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
---
Ccing Michal, given they are the author of the "reverted" commit.
drivers/net/ethernet/intel/ice/ice_common.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index a400bf4f239a..aab00c44e9b2 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1879,34 +1879,40 @@ ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
{
struct libie_aq_desc desc_cpy;
bool is_cmd_for_retry;
+ u8 *buf_cpy = NULL;
u8 idx = 0;
u16 opcode;
int status;
opcode = le16_to_cpu(desc->opcode);
is_cmd_for_retry = ice_should_retry_sq_send_cmd(opcode);
memset(&desc_cpy, 0, sizeof(desc_cpy));
if (is_cmd_for_retry) {
- /* All retryable cmds are direct, without buf. */
- WARN_ON(buf);
+ if (buf) {
+ buf_cpy = kmemdup(buf, buf_size, GFP_KERNEL);
+ if (!buf_cpy)
+ return -ENOMEM;
+ }
memcpy(&desc_cpy, desc, sizeof(desc_cpy));
}
do {
status = ice_sq_send_cmd(hw, cq, desc, buf, buf_size, cd);
if (!is_cmd_for_retry || !status ||
hw->adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
break;
+ if (buf_cpy)
+ memcpy(buf, buf_cpy, buf_size);
memcpy(desc, &desc_cpy, sizeof(desc_cpy));
-
msleep(ICE_SQ_SEND_DELAY_TIME_MS);
} while (++idx < ICE_SQ_SEND_MAX_EXECUTE);
+ kfree(buf_cpy);
return status;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE
2026-01-13 19:38 [PATCH iwl-net 0/2] ice: fix AQ command 0x06EE usage by retrying Dawid Osuchowski
2026-01-13 19:38 ` [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ Dawid Osuchowski
@ 2026-01-13 19:38 ` Dawid Osuchowski
2026-01-14 9:16 ` [Intel-wired-lan] " Paul Menzel
2026-02-27 6:06 ` Rinitha, SX
1 sibling, 2 replies; 8+ messages in thread
From: Dawid Osuchowski @ 2026-01-13 19:38 UTC (permalink / raw)
To: intel-wired-lan
Cc: netdev, Jakub Staniszewski, stable, Dawid Osuchowski,
Aleksandr Loktionov, Przemek Kitszel
From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Executing ethtool -m can fail reporting a netlink I/O error while firmware
link management holds the i2c bus used to communicate with the module.
According to Intel(R) Ethernet Controller E810 Datasheet Rev 2.8 [1]
Section 3.3.10.4 Read/Write SFF EEPROM (0x06EE)
request should to be retried upon receiving EBUSY from firmware.
Commit e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
implemented it only for part of ice_get_module_eeprom(), leaving all other
calls to ice_aq_sff_eeprom() vulnerable to returning early on getting
EBUSY without retrying.
Remove the retry loop from ice_get_module_eeprom() and add Admin Queue
(AQ) command with opcode 0x06EE to the list of commands that should be
retried on receiving EBUSY from firmware.
Cc: stable@vger.kernel.org
Fixes: e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Link: https://www.intel.com/content/www/us/en/content-details/613875/intel-ethernet-controller-e810-datasheet.html [1]
---
drivers/net/ethernet/intel/ice/ice_common.c | 1 +
drivers/net/ethernet/intel/ice/ice_ethtool.c | 35 ++++++++------------
2 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index aab00c44e9b2..26eb8e05498b 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1854,6 +1854,7 @@ static bool ice_should_retry_sq_send_cmd(u16 opcode)
case ice_aqc_opc_lldp_stop:
case ice_aqc_opc_lldp_start:
case ice_aqc_opc_lldp_filter_ctrl:
+ case ice_aqc_opc_sff_eeprom:
return true;
}
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 3565a5d96c6d..478876908db1 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -4496,7 +4496,7 @@ ice_get_module_eeprom(struct net_device *netdev,
u8 addr = ICE_I2C_EEPROM_DEV_ADDR;
struct ice_hw *hw = &pf->hw;
bool is_sfp = false;
- unsigned int i, j;
+ unsigned int i;
u16 offset = 0;
u8 page = 0;
int status;
@@ -4538,26 +4538,19 @@ ice_get_module_eeprom(struct net_device *netdev,
if (page == 0 || !(data[0x2] & 0x4)) {
u32 copy_len;
- /* If i2c bus is busy due to slow page change or
- * link management access, call can fail. This is normal.
- * So we retry this a few times.
- */
- for (j = 0; j < 4; j++) {
- status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
- !is_sfp, value,
- SFF_READ_BLOCK_SIZE,
- 0, NULL);
- netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%X)\n",
- addr, offset, page, is_sfp,
- value[0], value[1], value[2], value[3],
- value[4], value[5], value[6], value[7],
- status);
- if (status) {
- usleep_range(1500, 2500);
- memset(value, 0, SFF_READ_BLOCK_SIZE);
- continue;
- }
- break;
+ status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
+ !is_sfp, value,
+ SFF_READ_BLOCK_SIZE,
+ 0, NULL);
+ netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%pe)\n",
+ addr, offset, page, is_sfp,
+ value[0], value[1], value[2], value[3],
+ value[4], value[5], value[6], value[7],
+ ERR_PTR(status));
+ if (status) {
+ netdev_err(netdev, "%s: error reading module EEPROM: status %pe\n",
+ __func__, ERR_PTR(status));
+ return status;
}
/* Make sure we have enough room for the new block */
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Intel-wired-lan] [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ
2026-01-13 19:38 ` [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ Dawid Osuchowski
@ 2026-01-13 22:31 ` Paul Menzel
2026-01-14 8:15 ` Dawid Osuchowski
2026-02-27 6:05 ` Rinitha, SX
1 sibling, 1 reply; 8+ messages in thread
From: Paul Menzel @ 2026-01-13 22:31 UTC (permalink / raw)
To: Dawid Osuchowski
Cc: intel-wired-lan, netdev, stable, Aleksandr Loktionov,
Jakub Staniszewski, Przemek Kitszel, Michal Schmidt
[Cc: +Michal]
Dear Dawid, dear Jakub,
Am 13.01.26 um 20:38 schrieb Dawid Osuchowski:
> From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
>
> Add retry mechanism for indirect Admin Queue (AQ) commands. To do so we
> need to keep the command buffer.
>
> This technically reverts commit 43a630e37e25
> ("ice: remove unused buffer copy code in ice_sq_send_cmd_retry()"),
> but combines it with a fix in the logic by using a kmemdup() call,
> making it more robust and less likely to break in the future due to
> programmer error.
>
> Cc: Michal Schmidt <mschmidt@redhat.com>
> Cc: stable@vger.kernel.org
> Fixes: 3056df93f7a8 ("ice: Re-send some AQ commands, as result of EBUSY AQ error")
> Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
> Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> ---
> Ccing Michal, given they are the author of the "reverted" commit.
At least Michal was not in the (visible) Cc: list
> drivers/net/ethernet/intel/ice/ice_common.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index a400bf4f239a..aab00c44e9b2 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -1879,34 +1879,40 @@ ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
> {
> struct libie_aq_desc desc_cpy;
> bool is_cmd_for_retry;
> + u8 *buf_cpy = NULL;
> u8 idx = 0;
> u16 opcode;
> int status;
>
> opcode = le16_to_cpu(desc->opcode);
> is_cmd_for_retry = ice_should_retry_sq_send_cmd(opcode);
> memset(&desc_cpy, 0, sizeof(desc_cpy));
>
> if (is_cmd_for_retry) {
> - /* All retryable cmds are direct, without buf. */
> - WARN_ON(buf);
> + if (buf) {
> + buf_cpy = kmemdup(buf, buf_size, GFP_KERNEL);
> + if (!buf_cpy)
> + return -ENOMEM;
> + }
>
> memcpy(&desc_cpy, desc, sizeof(desc_cpy));
> }
>
> do {
> status = ice_sq_send_cmd(hw, cq, desc, buf, buf_size, cd);
>
> if (!is_cmd_for_retry || !status ||
> hw->adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
> break;
>
> + if (buf_cpy)
> + memcpy(buf, buf_cpy, buf_size);
> memcpy(desc, &desc_cpy, sizeof(desc_cpy));
> -
Unrelated change?
> msleep(ICE_SQ_SEND_DELAY_TIME_MS);
>
> } while (++idx < ICE_SQ_SEND_MAX_EXECUTE);
>
> + kfree(buf_cpy);
> return status;
> }
The diff looks good otherwise.
Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
Kind regards,
Paul
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Intel-wired-lan] [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ
2026-01-13 22:31 ` [Intel-wired-lan] " Paul Menzel
@ 2026-01-14 8:15 ` Dawid Osuchowski
0 siblings, 0 replies; 8+ messages in thread
From: Dawid Osuchowski @ 2026-01-14 8:15 UTC (permalink / raw)
To: Paul Menzel
Cc: intel-wired-lan, netdev, stable, Aleksandr Loktionov,
Jakub Staniszewski, Przemek Kitszel, Michal Schmidt
Hey Paul,
On 2026-01-13 11:31 PM, Paul Menzel wrote:
> [Cc: +Michal]
>
> Dear Dawid, dear Jakub,
>
...
> Am 13.01.26 um 20:38 schrieb Dawid Osuchowski:
>> Ccing Michal, given they are the author of the "reverted" commit.
>
> At least Michal was not in the (visible) Cc: list
Interesting. I was using 'git send-email' without any suppression of Cc
or similar options. In the direct email sent from me Michal is in Cc,
seems the mailing list for some reason stripped him...
>> drivers/net/ethernet/intel/ice/ice_common.c | 12 +++++++++---
>> 1 file changed, 9 insertions(+), 3 deletions(-)
>>
...
>> do {
>> status = ice_sq_send_cmd(hw, cq, desc, buf, buf_size, cd);
>> if (!is_cmd_for_retry || !status ||
>> hw->adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
>> break;
>> + if (buf_cpy)
>> + memcpy(buf, buf_cpy, buf_size);
>> memcpy(desc, &desc_cpy, sizeof(desc_cpy));
>> -
>
> Unrelated change?
>
During internal review it was pointed out that this function contains a
lot of empty lines, this was my feeble attempt to at least partially
reduce their count.
>> msleep(ICE_SQ_SEND_DELAY_TIME_MS);
>> } while (++idx < ICE_SQ_SEND_MAX_EXECUTE);
>> + kfree(buf_cpy);
>> return status;
>> }
>
> The diff looks good otherwise.
>
> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
>
>
> Kind regards,
>
> Paul
Thanks,
Dawid
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Intel-wired-lan] [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE
2026-01-13 19:38 ` [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE Dawid Osuchowski
@ 2026-01-14 9:16 ` Paul Menzel
2026-02-27 6:06 ` Rinitha, SX
1 sibling, 0 replies; 8+ messages in thread
From: Paul Menzel @ 2026-01-14 9:16 UTC (permalink / raw)
To: Dawid Osuchowski
Cc: intel-wired-lan, netdev, Jakub Staniszewski, stable,
Aleksandr Loktionov, Przemek Kitszel
Dear Dawid, dear Jakub,
Thank you for your patch.
Am 13.01.26 um 20:38 schrieb Dawid Osuchowski:
> From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
>
> Executing ethtool -m can fail reporting a netlink I/O error while firmware
> link management holds the i2c bus used to communicate with the module.
>
> According to Intel(R) Ethernet Controller E810 Datasheet Rev 2.8 [1]
> Section 3.3.10.4 Read/Write SFF EEPROM (0x06EE)
> request should to be retried upon receiving EBUSY from firmware.
>
> Commit e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
> implemented it only for part of ice_get_module_eeprom(), leaving all other
> calls to ice_aq_sff_eeprom() vulnerable to returning early on getting
> EBUSY without retrying.
>
> Remove the retry loop from ice_get_module_eeprom() and add Admin Queue
> (AQ) command with opcode 0x06EE to the list of commands that should be
> retried on receiving EBUSY from firmware.
>
> Cc: stable@vger.kernel.org
> Fixes: e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
> Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
> Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Link: https://www.intel.com/content/www/us/en/content-details/613875/intel-ethernet-controller-e810-datasheet.html [1]
> ---
> drivers/net/ethernet/intel/ice/ice_common.c | 1 +
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 35 ++++++++------------
> 2 files changed, 15 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index aab00c44e9b2..26eb8e05498b 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -1854,6 +1854,7 @@ static bool ice_should_retry_sq_send_cmd(u16 opcode)
> case ice_aqc_opc_lldp_stop:
> case ice_aqc_opc_lldp_start:
> case ice_aqc_opc_lldp_filter_ctrl:
> + case ice_aqc_opc_sff_eeprom:
> return true;
> }
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index 3565a5d96c6d..478876908db1 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -4496,7 +4496,7 @@ ice_get_module_eeprom(struct net_device *netdev,
> u8 addr = ICE_I2C_EEPROM_DEV_ADDR;
> struct ice_hw *hw = &pf->hw;
> bool is_sfp = false;
> - unsigned int i, j;
> + unsigned int i;
> u16 offset = 0;
> u8 page = 0;
> int status;
> @@ -4538,26 +4538,19 @@ ice_get_module_eeprom(struct net_device *netdev,
> if (page == 0 || !(data[0x2] & 0x4)) {
> u32 copy_len;
>
> - /* If i2c bus is busy due to slow page change or
> - * link management access, call can fail. This is normal.
> - * So we retry this a few times.
> - */
> - for (j = 0; j < 4; j++) {
> - status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
> - !is_sfp, value,
> - SFF_READ_BLOCK_SIZE,
> - 0, NULL);
> - netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%X)\n",
> - addr, offset, page, is_sfp,
> - value[0], value[1], value[2], value[3],
> - value[4], value[5], value[6], value[7],
> - status);
> - if (status) {
> - usleep_range(1500, 2500);
> - memset(value, 0, SFF_READ_BLOCK_SIZE);
> - continue;
> - }
> - break;
> + status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
> + !is_sfp, value,
> + SFF_READ_BLOCK_SIZE,
> + 0, NULL);
> + netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%pe)\n",
> + addr, offset, page, is_sfp,
> + value[0], value[1], value[2], value[3],
> + value[4], value[5], value[6], value[7],
> + ERR_PTR(status));
> + if (status) {
> + netdev_err(netdev, "%s: error reading module EEPROM: status %pe\n",
> + __func__, ERR_PTR(status));
> + return status;
> }
>
> /* Make sure we have enough room for the new block */
Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
Kind regards,
Paul
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ
2026-01-13 19:38 ` [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ Dawid Osuchowski
2026-01-13 22:31 ` [Intel-wired-lan] " Paul Menzel
@ 2026-02-27 6:05 ` Rinitha, SX
1 sibling, 0 replies; 8+ messages in thread
From: Rinitha, SX @ 2026-02-27 6:05 UTC (permalink / raw)
To: Dawid Osuchowski, intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org, stable@vger.kernel.org,
Loktionov, Aleksandr, Jakub Staniszewski, Kitszel, Przemyslaw
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Dawid Osuchowski
> Sent: 14 January 2026 01:08
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; stable@vger.kernel.org; Loktionov, Aleksandr <aleksandr.loktionov@intel.com>; Jakub Staniszewski <jakub.staniszewski@linux.intel.com>; Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>; Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ
>
> From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
>
> Add retry mechanism for indirect Admin Queue (AQ) commands. To do so we need to keep the command buffer.
>
> This technically reverts commit 43a630e37e25
> ("ice: remove unused buffer copy code in ice_sq_send_cmd_retry()"), but combines it with a fix in the logic by using a kmemdup() call, making it more robust and less likely to break in the future due to programmer error.
>
> Cc: Michal Schmidt <mschmidt@redhat.com>
> Cc: stable@vger.kernel.org
> Fixes: 3056df93f7a8 ("ice: Re-send some AQ commands, as result of EBUSY AQ error")
> Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
> Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> ---
> Ccing Michal, given they are the author of the "reverted" commit.
>
> drivers/net/ethernet/intel/ice/ice_common.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE
2026-01-13 19:38 ` [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE Dawid Osuchowski
2026-01-14 9:16 ` [Intel-wired-lan] " Paul Menzel
@ 2026-02-27 6:06 ` Rinitha, SX
1 sibling, 0 replies; 8+ messages in thread
From: Rinitha, SX @ 2026-02-27 6:06 UTC (permalink / raw)
To: Dawid Osuchowski, intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org, Jakub Staniszewski,
stable@vger.kernel.org, Loktionov, Aleksandr, Kitszel, Przemyslaw
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Dawid Osuchowski
> Sent: 14 January 2026 01:08
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; Jakub Staniszewski <jakub.staniszewski@linux.intel.com>; stable@vger.kernel.org; Dawid Osuchowski <dawid.osuchowski@linux.intel.com>; Loktionov, Aleksandr <aleksandr.loktionov@intel.com>; Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE
>
> From: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
>
> Executing ethtool -m can fail reporting a netlink I/O error while firmware link management holds the i2c bus used to communicate with the module.
>
> According to Intel(R) Ethernet Controller E810 Datasheet Rev 2.8 [1] Section 3.3.10.4 Read/Write SFF EEPROM (0x06EE) request should to be retried upon receiving EBUSY from firmware.
>
> Commit e9c9692c8a81 ("ice: Reimplement module reads used by ethtool") implemented it only for part of ice_get_module_eeprom(), leaving all other calls to ice_aq_sff_eeprom() vulnerable to returning early on getting EBUSY without retrying.
>
> Remove the retry loop from ice_get_module_eeprom() and add Admin Queue
(AQ) command with opcode 0x06EE to the list of commands that should be retried on receiving EBUSY from firmware.
>
> Cc: stable@vger.kernel.org
> Fixes: e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
> Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
> Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Link: https://www.intel.com/content/www/us/en/content-details/613875/intel-ethernet-controller-e810-datasheet.html [1]
> ---
> drivers/net/ethernet/intel/ice/ice_common.c | 1 + drivers/net/ethernet/intel/ice/ice_ethtool.c | 35 ++++++++------------
> 2 files changed, 15 insertions(+), 21 deletions(-)
>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-02-27 6:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-13 19:38 [PATCH iwl-net 0/2] ice: fix AQ command 0x06EE usage by retrying Dawid Osuchowski
2026-01-13 19:38 ` [PATCH iwl-net 1/2] ice: reintroduce retry mechanism for indirect AQ Dawid Osuchowski
2026-01-13 22:31 ` [Intel-wired-lan] " Paul Menzel
2026-01-14 8:15 ` Dawid Osuchowski
2026-02-27 6:05 ` Rinitha, SX
2026-01-13 19:38 ` [PATCH iwl-net 2/2] ice: fix retry for AQ command 0x06EE Dawid Osuchowski
2026-01-14 9:16 ` [Intel-wired-lan] " Paul Menzel
2026-02-27 6:06 ` Rinitha, SX
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox