From: Dan Carpenter <dan.carpenter@linaro.org>
To: Joy Chakraborty <joychakr@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Lars-Peter Clausen <lars@metafoo.de>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Bingbu Cao <bingbu.cao@intel.com>,
Zhihao Cheng <chengzhihao1@huawei.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-iio@vger.kernel.org, linux-media@vger.kernel.org,
linux-i2c@vger.kernel.org, linux-gpio@vger.kernel.org,
linux-mtd@lists.infradead.org, linux-rtc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev,
linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org,
manugautam@google.com
Subject: Re: [PATCH v1 07/17] misc: eeprom: at25: Change nvmem reg_read/write return type
Date: Thu, 6 Jun 2024 13:10:58 +0300 [thread overview]
Message-ID: <2b979aa4-3a63-4010-9670-294ce7624e18@moroto.mountain> (raw)
In-Reply-To: <CAOSNQF0Qj2CnRDWAGM8Y1wyEdgWP04RDJx1TKO-Ge4nUH=qxoQ@mail.gmail.com>
On Thu, Jun 06, 2024 at 03:12:03PM +0530, Joy Chakraborty wrote:
> > These functions are used internally and exported to the user through
> > sysfs via bin_attr_nvmem_read/write(). For internal users partial reads
> > should be treated as failure. What are we supposed to do with a partial
> > read? I don't think anyone has asked for partial reads to be supported
> > from sysfs either except Greg was wondering about it while reading the
> > code.
> >
> > Currently, a lot of drivers return -EINVAL for partial read/writes but
> > some return success. It is a bit messy. But this patchset doesn't
> > really improve anything. In at24_read() we check if it's going to be a
> > partial read and return -EINVAL. Below we report a partial read as a
> > full read. It's just a more complicated way of doing exactly what we
> > were doing before.
>
> Currently what drivers return is up to their interpretation of int
> return type, there are a few drivers which also return the number of
> bytes written/read already like
> drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_otpe2p.c .
Returning non-zero is a bug. It won't break bin_attr_nvmem_read/write()
but it will break other places like nvmem_access_with_keepouts(),
__nvmem_cell_read() and nvmem_cell_prepare_write_buffer() where all
non-zero returns from nvmem_reg_read() are treated as an error.
> The objective of the patch was to handle partial reads and errors at
> the nvmem core and instead of leaving it up to each nvmem provider by
> providing a better return value to nvmem providers.
>
> Regarding drivers/misc/eeprom/at25.c which you pointed below, that is
> a problem in my code change. I missed that count was modified later on
> and should initialize bytes_written to the new value of count, will
> fix that when I come up with the new patch.
>
> I agree that it does not improve anything for a lot of nvmem providers
> for example the ones which call into other reg_map_read/write apis
> which do not return the number of bytes read/written but it does help
> us do better error handling at the nvmem core layer for nvmem
> providers who can return the valid number of bytes read/written.
If we're going to support partial writes, then it needs to be done all
the way. We need to audit functions like at24_read() and remove the
-EINVAL lines.
440 if (off + count > at24->byte_len)
441 return -EINVAL;
It should be:
if (off + count > at24->byte_len)
count = at24->byte_len - off;
Some drivers handle writing zero bytes as -EINVAL and some return 0.
Those changes could be done before we change the API.
You updated nvmem_access_with_keepouts() to handle negative returns but
not zero returns so it could lead to a forever loop.
regards,
dan carpenter
next prev parent reply other threads:[~2024-06-06 10:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-05 17:59 [PATCH v1 00/17] nvmem: Handle change of return type in reg_read/write() definition Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 01/17] hwmon: pmbus: adm1266: Change nvmem reg_read/write return type Joy Chakraborty
2024-06-05 21:29 ` Guenter Roeck
2024-06-06 9:22 ` Joy Chakraborty
2024-06-06 7:42 ` Dan Carpenter
2024-06-05 17:59 ` [PATCH v1 02/17] media: i2c: ov2740: " Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 03/17] media: i2c: video-i2c: " Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 04/17] iio: pressure: bmp280: " Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 05/17] misc: ds1682: " Joy Chakraborty
2024-06-05 21:18 ` Guenter Roeck
2024-06-06 9:24 ` Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 06/17] misc: eeprom: at24: " Joy Chakraborty
2024-06-06 10:12 ` Dan Carpenter
2024-06-05 17:59 ` [PATCH v1 07/17] misc: eeprom: at25: " Joy Chakraborty
2024-06-06 8:41 ` Dan Carpenter
2024-06-06 9:42 ` Joy Chakraborty
2024-06-06 10:10 ` Dan Carpenter [this message]
2024-06-06 10:31 ` Joy Chakraborty
2024-06-07 15:36 ` Srinivas Kandagatla
2024-06-05 17:59 ` [PATCH v1 08/17] misc: eeprom: 93xx46: " Joy Chakraborty
2024-06-05 17:59 ` [PATCH v1 09/17] misc: mchp_pci1xxxx: " Joy Chakraborty
2024-06-05 18:12 ` [PATCH v1 00/17] nvmem: Handle change of return type in reg_read/write() definition Srinivas Kandagatla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2b979aa4-3a63-4010-9670-294ce7624e18@moroto.mountain \
--to=dan.carpenter@linaro.org \
--cc=angelogioacchino.delregno@collabora.com \
--cc=bingbu.cao@intel.com \
--cc=chengzhihao1@huawei.com \
--cc=gregkh@linuxfoundation.org \
--cc=jbrunet@baylibre.com \
--cc=joychakr@google.com \
--cc=lars@metafoo.de \
--cc=linux-amlogic@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-rtc@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=manugautam@google.com \
--cc=martin.blumenstingl@googlemail.com \
--cc=sakari.ailus@linux.intel.com \
--cc=srinivas.kandagatla@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox