+static int apple_z2_probe(struct spi_device *spi)
+{
+ struct device *dev = &spi->dev;
+ struct apple_z2 *z2;
+ int error;
+
+ z2 = devm_kzalloc(dev, sizeof(*z2), GFP_KERNEL);
+ if (!z2)
+ return -ENOMEM;
+
+ z2->tx_buf = devm_kzalloc(dev, sizeof(struct apple_z2_read_interrupt_cmd), GFP_KERNEL);
+ z2->rx_buf = devm_kzalloc(dev, 4096, GFP_KERNEL);
This will allocate 8192 bytes because of the way the allocator works.
It needs around 40 bytes for the devm stuff + 4096 requested. So rounding rules will allocate 8192 bytes.
So either you could allocate "for free" much more space, or you could allocate (and document...)
z2->rx_buf = devm_kzalloc(dev, 4096 - sizeof(struct devres), GFP_KERNEL);
or have an explicit devm_add_action_or_reset() that would require less memory, but would add some LoC.
See https://elixir.bootlin.com/linux/v6.13-rc3/source/drivers/base/ devres.c#L97