Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode
@ 2024-09-20 16:59 Marcin Szycik
  2024-09-20 16:59 ` [Intel-wired-lan] [PATCH iwl-net v2 2/2] ice: Fix netif_is_ice() in " Marcin Szycik
  2024-09-20 17:14 ` [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering " Brett Creeley
  0 siblings, 2 replies; 4+ messages in thread
From: Marcin Szycik @ 2024-09-20 16:59 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, Marcin Szycik, maciej.fijalkowski, Przemek Kitszel,
	mateusz.polchlopek

If DDP package is missing or corrupted, the driver should enter Safe Mode.
Instead, an error is returned and probe fails.

Don't check return value of ice_init_ddp_config() to fix this.

Change ice_init_ddp_config() type to void, as now its return is never
checked.

Repro:
* Remove or rename DDP package (/lib/firmware/intel/ice/ddp/ice.pkg)
* Load ice

Fixes: cc5776fe1832 ("ice: Enable switching default Tx scheduler topology")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
---
v2: Change ice_init_ddp_config() type to void
---
 drivers/net/ethernet/intel/ice/ice_main.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 0f5c9d347806..aeebf4ae25ae 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -4548,34 +4548,27 @@ ice_init_tx_topology(struct ice_hw *hw, const struct firmware *firmware)
  *
  * This function loads DDP file from the disk, then initializes Tx
  * topology. At the end DDP package is loaded on the card.
- *
- * Return: zero when init was successful, negative values otherwise.
  */
-static int ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
+static void ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
 {
 	struct device *dev = ice_pf_to_dev(pf);
 	const struct firmware *firmware = NULL;
 	int err;
 
 	err = ice_request_fw(pf, &firmware);
-	if (err) {
+	if (err)
 		dev_err(dev, "Fail during requesting FW: %d\n", err);
-		return err;
-	}
 
 	err = ice_init_tx_topology(hw, firmware);
 	if (err) {
 		dev_err(dev, "Fail during initialization of Tx topology: %d\n",
 			err);
 		release_firmware(firmware);
-		return err;
 	}
 
 	/* Download firmware to device */
 	ice_load_pkg(firmware, pf);
 	release_firmware(firmware);
-
-	return 0;
 }
 
 /**
@@ -4748,9 +4741,7 @@ int ice_init_dev(struct ice_pf *pf)
 
 	ice_init_feature_support(pf);
 
-	err = ice_init_ddp_config(hw, pf);
-	if (err)
-		return err;
+	ice_init_ddp_config(hw, pf);
 
 	/* if ice_init_ddp_config fails, ICE_FLAG_ADV_FEATURES bit won't be
 	 * set in pf->state, which will cause ice_is_safe_mode to return
-- 
2.45.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Intel-wired-lan] [PATCH iwl-net v2 2/2] ice: Fix netif_is_ice() in Safe Mode
  2024-09-20 16:59 [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode Marcin Szycik
@ 2024-09-20 16:59 ` Marcin Szycik
  2024-09-20 17:14 ` [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering " Brett Creeley
  1 sibling, 0 replies; 4+ messages in thread
From: Marcin Szycik @ 2024-09-20 16:59 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, Marcin Szycik, maciej.fijalkowski, Przemek Kitszel,
	mateusz.polchlopek

netif_is_ice() works by checking the pointer to netdev ops. However, it
only checks for the default ice_netdev_ops, not ice_netdev_safe_mode_ops,
so in Safe Mode it always returns false, which is unintuitive. While it
doesn't look like netif_is_ice() is currently being called anywhere in Safe
Mode, this could change and potentially lead to unexpected behaviour.

Fixes: df006dd4b1dc ("ice: Add initial support framework for LAG")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index aeebf4ae25ae..f0f27e78bde9 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -87,7 +87,8 @@ ice_indr_setup_tc_cb(struct net_device *netdev, struct Qdisc *sch,
 
 bool netif_is_ice(const struct net_device *dev)
 {
-	return dev && (dev->netdev_ops == &ice_netdev_ops);
+	return dev && (dev->netdev_ops == &ice_netdev_ops ||
+		       dev->netdev_ops == &ice_netdev_safe_mode_ops);
 }
 
 /**
-- 
2.45.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode
  2024-09-20 16:59 [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode Marcin Szycik
  2024-09-20 16:59 ` [Intel-wired-lan] [PATCH iwl-net v2 2/2] ice: Fix netif_is_ice() in " Marcin Szycik
@ 2024-09-20 17:14 ` Brett Creeley
  2024-09-23 10:13   ` Marcin Szycik
  1 sibling, 1 reply; 4+ messages in thread
From: Brett Creeley @ 2024-09-20 17:14 UTC (permalink / raw)
  To: Marcin Szycik, intel-wired-lan
  Cc: netdev, maciej.fijalkowski, Przemek Kitszel, mateusz.polchlopek



On 9/20/2024 9:59 AM, Marcin Szycik wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> 
> 
> If DDP package is missing or corrupted, the driver should enter Safe Mode.
> Instead, an error is returned and probe fails.
> 
> Don't check return value of ice_init_ddp_config() to fix this.
> 
> Change ice_init_ddp_config() type to void, as now its return is never
> checked.
> 
> Repro:
> * Remove or rename DDP package (/lib/firmware/intel/ice/ddp/ice.pkg)
> * Load ice
> 
> Fixes: cc5776fe1832 ("ice: Enable switching default Tx scheduler topology")
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
> ---
> v2: Change ice_init_ddp_config() type to void
> ---
>   drivers/net/ethernet/intel/ice/ice_main.c | 15 +++------------
>   1 file changed, 3 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
> index 0f5c9d347806..aeebf4ae25ae 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -4548,34 +4548,27 @@ ice_init_tx_topology(struct ice_hw *hw, const struct firmware *firmware)
>    *
>    * This function loads DDP file from the disk, then initializes Tx
>    * topology. At the end DDP package is loaded on the card.
> - *
> - * Return: zero when init was successful, negative values otherwise.
>    */
> -static int ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
> +static void ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
>   {
>          struct device *dev = ice_pf_to_dev(pf);
>          const struct firmware *firmware = NULL;
>          int err;
> 
>          err = ice_request_fw(pf, &firmware);
> -       if (err) {
> +       if (err)
>                  dev_err(dev, "Fail during requesting FW: %d\n", err);
> -               return err;
> -       }
> 
>          err = ice_init_tx_topology(hw, firmware);
>          if (err) {
>                  dev_err(dev, "Fail during initialization of Tx topology: %d\n",
>                          err);
>                  release_firmware(firmware);
> -               return err;
>          }
> 
>          /* Download firmware to device */
>          ice_load_pkg(firmware, pf);
>          release_firmware(firmware);
> -
> -       return 0;
>   }
> 
>   /**
> @@ -4748,9 +4741,7 @@ int ice_init_dev(struct ice_pf *pf)
> 
>          ice_init_feature_support(pf);
> 
> -       err = ice_init_ddp_config(hw, pf);
> -       if (err)
> -               return err;
> +       ice_init_ddp_config(hw, pf);

I just commented this on v1 as I didn't expect it to be resent. I'm also 
okay with Maciej's suggestion, but I wanted to offer an alternative option.

As an alternative solution you could potentially do the following, which
would make the flow more readable:

err = ice_init_ddp_config(hw, pf);
if (err || ice_is_safe_mode(pf))
        ice_set_safe_mode_caps(hw);

Also, should there be some sort of messaging if the device goes into
safe mode? I wonder if a dev_dbg() would be better than nothing. If 
ice_init_ddp_config() fails, then it will print an error message, so 
maybe a dev_warn/info() is warranted if (err)? Of course this would 
depend on ice_init_ddp_config() to return a non-void value.

Thanks,

Brett

> 
>          /* if ice_init_ddp_config fails, ICE_FLAG_ADV_FEATURES bit won't be
>           * set in pf->state, which will cause ice_is_safe_mode to return
> --
> 2.45.0
> 
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode
  2024-09-20 17:14 ` [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering " Brett Creeley
@ 2024-09-23 10:13   ` Marcin Szycik
  0 siblings, 0 replies; 4+ messages in thread
From: Marcin Szycik @ 2024-09-23 10:13 UTC (permalink / raw)
  To: Brett Creeley, intel-wired-lan
  Cc: netdev, mateusz.polchlopek, maciej.fijalkowski, Przemek Kitszel



On 20.09.2024 19:14, Brett Creeley wrote:
> 
> 
> On 9/20/2024 9:59 AM, Marcin Szycik wrote:
>> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
>>
>>
>> If DDP package is missing or corrupted, the driver should enter Safe Mode.
>> Instead, an error is returned and probe fails.
>>
>> Don't check return value of ice_init_ddp_config() to fix this.
>>
>> Change ice_init_ddp_config() type to void, as now its return is never
>> checked.
>>
>> Repro:
>> * Remove or rename DDP package (/lib/firmware/intel/ice/ddp/ice.pkg)
>> * Load ice
>>
>> Fixes: cc5776fe1832 ("ice: Enable switching default Tx scheduler topology")
>> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
>> Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
>> ---
>> v2: Change ice_init_ddp_config() type to void
>> ---
>>   drivers/net/ethernet/intel/ice/ice_main.c | 15 +++------------
>>   1 file changed, 3 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
>> index 0f5c9d347806..aeebf4ae25ae 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_main.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
>> @@ -4548,34 +4548,27 @@ ice_init_tx_topology(struct ice_hw *hw, const struct firmware *firmware)
>>    *
>>    * This function loads DDP file from the disk, then initializes Tx
>>    * topology. At the end DDP package is loaded on the card.
>> - *
>> - * Return: zero when init was successful, negative values otherwise.
>>    */
>> -static int ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
>> +static void ice_init_ddp_config(struct ice_hw *hw, struct ice_pf *pf)
>>   {
>>          struct device *dev = ice_pf_to_dev(pf);
>>          const struct firmware *firmware = NULL;
>>          int err;
>>
>>          err = ice_request_fw(pf, &firmware);
>> -       if (err) {
>> +       if (err)
>>                  dev_err(dev, "Fail during requesting FW: %d\n", err);
>> -               return err;
>> -       }
>>
>>          err = ice_init_tx_topology(hw, firmware);
>>          if (err) {
>>                  dev_err(dev, "Fail during initialization of Tx topology: %d\n",
>>                          err);
>>                  release_firmware(firmware);
>> -               return err;
>>          }
>>
>>          /* Download firmware to device */
>>          ice_load_pkg(firmware, pf);
>>          release_firmware(firmware);
>> -
>> -       return 0;
>>   }
>>
>>   /**
>> @@ -4748,9 +4741,7 @@ int ice_init_dev(struct ice_pf *pf)
>>
>>          ice_init_feature_support(pf);
>>
>> -       err = ice_init_ddp_config(hw, pf);
>> -       if (err)
>> -               return err;
>> +       ice_init_ddp_config(hw, pf);
> 
> I just commented this on v1 as I didn't expect it to be resent. I'm also okay with Maciej's suggestion, but I wanted to offer an alternative option.
> 
> As an alternative solution you could potentially do the following, which
> would make the flow more readable:
> 
> err = ice_init_ddp_config(hw, pf);
> if (err || ice_is_safe_mode(pf))
>        ice_set_safe_mode_caps(hw);

This sounds reasonable, I'll change it if there will be no more comments.

> Also, should there be some sort of messaging if the device goes into
> safe mode? I wonder if a dev_dbg() would be better than nothing. If ice_init_ddp_config() fails, then it will print an error message, so maybe a dev_warn/info() is warranted if (err)? Of course this would depend on ice_init_ddp_config() to return a non-void value.

ice_request_fw() already prints a dev_err() message when entering safe mode, so I don't think it's necessary here.

Thanks,
Marcin
> 
> Thanks,
> 
> Brett
> 
>>
>>          /* if ice_init_ddp_config fails, ICE_FLAG_ADV_FEATURES bit won't be
>>           * set in pf->state, which will cause ice_is_safe_mode to return
>> -- 
>> 2.45.0
>>
>>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-09-23 10:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-20 16:59 [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering Safe Mode Marcin Szycik
2024-09-20 16:59 ` [Intel-wired-lan] [PATCH iwl-net v2 2/2] ice: Fix netif_is_ice() in " Marcin Szycik
2024-09-20 17:14 ` [Intel-wired-lan] [PATCH iwl-net v2 1/2] ice: Fix entering " Brett Creeley
2024-09-23 10:13   ` Marcin Szycik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox