[kvalo-ath:master-pending] BUILD SUCCESS ebbdaef16a808f08f6e16acb2d0ed988bb0edf42

2024-04-11 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 
master-pending
branch HEAD: ebbdaef16a808f08f6e16acb2d0ed988bb0edf42  Merge branch 'pending' 
into master-pending

elapsed time: 928m

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 defconfig   gcc  
arc   randconfig-001-20240412   gcc  
arc   randconfig-002-20240412   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
armmulti_v7_defconfig   gcc  
arm   randconfig-001-20240412   gcc  
arm   randconfig-002-20240412   clang
arm   randconfig-003-20240412   clang
arm   randconfig-004-20240412   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64   defconfig   gcc  
arm64 randconfig-001-20240412   gcc  
arm64 randconfig-002-20240412   gcc  
arm64 randconfig-003-20240412   clang
arm64 randconfig-004-20240412   clang
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240412   gcc  
csky  randconfig-002-20240412   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240412   clang
hexagon   randconfig-002-20240412   clang
i386 alldefconfig   gcc  
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240411   clang
i386 buildonly-randconfig-002-20240411   clang
i386 buildonly-randconfig-003-20240411   clang
i386 buildonly-randconfig-004-20240411   clang
i386 buildonly-randconfig-005-20240411   clang
i386 buildonly-randconfig-006-20240411   clang
i386defconfig   clang
i386  randconfig-001-20240411   gcc  
i386  randconfig-002-20240411   gcc  
i386  randconfig-003-20240411   clang
i386  randconfig-004-20240411   clang
i386  randconfig-005-20240411   gcc  
i386  randconfig-006-20240411   clang
i386  randconfig-011-20240411   clang
i386  randconfig-012-20240411   gcc  
i386  randconfig-013-20240411   gcc  
i386  randconfig-014-20240411   gcc  
i386  randconfig-015-20240411   clang
i386  randconfig-016-20240411   clang
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240412   gcc  
loongarch randconfig-002-20240412   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68k apollo_defconfig   gcc  
m68kdefconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips  cavium_octeon_defconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240412   gcc  
nios2 randconfig-002-20240412   gcc  
openrisc  allnoconfig   gcc  
openrisc allyesconfig   gcc  
openrisc

[kvalo-ath:pending] BUILD SUCCESS 1c55726f32ed5ca0572ad271f45942b9464d9585

2024-04-11 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 
pending
branch HEAD: 1c55726f32ed5ca0572ad271f45942b9464d9585  wifi: ar5523: enable 
proper endpoint verification

elapsed time: 874m

configs tested: 153
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  
archsdk_defconfig   gcc  
arc   randconfig-001-20240412   gcc  
arc   randconfig-002-20240412   gcc  
arm  alldefconfig   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
arm   omap2plus_defconfig   gcc  
arm   randconfig-001-20240412   gcc  
arm   randconfig-002-20240412   clang
arm   randconfig-003-20240412   clang
arm   randconfig-004-20240412   gcc  
armrealview_defconfig   clang
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64   defconfig   gcc  
arm64 randconfig-001-20240412   gcc  
arm64 randconfig-002-20240412   gcc  
arm64 randconfig-003-20240412   clang
arm64 randconfig-004-20240412   clang
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240412   gcc  
csky  randconfig-002-20240412   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240412   clang
hexagon   randconfig-002-20240412   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240411   clang
i386 buildonly-randconfig-002-20240411   clang
i386 buildonly-randconfig-003-20240411   clang
i386 buildonly-randconfig-004-20240411   clang
i386 buildonly-randconfig-005-20240411   clang
i386 buildonly-randconfig-006-20240411   clang
i386defconfig   clang
i386  randconfig-001-20240411   gcc  
i386  randconfig-002-20240411   gcc  
i386  randconfig-003-20240411   clang
i386  randconfig-004-20240411   clang
i386  randconfig-005-20240411   gcc  
i386  randconfig-006-20240411   clang
i386  randconfig-011-20240411   clang
i386  randconfig-012-20240411   gcc  
i386  randconfig-013-20240411   gcc  
i386  randconfig-014-20240411   gcc  
i386  randconfig-015-20240411   clang
i386  randconfig-016-20240411   clang
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240412   gcc  
loongarch randconfig-002-20240412   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips cu1000-neo_defconfig   gcc  
mips  decstation_64_defconfig   gcc  
mips   gcw0_defconfig   clang
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240412   gcc  
nios2 randconfig

Issue with ATH10K driver on sunxi platform using sdio

2024-04-11 Thread Lukas Schmid

Hi,

I am trying to use an QCA9377-3 based module on a custom board based 
around an Allwinner V3s SoC.


The modules are loaded correctly, the module is detected and scanning 
for networks works. However when trying to connect to a network, I get 
the following message about an unaligned scatterlist.


--

[   52.006548] mmc1: new high speed SDIO card at address 0001
[   52.084936] ath10k_sdio mmc1:0001:1: qca9377 hw1.1 sdio target 
0x05020001 chip_id 0x sub :
[   52.084996] ath10k_sdio mmc1:0001:1: kconfig debug 0 debugfs 0 
tracing 0 dfs 0 testmode 0
[   52.088478] ath10k_sdio mmc1:0001:1: firmware ver 
WLAN.TF.1.1.1-00061-QCATFSWPZ-1 api 5 features ignore-otp crc32 7746e551
[   52.258959] ath10k_sdio mmc1:0001:1: failed to fetch board data for 
bus=sdio,vendor=0271,device=0701,subsystem-vendor=,subsystem-device= 
from ath10k/QCA9377/hw1.0/board-2.bin
[   52.307328] ath10k_sdio mmc1:0001:1: board_file api 1 bmi_id N/A 
crc32 544289f7
[   56.217772] ath10k_sdio mmc1:0001:1: htt-ver 3.32 wmi-op 4 htt-op 3 
cal otp max-sta 32 raw 0 hwcrypto 1
[   56.217995] sunxi-mmc 1c1.mmc: unaligned scatterlist: os 4c0 
length 11

[   56.218020] sunxi-mmc 1c1.mmc: map DMA failed
[   56.218035] ath10k_sdio mmc1:0001:1: failed to write to address 
0x12ff5: -22
[   56.218051] ath10k_sdio mmc1:0001:1: failed to write skb to 0x12ff5 
asynchronously: -22

[   56.270321] mmc1: queuing unknown CIS tuple 0x01 [d9 01 ff] (3 bytes)
[   56.277541] mmc1: queuing unknown CIS tuple 0x1a [01 01 00 02 07] (5 
bytes)
[   56.280698] mmc1: queuing unknown CIS tuple 0x1b [c1 41 30 30 ff ff 
32 00] (8 bytes)

[   56.281344] mmc1: queuing unknown CIS tuple 0x14 [] (0 bytes)
[   56.282522] ath: EEPROM regdomain: 0x0
[   56.282542] ath: EEPROM indicates default country code should be used
[   56.282550] ath: doing EEPROM country->regdmn map search
[   56.282559] ath: country maps to regdmn code: 0x3a
[   56.282568] ath: Country alpha2 being used: US
[   56.282576] ath: Regpair used: 0x3a
[   60.308005] sunxi-mmc 1c1.mmc: unaligned scatterlist: os b80 
length 11

[   60.308061] sunxi-mmc 1c1.mmc: map DMA failed
[   60.308078] ath10k_sdio mmc1:0001:1: failed to write to address 
0x12ff5: -22
[   60.308096] ath10k_sdio mmc1:0001:1: failed to write skb to 0x12ff5 
asynchronously: -22


--

Has anyone maybe got an idea as to how this could be fixed?

The kernel running on the board is Linux Mainline 6.8.2

Best regards,
Lukas Schmid




[PATCH net-next v6 10/10] wifi: ath11k: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from struct ath11k_ext_irq_grp by converting it
into a pointer. Then use the leverage alloc_netdev() to allocate the
net_device object at ath11k_ahb_config_ext_irq() for ahb, and
ath11k_pcic_ext_irq_config() for pcic.

The free of the device occurs at ath11k_ahb_free_ext_irq() for the ahb
case, and ath11k_pcic_free_ext_irq() for the pcic case.

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
Tested-by: Kalle Valo 
---
 drivers/net/wireless/ath/ath11k/ahb.c  |  9 +++--
 drivers/net/wireless/ath/ath11k/core.h |  2 +-
 drivers/net/wireless/ath/ath11k/pcic.c | 21 +
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/ahb.c 
b/drivers/net/wireless/ath/ath11k/ahb.c
index 7c0a23517949..7f3f6479d553 100644
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -442,6 +442,7 @@ static void ath11k_ahb_free_ext_irq(struct ath11k_base *ab)
free_irq(ab->irq_num[irq_grp->irqs[j]], irq_grp);
 
netif_napi_del(_grp->napi);
+   free_netdev(irq_grp->napi_ndev);
}
 }
 
@@ -533,8 +534,12 @@ static int ath11k_ahb_config_ext_irq(struct ath11k_base 
*ab)
 
irq_grp->ab = ab;
irq_grp->grp_id = i;
-   init_dummy_netdev(_grp->napi_ndev);
-   netif_napi_add(_grp->napi_ndev, _grp->napi,
+
+   irq_grp->napi_ndev = alloc_netdev_dummy(0);
+   if (!irq_grp->napi_ndev)
+   return -ENOMEM;
+
+   netif_napi_add(irq_grp->napi_ndev, _grp->napi,
   ath11k_ahb_ext_grp_napi_poll);
 
for (j = 0; j < ATH11K_EXT_IRQ_NUM_MAX; j++) {
diff --git a/drivers/net/wireless/ath/ath11k/core.h 
b/drivers/net/wireless/ath/ath11k/core.h
index b3fb74a226fb..590307ca7a11 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -174,7 +174,7 @@ struct ath11k_ext_irq_grp {
u64 timestamp;
bool napi_enabled;
struct napi_struct napi;
-   struct net_device napi_ndev;
+   struct net_device *napi_ndev;
 };
 
 enum ath11k_smbios_cc_type {
diff --git a/drivers/net/wireless/ath/ath11k/pcic.c 
b/drivers/net/wireless/ath/ath11k/pcic.c
index add4db4c50bc..79eb3f9c902f 100644
--- a/drivers/net/wireless/ath/ath11k/pcic.c
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
@@ -316,6 +316,7 @@ static void ath11k_pcic_free_ext_irq(struct ath11k_base *ab)
free_irq(ab->irq_num[irq_grp->irqs[j]], irq_grp);
 
netif_napi_del(_grp->napi);
+   free_netdev(irq_grp->napi_ndev);
}
 }
 
@@ -558,7 +559,7 @@ ath11k_pcic_get_msi_irq(struct ath11k_base *ab, unsigned 
int vector)
 
 static int ath11k_pcic_ext_irq_config(struct ath11k_base *ab)
 {
-   int i, j, ret, num_vectors = 0;
+   int i, j, n, ret, num_vectors = 0;
u32 user_base_data = 0, base_vector = 0;
unsigned long irq_flags;
 
@@ -578,8 +579,11 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base 
*ab)
 
irq_grp->ab = ab;
irq_grp->grp_id = i;
-   init_dummy_netdev(_grp->napi_ndev);
-   netif_napi_add(_grp->napi_ndev, _grp->napi,
+   irq_grp->napi_ndev = alloc_netdev_dummy(0);
+   if (!irq_grp->napi_ndev)
+   return -ENOMEM;
+
+   netif_napi_add(irq_grp->napi_ndev, _grp->napi,
   ath11k_pcic_ext_grp_napi_poll);
 
if (ab->hw_params.ring_mask->tx[i] ||
@@ -601,8 +605,13 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base 
*ab)
int vector = (i % num_vectors) + base_vector;
int irq = ath11k_pcic_get_msi_irq(ab, vector);
 
-   if (irq < 0)
+   if (irq < 0) {
+   for (n = 0; n <= i; n++) {
+   irq_grp = >ext_irq_grp[n];
+   free_netdev(irq_grp->napi_ndev);
+   }
return irq;
+   }
 
ab->irq_num[irq_idx] = irq;
 
@@ -615,6 +624,10 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base 
*ab)
if (ret) {
ath11k_err(ab, "failed request irq %d: %d\n",
   vector, ret);
+   for (n = 0; n <= i; n++) {
+   irq_grp = >ext_irq_grp[n];
+   free_netdev(irq_grp->napi_ndev);
+   }

[PATCH net-next v6 07/10] net: ibm/emac: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from the private struct by converting it
into a pointer. Then use the leverage the new alloc_netdev_dummy()
helper to allocate and initialize dummy devices.

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
---
 drivers/net/ethernet/ibm/emac/mal.c | 14 +++---
 drivers/net/ethernet/ibm/emac/mal.h |  2 +-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/mal.c 
b/drivers/net/ethernet/ibm/emac/mal.c
index 2439f7e96e05..d92dd9c83031 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -605,9 +605,13 @@ static int mal_probe(struct platform_device *ofdev)
INIT_LIST_HEAD(>list);
spin_lock_init(>lock);
 
-   init_dummy_netdev(>dummy_dev);
+   mal->dummy_dev = alloc_netdev_dummy(0);
+   if (!mal->dummy_dev) {
+   err = -ENOMEM;
+   goto fail_unmap;
+   }
 
-   netif_napi_add_weight(>dummy_dev, >napi, mal_poll,
+   netif_napi_add_weight(mal->dummy_dev, >napi, mal_poll,
  CONFIG_IBM_EMAC_POLL_WEIGHT);
 
/* Load power-on reset defaults */
@@ -637,7 +641,7 @@ static int mal_probe(struct platform_device *ofdev)
  GFP_KERNEL);
if (mal->bd_virt == NULL) {
err = -ENOMEM;
-   goto fail_unmap;
+   goto fail_dummy;
}
 
for (i = 0; i < mal->num_tx_chans; ++i)
@@ -703,6 +707,8 @@ static int mal_probe(struct platform_device *ofdev)
free_irq(mal->serr_irq, mal);
  fail2:
dma_free_coherent(>dev, bd_size, mal->bd_virt, mal->bd_dma);
+ fail_dummy:
+   free_netdev(mal->dummy_dev);
  fail_unmap:
dcr_unmap(mal->dcr_host, 0x100);
  fail:
@@ -734,6 +740,8 @@ static void mal_remove(struct platform_device *ofdev)
 
mal_reset(mal);
 
+   free_netdev(mal->dummy_dev);
+
dma_free_coherent(>dev,
  sizeof(struct mal_descriptor) *
  (NUM_TX_BUFF * mal->num_tx_chans +
diff --git a/drivers/net/ethernet/ibm/emac/mal.h 
b/drivers/net/ethernet/ibm/emac/mal.h
index d212373a72e7..e0ddc41186a2 100644
--- a/drivers/net/ethernet/ibm/emac/mal.h
+++ b/drivers/net/ethernet/ibm/emac/mal.h
@@ -205,7 +205,7 @@ struct mal_instance {
int index;
spinlock_t  lock;
 
-   struct net_device   dummy_dev;
+   struct net_device   *dummy_dev;
 
unsigned int features;
 };
-- 
2.43.0




[PATCH net-next v6 09/10] wifi: ath10k: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from struct ath10k by converting it
into a pointer. Then use the leverage alloc_netdev() to allocate the
net_device object at ath10k_core_create(). The free of the device occurs
at ath10k_core_destroy().

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
---
 drivers/net/wireless/ath/ath10k/core.c | 9 +++--
 drivers/net/wireless/ath/ath10k/core.h | 2 +-
 drivers/net/wireless/ath/ath10k/pci.c  | 2 +-
 drivers/net/wireless/ath/ath10k/sdio.c | 2 +-
 drivers/net/wireless/ath/ath10k/snoc.c | 4 ++--
 drivers/net/wireless/ath/ath10k/usb.c  | 2 +-
 6 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c 
b/drivers/net/wireless/ath/ath10k/core.c
index 9ce6f49ab261..8663822e0b8d 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -3673,11 +3673,13 @@ struct ath10k *ath10k_core_create(size_t priv_size, 
struct device *dev,
INIT_WORK(>set_coverage_class_work,
  ath10k_core_set_coverage_class_work);
 
-   init_dummy_netdev(>napi_dev);
+   ar->napi_dev = alloc_netdev_dummy(0);
+   if (!ar->napi_dev)
+   goto err_free_tx_complete;
 
ret = ath10k_coredump_create(ar);
if (ret)
-   goto err_free_tx_complete;
+   goto err_free_netdev;
 
ret = ath10k_debug_create(ar);
if (ret)
@@ -3687,6 +3689,8 @@ struct ath10k *ath10k_core_create(size_t priv_size, 
struct device *dev,
 
 err_free_coredump:
ath10k_coredump_destroy(ar);
+err_free_netdev:
+   free_netdev(ar->napi_dev);
 err_free_tx_complete:
destroy_workqueue(ar->workqueue_tx_complete);
 err_free_aux_wq:
@@ -3708,6 +3712,7 @@ void ath10k_core_destroy(struct ath10k *ar)
 
destroy_workqueue(ar->workqueue_tx_complete);
 
+   free_netdev(ar->napi_dev);
ath10k_debug_destroy(ar);
ath10k_coredump_destroy(ar);
ath10k_htt_tx_destroy(>htt);
diff --git a/drivers/net/wireless/ath/ath10k/core.h 
b/drivers/net/wireless/ath/ath10k/core.h
index c110d15528bd..26003b519574 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -1269,7 +1269,7 @@ struct ath10k {
struct ath10k_per_peer_tx_stats peer_tx_stats;
 
/* NAPI */
-   struct net_device napi_dev;
+   struct net_device *napi_dev;
struct napi_struct napi;
 
struct work_struct set_coverage_class_work;
diff --git a/drivers/net/wireless/ath/ath10k/pci.c 
b/drivers/net/wireless/ath/ath10k/pci.c
index 5c34b156b4ff..558bec96ae40 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -3217,7 +3217,7 @@ static void ath10k_pci_free_irq(struct ath10k *ar)
 
 void ath10k_pci_init_napi(struct ath10k *ar)
 {
-   netif_napi_add(>napi_dev, >napi, ath10k_pci_napi_poll);
+   netif_napi_add(ar->napi_dev, >napi, ath10k_pci_napi_poll);
 }
 
 static int ath10k_pci_init_irq(struct ath10k *ar)
diff --git a/drivers/net/wireless/ath/ath10k/sdio.c 
b/drivers/net/wireless/ath/ath10k/sdio.c
index 0ab5433f6cf6..e28f2fe1101b 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -2532,7 +2532,7 @@ static int ath10k_sdio_probe(struct sdio_func *func,
return -ENOMEM;
}
 
-   netif_napi_add(>napi_dev, >napi, ath10k_sdio_napi_poll);
+   netif_napi_add(ar->napi_dev, >napi, ath10k_sdio_napi_poll);
 
ath10k_dbg(ar, ATH10K_DBG_BOOT,
   "sdio new func %d vendor 0x%x device 0x%x block 0x%x/0x%x\n",
diff --git a/drivers/net/wireless/ath/ath10k/snoc.c 
b/drivers/net/wireless/ath/ath10k/snoc.c
index 2c39bad7ebfb..0449b9ffc32d 100644
--- a/drivers/net/wireless/ath/ath10k/snoc.c
+++ b/drivers/net/wireless/ath/ath10k/snoc.c
@@ -935,7 +935,7 @@ static int ath10k_snoc_hif_start(struct ath10k *ar)
 
bitmap_clear(ar_snoc->pending_ce_irqs, 0, CE_COUNT_MAX);
 
-   dev_set_threaded(>napi_dev, true);
+   dev_set_threaded(ar->napi_dev, true);
ath10k_core_napi_enable(ar);
ath10k_snoc_irq_enable(ar);
ath10k_snoc_rx_post(ar);
@@ -1253,7 +1253,7 @@ static int ath10k_snoc_napi_poll(struct napi_struct *ctx, 
int budget)
 
 static void ath10k_snoc_init_napi(struct ath10k *ar)
 {
-   netif_napi_add(>napi_dev, >napi, ath10k_snoc_napi_poll);
+   netif_napi_add(ar->napi_dev, >napi, ath10k_snoc_napi_poll);
 }
 
 static int ath10k_snoc_request_irq(struct ath10k *ar)
diff --git a/drivers/net/wireless/ath/ath10k/usb.c 
b/drivers/net/wireless/ath/ath10k/usb.c
index 3c482baacec1..3b51b7f52130 100644
--- a/drivers/net/wireless/ath/ath10k/usb.c
+++ b/drivers/net/wireless/ath/ath10k/usb.c
@@ -1014,7 +1014,7 @@ static int ath10k_usb_probe(struct usb_interface 

[PATCH net-next v6 05/10] net: mediatek: mtk_eth_sock: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from the private struct by converting it
into a pointer. Then use the leverage the new alloc_netdev_dummy()
helper to allocate and initialize dummy devices.

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 17 +
 drivers/net/ethernet/mediatek/mtk_eth_soc.h |  2 +-
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c 
b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index caa13b9cedff..d7a96dc11c07 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1710,7 +1710,7 @@ static struct page_pool *mtk_create_page_pool(struct 
mtk_eth *eth,
if (IS_ERR(pp))
return pp;
 
-   err = __xdp_rxq_info_reg(xdp_q, >dummy_dev, id,
+   err = __xdp_rxq_info_reg(xdp_q, eth->dummy_dev, id,
 eth->rx_napi.napi_id, PAGE_SIZE);
if (err < 0)
goto err_free_pp;
@@ -4188,6 +4188,8 @@ static int mtk_free_dev(struct mtk_eth *eth)
metadata_dst_free(eth->dsa_meta[i]);
}
 
+   free_netdev(eth->dummy_dev);
+
return 0;
 }
 
@@ -4983,9 +4985,14 @@ static int mtk_probe(struct platform_device *pdev)
/* we run 2 devices on the same DMA ring so we need a dummy device
 * for NAPI to work
 */
-   init_dummy_netdev(>dummy_dev);
-   netif_napi_add(>dummy_dev, >tx_napi, mtk_napi_tx);
-   netif_napi_add(>dummy_dev, >rx_napi, mtk_napi_rx);
+   eth->dummy_dev = alloc_netdev_dummy(0);
+   if (!eth->dummy_dev) {
+   err = -ENOMEM;
+   dev_err(eth->dev, "failed to allocated dummy device\n");
+   goto err_unreg_netdev;
+   }
+   netif_napi_add(eth->dummy_dev, >tx_napi, mtk_napi_tx);
+   netif_napi_add(eth->dummy_dev, >rx_napi, mtk_napi_rx);
 
platform_set_drvdata(pdev, eth);
schedule_delayed_work(>reset.monitor_work,
@@ -4993,6 +5000,8 @@ static int mtk_probe(struct platform_device *pdev)
 
return 0;
 
+err_unreg_netdev:
+   mtk_unreg_dev(eth);
 err_deinit_ppe:
mtk_ppe_deinit(eth);
mtk_mdio_cleanup(eth);
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h 
b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 9ae3b8a71d0e..723fc637027c 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1242,7 +1242,7 @@ struct mtk_eth {
spinlock_t  page_lock;
spinlock_t  tx_irq_lock;
spinlock_t  rx_irq_lock;
-   struct net_device   dummy_dev;
+   struct net_device   *dummy_dev;
struct net_device   *netdev[MTK_MAX_DEVS];
struct mtk_mac  *mac[MTK_MAX_DEVS];
int irq[3];
-- 
2.43.0




[PATCH net-next v6 08/10] wifi: qtnfmac: Use netdev dummy allocator helper

2024-04-11 Thread Breno Leitao
There is a new dummy netdev allocator, use it instead of
alloc_netdev()/init_dummy_netdev combination.

Using alloc_netdev() with init_dummy_netdev might cause some memory
corruption at the driver removal side.

Fixes: 61cdb09ff760 ("wifi: qtnfmac: allocate dummy net_device dynamically")
Signed-off-by: Breno Leitao 
---
 drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c 
b/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
index f8f55db2f454..f66eb43094d4 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
@@ -372,8 +372,7 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
goto error;
}
 
-   bus->mux_dev = alloc_netdev(0, "dummy", NET_NAME_UNKNOWN,
-   init_dummy_netdev);
+   bus->mux_dev = alloc_netdev_dummy(0);
if (!bus->mux_dev) {
ret = -ENOMEM;
goto error;
-- 
2.43.0




[PATCH net-next v6 04/10] net: marvell: prestera: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from the private struct by converting it
into a pointer. Then use the leverage the new alloc_netdev_dummy()
helper to allocate and initialize dummy devices.

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
Acked-by: Elad Nachman 
---
 .../net/ethernet/marvell/prestera/prestera_rxtx.c | 15 ---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c 
b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
index cc2a9ae794be..39d9bf82c115 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
@@ -96,7 +96,7 @@ struct prestera_sdma {
struct dma_pool *desc_pool;
struct work_struct tx_work;
struct napi_struct rx_napi;
-   struct net_device napi_dev;
+   struct net_device *napi_dev;
u32 map_addr;
u64 dma_mask;
/* protect SDMA with concurrent access from multiple CPUs */
@@ -654,13 +654,21 @@ static int prestera_sdma_switch_init(struct 
prestera_switch *sw)
if (err)
goto err_evt_register;
 
-   init_dummy_netdev(>napi_dev);
+   sdma->napi_dev = alloc_netdev_dummy(0);
+   if (!sdma->napi_dev) {
+   dev_err(dev, "not able to initialize dummy device\n");
+   err = -ENOMEM;
+   goto err_alloc_dummy;
+   }
 
-   netif_napi_add(>napi_dev, >rx_napi, prestera_sdma_rx_poll);
+   netif_napi_add(sdma->napi_dev, >rx_napi, prestera_sdma_rx_poll);
napi_enable(>rx_napi);
 
return 0;
 
+err_alloc_dummy:
+   prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
+prestera_rxtx_handle_event);
 err_evt_register:
 err_tx_init:
prestera_sdma_tx_fini(sdma);
@@ -677,6 +685,7 @@ static void prestera_sdma_switch_fini(struct 
prestera_switch *sw)
 
napi_disable(>rx_napi);
netif_napi_del(>rx_napi);
+   free_netdev(sdma->napi_dev);
prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
 prestera_rxtx_handle_event);
prestera_sdma_tx_fini(sdma);
-- 
2.43.0




[PATCH net-next v6 06/10] net: ipa: allocate dummy net_device dynamically

2024-04-11 Thread Breno Leitao
Embedding net_device into structures prohibits the usage of flexible
arrays in the net_device structure. For more details, see the discussion
at [1].

Un-embed the net_device from the private struct by converting it
into a pointer. Then use the leverage the new alloc_netdev_dummy()
helper to allocate and initialize dummy devices.

[1] https://lore.kernel.org/all/20240229225910.79e22...@kernel.org/

Signed-off-by: Breno Leitao 
---
 drivers/net/ipa/gsi.c | 12 
 drivers/net/ipa/gsi.h |  2 +-
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ipa/gsi.c b/drivers/net/ipa/gsi.c
index 9a0b1fe4a93a..d70be15e95a6 100644
--- a/drivers/net/ipa/gsi.c
+++ b/drivers/net/ipa/gsi.c
@@ -1730,10 +1730,10 @@ static int gsi_channel_setup_one(struct gsi *gsi, u32 
channel_id)
gsi_channel_program(channel, true);
 
if (channel->toward_ipa)
-   netif_napi_add_tx(>dummy_dev, >napi,
+   netif_napi_add_tx(gsi->dummy_dev, >napi,
  gsi_channel_poll);
else
-   netif_napi_add(>dummy_dev, >napi,
+   netif_napi_add(gsi->dummy_dev, >napi,
   gsi_channel_poll);
 
return 0;
@@ -2369,12 +2369,14 @@ int gsi_init(struct gsi *gsi, struct platform_device 
*pdev,
/* GSI uses NAPI on all channels.  Create a dummy network device
 * for the channel NAPI contexts to be associated with.
 */
-   init_dummy_netdev(>dummy_dev);
+   gsi->dummy_dev = alloc_netdev_dummy(0);
+   if (!gsi->dummy_dev)
+   return -ENOMEM;
init_completion(>completion);
 
ret = gsi_reg_init(gsi, pdev);
if (ret)
-   return ret;
+   goto err_reg_exit;
 
ret = gsi_irq_init(gsi, pdev);  /* No matching exit required */
if (ret)
@@ -2389,6 +2391,7 @@ int gsi_init(struct gsi *gsi, struct platform_device 
*pdev,
return 0;
 
 err_reg_exit:
+   free_netdev(gsi->dummy_dev);
gsi_reg_exit(gsi);
 
return ret;
@@ -2399,6 +2402,7 @@ void gsi_exit(struct gsi *gsi)
 {
mutex_destroy(>mutex);
gsi_channel_exit(gsi);
+   free_netdev(gsi->dummy_dev);
gsi_reg_exit(gsi);
 }
 
diff --git a/drivers/net/ipa/gsi.h b/drivers/net/ipa/gsi.h
index 42063b227c18..6b7ec2a39676 100644
--- a/drivers/net/ipa/gsi.h
+++ b/drivers/net/ipa/gsi.h
@@ -155,7 +155,7 @@ struct gsi {
struct mutex mutex; /* protects commands, programming */
struct gsi_channel channel[GSI_CHANNEL_COUNT_MAX];
struct gsi_evt_ring evt_ring[GSI_EVT_RING_COUNT_MAX];
-   struct net_device dummy_dev;/* needed for NAPI */
+   struct net_device *dummy_dev;   /* needed for NAPI */
 };
 
 /**
-- 
2.43.0




[PATCH net-next v6 03/10] net: create a dummy net_device allocator

2024-04-11 Thread Breno Leitao
It is impossible to use init_dummy_netdev together with alloc_netdev()
as the 'setup' argument.

This is because alloc_netdev() initializes some fields in the net_device
structure, and later init_dummy_netdev() memzero them all. This causes
some problems as reported here:

https://lore.kernel.org/all/20240322082336.49f11...@kernel.org/

Split the init_dummy_netdev() function in two. Create a new function called
init_dummy_netdev_core() that does not memzero the net_device structure.
Then have init_dummy_netdev() memzero-ing and calling
init_dummy_netdev_core(), keeping the old behaviour.

init_dummy_netdev_core() is the new function that could be called as an
argument for alloc_netdev().

Also, create a helper to allocate and initialize dummy net devices,
leveraging init_dummy_netdev_core() as the setup argument. This function
basically simplify the allocation of dummy devices, by allocating and
initializing it. Freeing the device continue to be done through
free_netdev()

Suggested-by: Jakub Kicinski 
Signed-off-by: Breno Leitao 
Reviewed-by: Ido Schimmel 
---
 include/linux/netdevice.h |  3 +++
 net/core/dev.c| 54 ++-
 2 files changed, 39 insertions(+), 18 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d45f330d083d..f849e7d110ed 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -4519,6 +4519,9 @@ static inline void netif_addr_unlock_bh(struct net_device 
*dev)
 
 void ether_setup(struct net_device *dev);
 
+/* Allocate dummy net_device */
+struct net_device *alloc_netdev_dummy(int sizeof_priv);
+
 /* Support for loadable net-drivers */
 struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
unsigned char name_assign_type,
diff --git a/net/core/dev.c b/net/core/dev.c
index c74b42bc6888..417abfd12871 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -10414,25 +10414,12 @@ int register_netdevice(struct net_device *dev)
 }
 EXPORT_SYMBOL(register_netdevice);
 
-/**
- * init_dummy_netdev   - init a dummy network device for NAPI
- * @dev: device to init
- *
- * This takes a network device structure and initializes the minimum
- * amount of fields so it can be used to schedule NAPI polls without
- * registering a full blown interface. This is to be used by drivers
- * that need to tie several hardware interfaces to a single NAPI
- * poll scheduler due to HW limitations.
+/* Initialize the core of a dummy net device.
+ * This is useful if you are calling this function after alloc_netdev(),
+ * since it does not memset the net_device fields.
  */
-void init_dummy_netdev(struct net_device *dev)
+static void init_dummy_netdev_core(struct net_device *dev)
 {
-   /* Clear everything. Note we don't initialize spinlocks
-* as they aren't supposed to be taken by any of the
-* NAPI code and this dummy netdev is supposed to be
-* only ever used for NAPI polls
-*/
-   memset(dev, 0, sizeof(struct net_device));
-
/* make sure we BUG if trying to hit standard
 * register/unregister code path
 */
@@ -10453,8 +10440,28 @@ void init_dummy_netdev(struct net_device *dev)
 * its refcount.
 */
 }
-EXPORT_SYMBOL_GPL(init_dummy_netdev);
 
+/**
+ * init_dummy_netdev   - init a dummy network device for NAPI
+ * @dev: device to init
+ *
+ * This takes a network device structure and initializes the minimum
+ * amount of fields so it can be used to schedule NAPI polls without
+ * registering a full blown interface. This is to be used by drivers
+ * that need to tie several hardware interfaces to a single NAPI
+ * poll scheduler due to HW limitations.
+ */
+void init_dummy_netdev(struct net_device *dev)
+{
+   /* Clear everything. Note we don't initialize spinlocks
+* as they aren't supposed to be taken by any of the
+* NAPI code and this dummy netdev is supposed to be
+* only ever used for NAPI polls
+*/
+   memset(dev, 0, sizeof(struct net_device));
+   init_dummy_netdev_core(dev);
+}
+EXPORT_SYMBOL_GPL(init_dummy_netdev);
 
 /**
  * register_netdev - register a network device
@@ -11074,6 +11081,17 @@ void free_netdev(struct net_device *dev)
 }
 EXPORT_SYMBOL(free_netdev);
 
+/**
+ * alloc_netdev_dummy - Allocate and initialize a dummy net device.
+ * @sizeof_priv: size of private data to allocate space for
+ */
+struct net_device *alloc_netdev_dummy(int sizeof_priv)
+{
+   return alloc_netdev(sizeof_priv, "dummy#", NET_NAME_UNKNOWN,
+   init_dummy_netdev_core);
+}
+EXPORT_SYMBOL_GPL(alloc_netdev_dummy);
+
 /**
  * synchronize_net -  Synchronize with packet receive processing
  *
-- 
2.43.0




[PATCH net-next v6 02/10] net: free_netdev: exit earlier if dummy

2024-04-11 Thread Breno Leitao
For dummy devices, exit earlier at free_netdev() instead of executing
the whole function. This is necessary, because dummy devices are
special, and shouldn't have the second part of the function executed.

Otherwise reg_state, which is NETREG_DUMMY, will be overwritten and
there will be no way to identify that this is a dummy device. Also, this
device do not need the final put_device(), since dummy devices are not
registered (through register_netdevice()), where the device reference is
increased (at netdev_register_kobject()/device_add()).

Suggested-by: Jakub Kicinski 
Signed-off-by: Breno Leitao 
Reviewed-by: Ido Schimmel 
---
 net/core/dev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 987039ffa63c..c74b42bc6888 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11060,7 +11060,8 @@ void free_netdev(struct net_device *dev)
phy_link_topo_destroy(dev->link_topo);
 
/*  Compatibility with error handling in drivers */
-   if (dev->reg_state == NETREG_UNINITIALIZED) {
+   if (dev->reg_state == NETREG_UNINITIALIZED ||
+   dev->reg_state == NETREG_DUMMY) {
netdev_freemem(dev);
return;
}
-- 
2.43.0




[PATCH net-next v6 01/10] net: core: Fix documentation

2024-04-11 Thread Breno Leitao
Fix bad grammar in description of init_dummy_netdev() function.  This
topic showed up in the review of the "allocate dummy device dynamically"
patch set.

Suggested-by: Ido Schimmel 
Signed-off-by: Breno Leitao 
Reviewed-by: Ido Schimmel 
---
 net/core/dev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 854a3a28a8d8..987039ffa63c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -10418,7 +10418,7 @@ EXPORT_SYMBOL(register_netdevice);
  * init_dummy_netdev   - init a dummy network device for NAPI
  * @dev: device to init
  *
- * This takes a network device structure and initialize the minimum
+ * This takes a network device structure and initializes the minimum
  * amount of fields so it can be used to schedule NAPI polls without
  * registering a full blown interface. This is to be used by drivers
  * that need to tie several hardware interfaces to a single NAPI
@@ -10427,7 +10427,7 @@ EXPORT_SYMBOL(register_netdevice);
 void init_dummy_netdev(struct net_device *dev)
 {
/* Clear everything. Note we don't initialize spinlocks
-* are they aren't supposed to be taken by any of the
+* as they aren't supposed to be taken by any of the
 * NAPI code and this dummy netdev is supposed to be
 * only ever used for NAPI polls
 */
-- 
2.43.0




[PATCH net-next v6 00/10] allocate dummy device dynamically

2024-04-11 Thread Breno Leitao
struct net_device shouldn't be embedded into any structure, instead,
the owner should use the private space to embed their state into
net_device.

But, in some cases the net_device is embedded inside the private
structure, which blocks the usage of zero-length arrays inside
net_device.

Create a helper to allocate a dummy device at dynamically runtime, and
move the Ethernet devices to use it, instead of embedding the dummy
device inside the private structure.

This fixes all the network cases plus some wireless drivers.

PS: Due to lack of hardware, unfortunately most these patches are
compiled tested only, except ath11k that was kindly tested by Kalle Valo.

---
Changelog:

v6:
* No code change. Just added Reviewed-by: tags and fix a commit
  message.
v5:
* Added a new patch to fix some typos in the previous code
* Rebased to net-net/main
v4:
* Added a new patch to add dummy device at free_netdev(), as suggested
  by Jakub.
* Added support for some wireless driver.
* Added some Acked-by and Reviewed-by.
v3:
* Use free_netdev() instead of kfree() as suggested by Jakub.
* Change the free_netdev() place in ipa driver, as suggested by
  Alex Elder.
* Set err in the error path in the Marvell driver, as suggested
  by Simon Horman.
v2:
* Patch 1: Use a pre-defined name ("dummy#") for the dummy
  net_devices.
* Patch 2-5: Added users for the new helper.
v1:
* https://lore.kernel.org/all/20240327200809.512867-1-lei...@debian.org/

Breno Leitao (10):
  net: core: Fix documentation
  net: free_netdev: exit earlier if dummy
  net: create a dummy net_device allocator
  net: marvell: prestera: allocate dummy net_device dynamically
  net: mediatek: mtk_eth_sock: allocate dummy net_device dynamically
  net: ipa: allocate dummy net_device dynamically
  net: ibm/emac: allocate dummy net_device dynamically
  wifi: qtnfmac: Use netdev dummy allocator helper
  wifi: ath10k: allocate dummy net_device dynamically
  wifi: ath11k: allocate dummy net_device dynamically

 drivers/net/ethernet/ibm/emac/mal.c   | 14 -
 drivers/net/ethernet/ibm/emac/mal.h   |  2 +-
 .../ethernet/marvell/prestera/prestera_rxtx.c | 15 -
 drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 17 --
 drivers/net/ethernet/mediatek/mtk_eth_soc.h   |  2 +-
 drivers/net/ipa/gsi.c | 12 ++--
 drivers/net/ipa/gsi.h |  2 +-
 drivers/net/wireless/ath/ath10k/core.c|  9 ++-
 drivers/net/wireless/ath/ath10k/core.h|  2 +-
 drivers/net/wireless/ath/ath10k/pci.c |  2 +-
 drivers/net/wireless/ath/ath10k/sdio.c|  2 +-
 drivers/net/wireless/ath/ath10k/snoc.c|  4 +-
 drivers/net/wireless/ath/ath10k/usb.c |  2 +-
 drivers/net/wireless/ath/ath11k/ahb.c |  9 ++-
 drivers/net/wireless/ath/ath11k/core.h|  2 +-
 drivers/net/wireless/ath/ath11k/pcic.c| 21 +--
 .../wireless/quantenna/qtnfmac/pcie/pcie.c|  3 +-
 include/linux/netdevice.h |  3 +
 net/core/dev.c| 57 ---
 19 files changed, 127 insertions(+), 53 deletions(-)

-- 
2.43.0




Re: [PATCH net-next v5 00/10] allocate dummy device dynamically

2024-04-11 Thread Breno Leitao
On Thu, Apr 11, 2024 at 06:09:26AM -0700, Jakub Kicinski wrote:
> On Wed, 10 Apr 2024 06:13:41 -0700 Breno Leitao wrote:
> >   wifi: ath11k: allocate dummy net_device dynamically
> 
> Sorry Breno, I didn't notice earlier, patch 10 didn't make it
> to the list. The series wasn't ingested by CI and tested because 
> of this. Could you repost?

Thanks for the heads-up. I debugged it and it was my mistake, this is
how I've sent it.

git send-email patches/v5-000*

I will repost.



[kvalo-ath:ath-qca] BUILD SUCCESS 8e3376186426c31a313c2070722ea0ee7554df2a

2024-04-11 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 
ath-qca
branch HEAD: 8e3376186426c31a313c2070722ea0ee7554df2a  Merge branch 'ath-next' 
into ath-qca

elapsed time: 1391m

configs tested: 172
configs skipped: 6

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 haps_hs_defconfig   gcc  
arc   randconfig-001-20240411   gcc  
arc   randconfig-002-20240411   gcc  
arm  allmodconfig   gcc  
arm  allyesconfig   gcc  
arm   omap1_defconfig   gcc  
arm   randconfig-001-20240411   gcc  
arm   randconfig-002-20240411   gcc  
arm   randconfig-003-20240411   clang
arm   randconfig-004-20240411   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64allyesconfig   clang
arm64   defconfig   gcc  
arm64 randconfig-001-20240411   clang
arm64 randconfig-002-20240411   gcc  
arm64 randconfig-003-20240411   gcc  
arm64 randconfig-004-20240411   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240411   gcc  
csky  randconfig-002-20240411   gcc  
hexagon  allmodconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240411   clang
hexagon   randconfig-002-20240411   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240411   clang
i386 buildonly-randconfig-002-20240411   clang
i386 buildonly-randconfig-003-20240411   clang
i386 buildonly-randconfig-004-20240411   clang
i386 buildonly-randconfig-005-20240411   clang
i386 buildonly-randconfig-006-20240411   clang
i386defconfig   clang
i386  randconfig-001-20240411   gcc  
i386  randconfig-002-20240411   gcc  
i386  randconfig-003-20240411   clang
i386  randconfig-004-20240411   clang
i386  randconfig-005-20240411   gcc  
i386  randconfig-006-20240411   clang
i386  randconfig-011-20240411   clang
i386  randconfig-012-20240411   gcc  
i386  randconfig-013-20240411   gcc  
i386  randconfig-014-20240411   gcc  
i386  randconfig-015-20240411   clang
i386  randconfig-016-20240411   clang
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240411   gcc  
loongarch randconfig-002-20240411   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
m68kmac_defconfig   gcc  
m68k   sun3_defconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips bigsur_defconfig   gcc  
mips  fuloong2e_defconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240411   gcc  
nios2 randconfig-002-20240411   gcc  
openrisc  allnoconfig   gcc  
openrisc allyesconfig   gcc  
openriscdefconfig

Re: [PATCH net-next v5 00/10] allocate dummy device dynamically

2024-04-11 Thread Jakub Kicinski
On Wed, 10 Apr 2024 06:13:41 -0700 Breno Leitao wrote:
>   wifi: ath11k: allocate dummy net_device dynamically

Sorry Breno, I didn't notice earlier, patch 10 didn't make it
to the list. The series wasn't ingested by CI and tested because 
of this. Could you repost?
-- 
pw-bot: cr



[kvalo-ath:master] BUILD SUCCESS 363e7193eaf258fe7f04e8db560bd8a282a12cd9

2024-04-11 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 
master
branch HEAD: 363e7193eaf258fe7f04e8db560bd8a282a12cd9  Add 
localversion-wireless-testing-ath

elapsed time: 1359m

configs tested: 175
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 haps_hs_defconfig   gcc  
arc   randconfig-001-20240411   gcc  
arc   randconfig-002-20240411   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
arm   omap1_defconfig   gcc  
arm   randconfig-001-20240411   gcc  
arm   randconfig-002-20240411   gcc  
arm   randconfig-003-20240411   clang
arm   randconfig-004-20240411   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64allyesconfig   clang
arm64   defconfig   gcc  
arm64 randconfig-001-20240411   clang
arm64 randconfig-002-20240411   gcc  
arm64 randconfig-003-20240411   gcc  
arm64 randconfig-004-20240411   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240411   gcc  
csky  randconfig-002-20240411   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240411   clang
hexagon   randconfig-002-20240411   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240411   clang
i386 buildonly-randconfig-002-20240411   clang
i386 buildonly-randconfig-003-20240411   clang
i386 buildonly-randconfig-004-20240411   clang
i386 buildonly-randconfig-005-20240411   clang
i386 buildonly-randconfig-006-20240411   clang
i386defconfig   clang
i386  randconfig-001-20240411   gcc  
i386  randconfig-002-20240411   gcc  
i386  randconfig-003-20240411   clang
i386  randconfig-004-20240411   clang
i386  randconfig-005-20240411   gcc  
i386  randconfig-006-20240411   clang
i386  randconfig-011-20240411   clang
i386  randconfig-012-20240411   gcc  
i386  randconfig-013-20240411   gcc  
i386  randconfig-014-20240411   gcc  
i386  randconfig-015-20240411   clang
i386  randconfig-016-20240411   clang
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240411   gcc  
loongarch randconfig-002-20240411   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
m68kmac_defconfig   gcc  
m68k   sun3_defconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips bigsur_defconfig   gcc  
mips  fuloong2e_defconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240411   gcc  
nios2 randconfig-002-20240411

[kvalo-ath:ath-next] BUILD SUCCESS 4f242b1d6996af14f98cb1093d26cdacd6a83ad7

2024-04-11 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 
ath-next
branch HEAD: 4f242b1d6996af14f98cb1093d26cdacd6a83ad7  wifi: ath12k: support 
get_survey mac op for single wiphy

elapsed time: 1219m

configs tested: 175
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 haps_hs_defconfig   gcc  
arc   randconfig-001-20240411   gcc  
arc   randconfig-002-20240411   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   clang
arm  allyesconfig   gcc  
arm defconfig   clang
arm   omap1_defconfig   gcc  
arm   randconfig-001-20240411   gcc  
arm   randconfig-002-20240411   gcc  
arm   randconfig-003-20240411   clang
arm   randconfig-004-20240411   gcc  
arm64allmodconfig   clang
arm64 allnoconfig   gcc  
arm64allyesconfig   clang
arm64   defconfig   gcc  
arm64 randconfig-001-20240411   clang
arm64 randconfig-002-20240411   gcc  
arm64 randconfig-003-20240411   gcc  
arm64 randconfig-004-20240411   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
csky  randconfig-001-20240411   gcc  
csky  randconfig-002-20240411   gcc  
hexagon  allmodconfig   clang
hexagon   allnoconfig   clang
hexagon  allyesconfig   clang
hexagon defconfig   clang
hexagon   randconfig-001-20240411   clang
hexagon   randconfig-002-20240411   clang
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386 buildonly-randconfig-001-20240411   clang
i386 buildonly-randconfig-002-20240411   clang
i386 buildonly-randconfig-003-20240411   clang
i386 buildonly-randconfig-004-20240411   clang
i386 buildonly-randconfig-005-20240411   clang
i386 buildonly-randconfig-006-20240411   clang
i386defconfig   clang
i386  randconfig-001-20240411   gcc  
i386  randconfig-002-20240411   gcc  
i386  randconfig-003-20240411   clang
i386  randconfig-004-20240411   clang
i386  randconfig-005-20240411   gcc  
i386  randconfig-006-20240411   clang
i386  randconfig-011-20240411   clang
i386  randconfig-012-20240411   gcc  
i386  randconfig-013-20240411   gcc  
i386  randconfig-014-20240411   gcc  
i386  randconfig-015-20240411   clang
i386  randconfig-016-20240411   clang
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarch   defconfig   gcc  
loongarch randconfig-001-20240411   gcc  
loongarch randconfig-002-20240411   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
m68kmac_defconfig   gcc  
m68k   sun3_defconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
mips bigsur_defconfig   gcc  
mips  fuloong2e_defconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
nios2 randconfig-001-20240411   gcc  
nios2

Re: [PATCH net-next v5 00/10] allocate dummy device dynamically

2024-04-11 Thread Kalle Valo
Breno Leitao  writes:

> struct net_device shouldn't be embedded into any structure, instead,
> the owner should use the private space to embed their state into
> net_device.
>
> But, in some cases the net_device is embedded inside the private
> structure, which blocks the usage of zero-length arrays inside
> net_device.
>
> Create a helper to allocate a dummy device at dynamically runtime, and
> move the Ethernet devices to use it, instead of embedding the dummy
> device inside the private structure.
>
> This fixes all the network cases plus some wireless drivers.
>
> PS: Due to lack of hardware, unfortunately most these patches are
> compiled tested only, except ath11k that was kindly tested by Kalle Valo.
>
> ---
> Changelog:
>
> v1:
>   * https://lore.kernel.org/all/20240327200809.512867-1-lei...@debian.org/
>
> v2:
>   * Patch 1: Use a pre-defined name ("dummy#") for the dummy
> net_devices.
>   * Patch 2-5: Added users for the new helper.
> v3:
>   * Use free_netdev() instead of kfree() as suggested by Jakub.
>   * Change the free_netdev() place in ipa driver, as suggested by
> Alex Elder.
>   * Set err in the error path in the Marvell driver, as suggested
> by Simon Horman.
> v4:
>   * Added a new patch to add dummy device at free_netdev(), as suggested
> by Jakub.
>   * Added support for some wireless driver.
>   * Added some Acked-by and Reviewed-by.
> v5:
>   * Added a new patch to fix some typos in the previous code,
> suggested by Ido.
>   * Rebased to net-net/main

I'm nitpicking here but I prefer to have the changelog in reverse order,
that is v5 first and v1 last. I'm most interested about the changes in
v5, I don't care about v1 at this point. Though I don't know if net
folks have a different prefence, just wanted to mention this.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches