]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
um: vector: Reduce stack usage in vector_eth_configure()
authorTiwei Bie <tiwei.btw@antgroup.com>
Mon, 23 Jun 2025 11:08:29 +0000 (19:08 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 25 Jun 2025 07:28:17 +0000 (09:28 +0200)
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 <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202506221017.WtB7Usua-lkp@intel.com/
Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
Link: https://patch.msgid.link/20250623110829.314864-1-tiwei.btw@antgroup.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/drivers/vector_kern.c

index f292e0b4ff8b7314b80b648a5e11a3011261911d..9bbbddfe866b21d5396ee4417cea036f788330e9 100644 (file)
@@ -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);