When compiling with clang (19.1.7), initializing *vp using a compound
literal may result in excessive stack usage. Fix it by initializing the
required fields of *vp individually.

Without this patch:

$ objdump -d arch/um/drivers/vector_kern.o | ./scripts/checkstack.pl x86_64 0
...
0x0000000000000540 vector_eth_configure [vector_kern.o]:1472
...

With this patch:

$ objdump -d arch/um/drivers/vector_kern.o | ./scripts/checkstack.pl x86_64 0
...
0x0000000000000540 vector_eth_configure [vector_kern.o]:208
...

Reported-by: kernel test robot <l...@intel.com>
Closes: 
https://lore.kernel.org/oe-kbuild-all/202506221017.wtb7usua-...@intel.com/
Signed-off-by: Tiwei Bie <tiwei....@antgroup.com>
---
 arch/um/drivers/vector_kern.c | 42 +++++++++++------------------------
 1 file changed, 13 insertions(+), 29 deletions(-)

diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
index f292e0b4ff8b..9bbbddfe866b 100644
--- a/arch/um/drivers/vector_kern.c
+++ b/arch/um/drivers/vector_kern.c
@@ -1625,35 +1625,19 @@ static void vector_eth_configure(
 
        device->dev = dev;
 
-       *vp = ((struct vector_private)
-               {
-               .list                   = LIST_HEAD_INIT(vp->list),
-               .dev                    = dev,
-               .unit                   = n,
-               .options                = get_transport_options(def),
-               .rx_irq                 = 0,
-               .tx_irq                 = 0,
-               .parsed                 = def,
-               .max_packet             = get_mtu(def) + ETH_HEADER_OTHER,
-               /* TODO - we need to calculate headroom so that ip header
-                * is 16 byte aligned all the time
-                */
-               .headroom               = get_headroom(def),
-               .form_header            = NULL,
-               .verify_header          = NULL,
-               .header_rxbuffer        = NULL,
-               .header_txbuffer        = NULL,
-               .header_size            = 0,
-               .rx_header_size         = 0,
-               .rexmit_scheduled       = false,
-               .opened                 = false,
-               .transport_data         = NULL,
-               .in_write_poll          = false,
-               .coalesce               = 2,
-               .req_size               = get_req_size(def),
-               .in_error               = false,
-               .bpf                    = NULL
-       });
+       INIT_LIST_HEAD(&vp->list);
+       vp->dev         = dev;
+       vp->unit        = n;
+       vp->options     = get_transport_options(def);
+       vp->parsed      = def;
+       vp->max_packet  = get_mtu(def) + ETH_HEADER_OTHER;
+       /*
+        * TODO - we need to calculate headroom so that ip header
+        * is 16 byte aligned all the time
+        */
+       vp->headroom    = get_headroom(def);
+       vp->coalesce    = 2;
+       vp->req_size    = get_req_size(def);
 
        dev->features = dev->hw_features = (NETIF_F_SG | NETIF_F_FRAGLIST);
        INIT_WORK(&vp->reset_tx, vector_reset_tx);
-- 
2.34.1


Reply via email to