counter: 104-quad-8: Fix race condition between FLAG and CNTR reads
authorWilliam Breathitt Gray <william.gray@linaro.org>
Sun, 12 Mar 2023 23:15:49 +0000 (19:15 -0400)
committerWilliam Breathitt Gray <william.gray@linaro.org>
Sat, 18 Mar 2023 13:26:40 +0000 (09:26 -0400)
commit4aa3b75c74603c3374877d5fd18ad9cc3a9a62ed
tree8bd6b81faac267f01fc92864cf5ddca4098b3265
parentfe15c26ee26efa11741a7b632e9f23b01aca4cc6
counter: 104-quad-8: Fix race condition between FLAG and CNTR reads

The Counter (CNTR) register is 24 bits wide, but we can have an
effective 25-bit count value by setting bit 24 to the XOR of the Borrow
flag and Carry flag. The flags can be read from the FLAG register, but a
race condition exists: the Borrow flag and Carry flag are instantaneous
and could change by the time the count value is read from the CNTR
register.

Since the race condition could result in an incorrect 25-bit count
value, remove support for 25-bit count values from this driver;
hard-coded maximum count values are replaced by a LS7267_CNTR_MAX define
for consistency and clarity.

Fixes: 28e5d3bb0325 ("iio: 104-quad-8: Add IIO support for the ACCES 104-QUAD-8")
Cc: <stable@vger.kernel.org> # 6.1.x
Cc: <stable@vger.kernel.org> # 6.2.x
Link: https://lore.kernel.org/r/20230312231554.134858-1-william.gray@linaro.org/
Signed-off-by: William Breathitt Gray <william.gray@linaro.org>
drivers/counter/104-quad-8.c