Re: [PATCH] eeprom: at25: convert to spi-mem API

From: Sverdlin, Alexander
Date: Mon Nov 10 2025 - 10:16:49 EST


Hi Christophe,

On Sat, 2025-11-08 at 17:24 +0100, Christophe Leroy wrote:
> > > The reason why it was not a problem before was that the transfer was
> > > done into of->prealloc_buf (fs/kernfs/file.c) which is a kmalloc() with
> > > size (PAGE_SIZE + 1).
> > >
> > > Following the rework of at25 it now goes into the bounce buffer which is
> > > allocated with the exact size of the transfer.
> > >
> > > Why do we need an intermediate bounce buffer now, why can't
> > > of->prealloc_buf be used directly as before ?
> >
> > userspace access is only one part of the story, the other is NVMEM
> > kernel-internal API, like nvmem_cell_read*() and I suppose there is
> > no requirement for a destination buffer to be DMA-able.
> >
>
> As far as I can see nvmem_cell_read*() allocates a kmalloc() bounce
> buffer already:

sorry, I referenced wrong family of functions, but...

> buf = kzalloc(max_t(size_t, entry->raw_len, entry->bytes), GFP_KERNEL);

[]

There are zero-copy call chains as well in nvmem core:

nvmem->reg_read() <= __nvmem_reg_read() <= nvmem_reg_read() <= __nvmem_cell_read() <= nvmem_device_cell_read() (exported symbol)
nvmem->reg_read() <= __nvmem_reg_read() <= nvmem_reg_read() <= nvmem_device_read() (exported)

Documentation/driver-api/nvmem.rst doesn't impose any DMA-related requirements
on a destination buffer. Seems that we are not allowed to drop the bounce buffer
in at25 driver as of now.

--
Alexander Sverdlin
Siemens AG
www.siemens.com