Commit 2d65fc13 authored by Tiwei Bie's avatar Tiwei Bie Committed by Johannes Berg
Browse files

um: vector: Reduce stack usage in vector_eth_configure()



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: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202506221017.WtB7Usua-lkp@intel.com/


Signed-off-by: default avatarTiwei Bie <tiwei.btw@antgroup.com>
Link: https://patch.msgid.link/20250623110829.314864-1-tiwei.btw@antgroup.com


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 89489412
Loading
Loading
Loading
Loading
+13 −29
Original line number Diff line number Diff line
@@ -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
	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
	 */
		.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
	});
	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);