Message ID | 20240206143711.2410135-2-msp@baylibre.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | soc: ti: k3-socinfo: Add support for nvmem cells | expand |
On 06/02/2024 14:37, Markus Schneider-Pargmann wrote: > The actual size that nvmem is using internally on a specific platform > with a specific devicetree may not be known in the consumer code. The > maximum size may be available at the same time. > > Allow the use of larger buffers in nvmem_cell_read_common() by setting > buffers that are too large to zero before copying into them. > Can you explain why can we not use nvmem_cell_read() ? there is an other thread to add get_size https://www.spinics.net/lists/kernel/msg5075254.html > Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com> > --- > drivers/nvmem/core.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c > index 980123fb4dde..6fa061ede605 100644 > --- a/drivers/nvmem/core.c > +++ b/drivers/nvmem/core.c > @@ -1806,12 +1806,14 @@ static int nvmem_cell_read_common(struct device *dev, const char *cell_id, > nvmem_cell_put(cell); > return PTR_ERR(buf); > } > - if (len != count) { > + if (len > count) { > kfree(buf); > nvmem_cell_put(cell); > return -EINVAL; > + } else if (len < count) { > + memset(val + len, 0, count - len); no please.. this really does not belong here. --srini > } > - memcpy(val, buf, count); > + memcpy(val, buf, len); > kfree(buf); > nvmem_cell_put(cell); >
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 980123fb4dde..6fa061ede605 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1806,12 +1806,14 @@ static int nvmem_cell_read_common(struct device *dev, const char *cell_id, nvmem_cell_put(cell); return PTR_ERR(buf); } - if (len != count) { + if (len > count) { kfree(buf); nvmem_cell_put(cell); return -EINVAL; + } else if (len < count) { + memset(val + len, 0, count - len); } - memcpy(val, buf, count); + memcpy(val, buf, len); kfree(buf); nvmem_cell_put(cell);
The actual size that nvmem is using internally on a specific platform with a specific devicetree may not be known in the consumer code. The maximum size may be available at the same time. Allow the use of larger buffers in nvmem_cell_read_common() by setting buffers that are too large to zero before copying into them. Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com> --- drivers/nvmem/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)