[Intel-wired-lan] [tnguy-net-queue:200GbE] BUILD SUCCESS 02d9009f4e8c27dcf10c3e39bc0666436686a219

2024-02-10 Thread kernel test robot
tree/branch: 
https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git 200GbE
branch HEAD: 02d9009f4e8c27dcf10c3e39bc0666436686a219  selftests: net: add more 
missing kernel config

elapsed time: 2241m

configs tested: 262
configs skipped: 3

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha allnoconfig   gcc  
alphaallyesconfig   gcc  
alpha   defconfig   gcc  
arc  allmodconfig   gcc  
arc   allnoconfig   gcc  
arc  allyesconfig   gcc  
arc  axs103_smp_defconfig   gcc  
arc defconfig   gcc  
arc haps_hs_defconfig   gcc  
arc   randconfig-001-20240209   gcc  
arc   randconfig-001-20240210   gcc  
arc   randconfig-002-20240209   gcc  
arc   randconfig-002-20240210   gcc  
arcvdk_hs38_smp_defconfig   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
armdove_defconfig   gcc  
arm  jornada720_defconfig   clang
arm lpc32xx_defconfig   clang
armmvebu_v5_defconfig   gcc  
arm mxs_defconfig   clang
arm   omap2plus_defconfig   gcc  
arm   randconfig-001-20240210   gcc  
arm   randconfig-002-20240209   gcc  
arm   randconfig-002-20240210   gcc  
arm   randconfig-003-20240209   gcc  
arm   randconfig-003-20240210   gcc  
arm   randconfig-004-20240209   gcc  
arm   randconfig-004-20240210   gcc  
armshmobile_defconfig   gcc  
arm socfpga_defconfig   gcc  
arm   spear13xx_defconfig   gcc  
arm   stm32_defconfig   gcc  
arm   versatile_defconfig   gcc  
armvexpress_defconfig   gcc  
arm64alldefconfig   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64   defconfig   gcc  
arm64 randconfig-001-20240210   clang
arm64 randconfig-002-20240210   gcc  
arm64 randconfig-003-20240210   gcc  
arm64 randconfig-004-20240210   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240209   gcc  
csky  randconfig-001-20240210   gcc  
csky  randconfig-002-20240209   gcc  
csky  randconfig-002-20240210   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240210   clang
hexagon   randconfig-002-20240210   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240210   clang
i386 buildonly-randconfig-002-20240210   gcc  
i386 buildonly-randconfig-003-20240209   gcc  
i386 buildonly-randconfig-003-20240210   clang
i386 buildonly-randconfig-004-20240210   clang
i386 buildonly-randconfig-005-20240210   clang
i386 buildonly-randconfig-006-20240209   gcc  
i386 buildonly-randconfig-006-20240210   clang
i386defconfig   clang
i386  randconfig-001-20240210   gcc  
i386  randconfig-002-20240209   gcc  
i386  randconfig-002-20240210   gcc  
i386  randconfig-003-20240210   clang
i386  randconfig-004-20240210   clang
i386  randconfig-005-20240210   gcc  
i386  randconfig-006-20240209   gcc  
i386  randconfig-006-20240210   gcc  
i386  randconfig-011-20240209   gcc  
i386  randconfig-011-20240210   clang
i386  randconfig-012-20240209   gcc  
i386  randconfig-012-20240210   clang
i386  randconfig-013-20240210   clang
i386  randconfig-014-20240209   gcc  
i386

[Intel-wired-lan] [tnguy-net-queue:dev-queue] BUILD SUCCESS b1011aaeb1aacceb4a4f998ef5bc23358971cff6

2024-02-10 Thread kernel test robot
tree/branch: 
https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git dev-queue
branch HEAD: b1011aaeb1aacceb4a4f998ef5bc23358971cff6  idpf: disable local BH 
when scheduling napi for marker packets

elapsed time: 1449m

configs tested: 179
configs skipped: 3

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha allnoconfig   gcc  
alphaallyesconfig   gcc  
alpha   defconfig   gcc  
arc  allmodconfig   gcc  
arc   allnoconfig   gcc  
arc  allyesconfig   gcc  
arc  axs103_smp_defconfig   gcc  
arc defconfig   gcc  
arc   randconfig-001-20240210   gcc  
arc   randconfig-002-20240210   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
armdove_defconfig   gcc  
arm lpc18xx_defconfig   clang
arm   randconfig-001-20240210   gcc  
arm   randconfig-002-20240210   gcc  
arm   randconfig-003-20240210   gcc  
arm   randconfig-004-20240210   gcc  
arm socfpga_defconfig   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64   defconfig   gcc  
arm64 randconfig-001-20240210   clang
arm64 randconfig-002-20240210   gcc  
arm64 randconfig-003-20240210   gcc  
arm64 randconfig-004-20240210   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240210   gcc  
csky  randconfig-002-20240210   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240210   clang
hexagon   randconfig-002-20240210   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240210   clang
i386 buildonly-randconfig-002-20240210   gcc  
i386 buildonly-randconfig-003-20240210   clang
i386 buildonly-randconfig-004-20240210   clang
i386 buildonly-randconfig-005-20240210   clang
i386 buildonly-randconfig-006-20240210   clang
i386defconfig   clang
i386  randconfig-001-20240210   gcc  
i386  randconfig-002-20240210   gcc  
i386  randconfig-003-20240210   clang
i386  randconfig-004-20240210   clang
i386  randconfig-005-20240210   gcc  
i386  randconfig-006-20240210   gcc  
i386  randconfig-011-20240210   clang
i386  randconfig-012-20240210   clang
i386  randconfig-013-20240210   clang
i386  randconfig-014-20240210   gcc  
i386  randconfig-015-20240210   gcc  
i386  randconfig-016-20240210   gcc  
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240210   gcc  
loongarch randconfig-002-20240210   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
m68k  hp300_defconfig   gcc  
m68k   m5275evb_defconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips loongson2k_defconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240210   gcc  
nios2

[Intel-wired-lan] [tnguy-next-queue:dev-queue] BUILD SUCCESS 7c9b8de2aec60f9217e04a6b13f325b81aec00bd

2024-02-10 Thread kernel test robot
tree/branch: 
https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git dev-queue
branch HEAD: 7c9b8de2aec60f9217e04a6b13f325b81aec00bd  ice: Add switch recipe 
reusing feature

elapsed time: 1442m

configs tested: 178
configs skipped: 3

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha allnoconfig   gcc  
alphaallyesconfig   gcc  
alpha   defconfig   gcc  
arc  allmodconfig   gcc  
arc   allnoconfig   gcc  
arc  allyesconfig   gcc  
arc defconfig   gcc  
arc   randconfig-001-20240210   gcc  
arc   randconfig-002-20240210   gcc  
arcvdk_hs38_smp_defconfig   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
arm  jornada720_defconfig   clang
arm lpc32xx_defconfig   clang
arm mxs_defconfig   clang
arm   randconfig-001-20240210   gcc  
arm   randconfig-002-20240210   gcc  
arm   randconfig-003-20240210   gcc  
arm   randconfig-004-20240210   gcc  
armshmobile_defconfig   gcc  
arm   stm32_defconfig   gcc  
arm64alldefconfig   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64   defconfig   gcc  
arm64 randconfig-001-20240210   clang
arm64 randconfig-002-20240210   gcc  
arm64 randconfig-003-20240210   gcc  
arm64 randconfig-004-20240210   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240210   gcc  
csky  randconfig-002-20240210   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240210   clang
hexagon   randconfig-002-20240210   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240210   clang
i386 buildonly-randconfig-002-20240210   gcc  
i386 buildonly-randconfig-003-20240210   clang
i386 buildonly-randconfig-004-20240210   clang
i386 buildonly-randconfig-005-20240210   clang
i386 buildonly-randconfig-006-20240210   clang
i386defconfig   clang
i386  randconfig-001-20240210   gcc  
i386  randconfig-002-20240210   gcc  
i386  randconfig-003-20240210   clang
i386  randconfig-004-20240210   clang
i386  randconfig-005-20240210   gcc  
i386  randconfig-006-20240210   gcc  
i386  randconfig-011-20240210   clang
i386  randconfig-012-20240210   clang
i386  randconfig-013-20240210   clang
i386  randconfig-014-20240210   gcc  
i386  randconfig-015-20240210   gcc  
i386  randconfig-016-20240210   gcc  
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240210   gcc  
loongarch randconfig-002-20240210   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
m68k  hp300_defconfig   gcc  
m68km5307c3_defconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips   xway_defconfig   clang
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2

[Intel-wired-lan] [PATCH iwl-next v1 0/2] net: intel: cleanup power ops

2024-02-10 Thread Jesse Brandeburg
Do a quick refactor of igb to clean up some unnecessary declarations,
noticed while doing the real work of 2/2.

Follow that with a change of all the Intel drivers to use the current
power management declaration APIs, to avoid complication and maintenance
issues with CONFIG_PM=. This is as per [1]

Mostly compile-tested only.

ice driver is skipped in this series because the driver was fixed as
part of a bug fix to make it use the new APIs, and will be arriving via
-net tree.

[1] https://lore.kernel.org/netdev/20211207002102.26414-1-p...@crapouillou.net/

Jesse Brandeburg (2):
  igb: simplify pci ops declaration
  net: intel: implement modern PM ops declarations

 drivers/net/ethernet/intel/e100.c |  8 +--
 drivers/net/ethernet/intel/e1000/e1000_main.c | 14 ++---
 drivers/net/ethernet/intel/e1000e/netdev.c| 22 +++
 drivers/net/ethernet/intel/fm10k/fm10k_pci.c  | 10 ++--
 drivers/net/ethernet/intel/i40e/i40e_main.c   | 10 ++--
 drivers/net/ethernet/intel/iavf/iavf_main.c   |  8 +--
 drivers/net/ethernet/intel/igb/igb_main.c | 59 ---
 drivers/net/ethernet/intel/igbvf/netdev.c |  6 +-
 drivers/net/ethernet/intel/igc/igc_main.c | 24 +++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |  8 +--
 .../net/ethernet/intel/ixgbevf/ixgbevf_main.c |  8 +--
 11 files changed, 74 insertions(+), 103 deletions(-)

base-commit: b63cc73341e076961d564a74cc3d29b2fd444079
-- 
2.39.3



[Intel-wired-lan] [PATCH iwl-next v1 1/2] igb: simplify pci ops declaration

2024-02-10 Thread Jesse Brandeburg
The igb driver was pre-declaring tons of functions just so that it could
have an early declaration of the pci_driver struct.

Delete a bunch of the declarations and move the struct to the bottom of the
file, after all the functions are declared.

Reviewed-by: Alan Brady 
Signed-off-by: Jesse Brandeburg 
---
e1p v2: add back mistakenly deleted pm ops struct.
---
 drivers/net/ethernet/intel/igb/igb_main.c | 51 ++-
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c 
b/drivers/net/ethernet/intel/igb/igb_main.c
index 4df8d4153aa5..fdca4901defa 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -106,8 +106,6 @@ static int igb_setup_all_rx_resources(struct igb_adapter *);
 static void igb_free_all_tx_resources(struct igb_adapter *);
 static void igb_free_all_rx_resources(struct igb_adapter *);
 static void igb_setup_mrqc(struct igb_adapter *);
-static int igb_probe(struct pci_dev *, const struct pci_device_id *);
-static void igb_remove(struct pci_dev *pdev);
 static void igb_init_queue_configuration(struct igb_adapter *adapter);
 static int igb_sw_init(struct igb_adapter *);
 int igb_open(struct net_device *);
@@ -178,20 +176,6 @@ static int igb_vf_configure(struct igb_adapter *adapter, 
int vf);
 static int igb_disable_sriov(struct pci_dev *dev, bool reinit);
 #endif
 
-static int igb_suspend(struct device *);
-static int igb_resume(struct device *);
-static int igb_runtime_suspend(struct device *dev);
-static int igb_runtime_resume(struct device *dev);
-static int igb_runtime_idle(struct device *dev);
-#ifdef CONFIG_PM
-static const struct dev_pm_ops igb_pm_ops = {
-   SET_SYSTEM_SLEEP_PM_OPS(igb_suspend, igb_resume)
-   SET_RUNTIME_PM_OPS(igb_runtime_suspend, igb_runtime_resume,
-   igb_runtime_idle)
-};
-#endif
-static void igb_shutdown(struct pci_dev *);
-static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
 #ifdef CONFIG_IGB_DCA
 static int igb_notify_dca(struct notifier_block *, unsigned long, void *);
 static struct notifier_block dca_notifier = {
@@ -219,19 +203,6 @@ static const struct pci_error_handlers igb_err_handler = {
 
 static void igb_init_dmac(struct igb_adapter *adapter, u32 pba);
 
-static struct pci_driver igb_driver = {
-   .name = igb_driver_name,
-   .id_table = igb_pci_tbl,
-   .probe= igb_probe,
-   .remove   = igb_remove,
-#ifdef CONFIG_PM
-   .driver.pm = &igb_pm_ops,
-#endif
-   .shutdown = igb_shutdown,
-   .sriov_configure = igb_pci_sriov_configure,
-   .err_handler = &igb_err_handler
-};
-
 MODULE_AUTHOR("Intel Corporation, ");
 MODULE_DESCRIPTION("Intel(R) Gigabit Ethernet Network Driver");
 MODULE_LICENSE("GPL v2");
@@ -647,6 +618,8 @@ struct net_device *igb_get_hw_dev(struct e1000_hw *hw)
return adapter->netdev;
 }
 
+static struct pci_driver igb_driver;
+
 /**
  *  igb_init_module - Driver Registration Routine
  *
@@ -10169,4 +10142,24 @@ static void igb_nfc_filter_restore(struct igb_adapter 
*adapter)
 
spin_unlock(&adapter->nfc_lock);
 }
+
+#ifdef CONFIG_PM
+static const struct dev_pm_ops igb_pm_ops = {
+   SET_SYSTEM_SLEEP_PM_OPS(igb_suspend, igb_resume)
+   SET_RUNTIME_PM_OPS(igb_runtime_suspend, igb_runtime_resume,
+   igb_runtime_idle)
+};
+#endif
+
+static struct pci_driver igb_driver = {
+   .name = igb_driver_name,
+   .id_table = igb_pci_tbl,
+   .probe= igb_probe,
+   .remove   = igb_remove,
+   .driver.pm = &igb_pm_ops,
+   .shutdown = igb_shutdown,
+   .sriov_configure = igb_pci_sriov_configure,
+   .err_handler = &igb_err_handler
+};
+
 /* igb_main.c */
-- 
2.39.3



[Intel-wired-lan] [PATCH iwl-next v1 2/2] net: intel: implement modern PM ops declarations

2024-02-10 Thread Jesse Brandeburg
Switch the Intel networking drivers to use the new power management ops
declaration formats and macros, which allows us to drop __maybe_unused,
as well as a bunch of ifdef checking CONFIG_PM.

This is safe to do because the compiler drops the unused functions,
verified by checking for any of the power management function symbols
being present in System.map for a build without CONFIG_PM.

If a driver has runtime PM, define the ops with pm_ptr(), and if the
driver has Simple PM, use pm_sleep_ptr(), as well as the new versions of
the macros for declaring the members of the pm_ops structs.

Checked with network-enabled allnoconfig, allyesconfig, allmodconfig on
x64_64.

Reviewed-by: Alan Brady 
Signed-off-by: Jesse Brandeburg 
---
e1p-v2: dropped errant idpf change, updated after v2 1/2 updates to
move the declation down for igb_pm_ops.
---
 drivers/net/ethernet/intel/e100.c |  8 +++
 drivers/net/ethernet/intel/e1000/e1000_main.c | 14 +--
 drivers/net/ethernet/intel/e1000e/netdev.c| 22 +++--
 drivers/net/ethernet/intel/fm10k/fm10k_pci.c  | 10 
 drivers/net/ethernet/intel/i40e/i40e_main.c   | 10 
 drivers/net/ethernet/intel/iavf/iavf_main.c   |  8 +++
 drivers/net/ethernet/intel/igb/igb_main.c | 24 ---
 drivers/net/ethernet/intel/igbvf/netdev.c |  6 ++---
 drivers/net/ethernet/intel/igc/igc_main.c | 24 +++
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |  8 +++
 .../net/ethernet/intel/ixgbevf/ixgbevf_main.c |  8 +++
 11 files changed, 60 insertions(+), 82 deletions(-)

diff --git a/drivers/net/ethernet/intel/e100.c 
b/drivers/net/ethernet/intel/e100.c
index 01f0f12035ca..5a9e8cf4b2ee 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -3037,7 +3037,7 @@ static int __e100_power_off(struct pci_dev *pdev, bool 
wake)
return 0;
 }
 
-static int __maybe_unused e100_suspend(struct device *dev_d)
+static int e100_suspend(struct device *dev_d)
 {
bool wake;
 
@@ -3046,7 +3046,7 @@ static int __maybe_unused e100_suspend(struct device 
*dev_d)
return 0;
 }
 
-static int __maybe_unused e100_resume(struct device *dev_d)
+static int e100_resume(struct device *dev_d)
 {
struct net_device *netdev = dev_get_drvdata(dev_d);
struct nic *nic = netdev_priv(netdev);
@@ -3163,7 +3163,7 @@ static const struct pci_error_handlers e100_err_handler = 
{
.resume = e100_io_resume,
 };
 
-static SIMPLE_DEV_PM_OPS(e100_pm_ops, e100_suspend, e100_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(e100_pm_ops, e100_suspend, e100_resume);
 
 static struct pci_driver e100_driver = {
.name = DRV_NAME,
@@ -3172,7 +3172,7 @@ static struct pci_driver e100_driver = {
.remove =   e100_remove,
 
/* Power Management hooks */
-   .driver.pm =&e100_pm_ops,
+   .driver.pm =pm_sleep_ptr(&e100_pm_ops),
 
.shutdown = e100_shutdown,
.err_handler = &e100_err_handler,
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c 
b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 1d1e93686af2..5b43f9b194fc 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -149,8 +149,8 @@ static int e1000_vlan_rx_kill_vid(struct net_device *netdev,
  __be16 proto, u16 vid);
 static void e1000_restore_vlan(struct e1000_adapter *adapter);
 
-static int __maybe_unused e1000_suspend(struct device *dev);
-static int __maybe_unused e1000_resume(struct device *dev);
+static int e1000_suspend(struct device *dev);
+static int e1000_resume(struct device *dev);
 static void e1000_shutdown(struct pci_dev *pdev);
 
 #ifdef CONFIG_NET_POLL_CONTROLLER
@@ -175,16 +175,14 @@ static const struct pci_error_handlers e1000_err_handler 
= {
.resume = e1000_io_resume,
 };
 
-static SIMPLE_DEV_PM_OPS(e1000_pm_ops, e1000_suspend, e1000_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(e1000_pm_ops, e1000_suspend, e1000_resume);
 
 static struct pci_driver e1000_driver = {
.name = e1000_driver_name,
.id_table = e1000_pci_tbl,
.probe= e1000_probe,
.remove   = e1000_remove,
-   .driver = {
-   .pm = &e1000_pm_ops,
-   },
+   .driver.pm = pm_sleep_ptr(&e1000_pm_ops),
.shutdown = e1000_shutdown,
.err_handler = &e1000_err_handler
 };
@@ -5135,7 +5133,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool 
*enable_wake)
return 0;
 }
 
-static int __maybe_unused e1000_suspend(struct device *dev)
+static int e1000_suspend(struct device *dev)
 {
int retval;
struct pci_dev *pdev = to_pci_dev(dev);
@@ -5147,7 +5145,7 @@ static int __maybe_unused e1000_suspend(struct device 
*dev)
return retval;
 }
 
-static int __maybe_unused e1000_resume(struct device *dev)
+static int e1000_resume(struct device *dev)
 {
struct pci_dev *pdev = to_pci_dev(dev

[Intel-wired-lan] [PATCH iwl-next v1 1/1] igc: Refactor runtime power management flow

2024-02-10 Thread Sasha Neftin
Following the corresponding discussion [1] and [2] refactor the 'igc_open'
method and avoid taking the rtnl_lock() during the 'igc_resume' method.
The rtnl_lock is held by the upper layer and could lead to the deadlock
during resuming from a runtime power management flow. Notify the stack of
the actual queue counts 'netif_set_real_num_*_queues' outside the
'_igc_open' wrapper. This notification doesn't have to be called on each
resume.

Test:
1. Disconnect the ethernet cable
2. Enable the runtime power management via file system:
echo auto > /sys/devices/pci\.../power/control
3. Check the device state (lspci -s  -vvv | grep -i Status)

Link: https://lore.kernel.org/netdev/20231206113934.8d7819857574.I2deb5804
ef1739a2af307283d320ef7d82456494@changeid/#r [1]
Link: https://lore.kernel.org/netdev/20211125074949.5f897431@kicinski-fedo
ra-pc1c0hjn.dhcp.thefacebook.com/t/ [2]
Signed-off-by: Sasha Neftin 
---
 drivers/net/ethernet/intel/igc/igc_main.c | 32 +++
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c 
b/drivers/net/ethernet/intel/igc/igc_main.c
index ba8d3fe186ae..7bd69a4d1ef0 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -5943,15 +5943,6 @@ static int __igc_open(struct net_device *netdev, bool 
resuming)
if (err)
goto err_req_irq;
 
-   /* Notify the stack of the actual queue counts. */
-   err = netif_set_real_num_tx_queues(netdev, adapter->num_tx_queues);
-   if (err)
-   goto err_set_queues;
-
-   err = netif_set_real_num_rx_queues(netdev, adapter->num_rx_queues);
-   if (err)
-   goto err_set_queues;
-
clear_bit(__IGC_DOWN, &adapter->state);
 
for (i = 0; i < adapter->num_q_vectors; i++)
@@ -5972,8 +5963,6 @@ static int __igc_open(struct net_device *netdev, bool 
resuming)
 
return IGC_SUCCESS;
 
-err_set_queues:
-   igc_free_irq(adapter);
 err_req_irq:
igc_release_hw_control(adapter);
igc_power_down_phy_copper_base(&adapter->hw);
@@ -5990,6 +5979,17 @@ static int __igc_open(struct net_device *netdev, bool 
resuming)
 
 int igc_open(struct net_device *netdev)
 {
+   struct igc_adapter *adapter = netdev_priv(netdev);
+   int err;
+
+   /* Notify the stack of the actual queue counts. */
+   err = netif_set_real_num_queues(netdev, adapter->num_tx_queues,
+   adapter->num_rx_queues);
+   if (err) {
+   netdev_err(netdev, "error setting real queue count\n");
+   return err;
+   }
+
return __igc_open(netdev, false);
 }
 
@@ -7191,13 +7191,11 @@ static int __maybe_unused igc_resume(struct device *dev)
 
wr32(IGC_WUS, ~0);
 
-   rtnl_lock();
-   if (!err && netif_running(netdev))
+   if (netif_running(netdev)) {
err = __igc_open(netdev, true);
-
-   if (!err)
-   netif_device_attach(netdev);
-   rtnl_unlock();
+   if (!err)
+   netif_device_attach(netdev);
+   }
 
return err;
 }
-- 
2.34.1