Add lock protection from race conditions to 104-quad-8 counter driver
for differential encoder status code changes. Mutex lock calls used for
protection.
Signed-off-by: Syed Nayyar Waris <[email protected]>
---
Changes in v5:
- Change spin lock calls to mutex lock calls.
- Modify the title description.
drivers/counter/104-quad-8.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/drivers/counter/104-quad-8.c b/drivers/counter/104-quad-8.c
index 9dab190..21b2e3e 100644
--- a/drivers/counter/104-quad-8.c
+++ b/drivers/counter/104-quad-8.c
@@ -1151,18 +1151,26 @@ static ssize_t quad8_signal_cable_fault_read(struct counter_device *counter,
struct counter_signal *signal,
void *private, char *buf)
{
- const struct quad8_iio *const priv = counter->priv;
+ struct quad8_iio *const priv = counter->priv;
const size_t channel_id = signal->id / 2;
- const bool disabled = !(priv->cable_fault_enable & BIT(channel_id));
+ bool disabled;
unsigned int status;
unsigned int fault;
- if (disabled)
+ mutex_lock(&priv->lock);
+
+ disabled = !(priv->cable_fault_enable & BIT(channel_id));
+
+ if (disabled) {
+ mutex_unlock(&priv->lock);
return -EINVAL;
+ }
/* Logic 0 = cable fault */
status = inb(priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
+ mutex_unlock(&priv->lock);
+
/* Mask respective channel and invert logic */
fault = !(status & BIT(channel_id));
@@ -1194,6 +1202,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(
if (ret)
return ret;
+ mutex_lock(&priv->lock);
+
if (enable)
priv->cable_fault_enable |= BIT(channel_id);
else
@@ -1204,6 +1214,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(
outb(cable_fault_enable, priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
+ mutex_unlock(&priv->lock);
+
return len;
}
--
2.7.4
On Mon, Mar 16, 2020 at 06:20:06PM +0530, Syed Nayyar Waris wrote:
> Add lock protection from race conditions to 104-quad-8 counter driver
> for differential encoder status code changes. Mutex lock calls used for
> protection.
>
> Signed-off-by: Syed Nayyar Waris <[email protected]>
> ---
> Changes in v5:
> - Change spin lock calls to mutex lock calls.
> - Modify the title description.
Looks like the Fixes tags were dropped in these last two patches. I
suppose they aren't really necessary though since these features haven't
yet made it out of the IIO tree, so no need to backport these fixes.
Signed-off-by: William Breathitt Gray <[email protected]>
On Wed, Mar 18, 2020 at 7:48 AM William Breathitt Gray
<[email protected]> wrote:
>
> On Mon, Mar 16, 2020 at 06:20:06PM +0530, Syed Nayyar Waris wrote:
> > Add lock protection from race conditions to 104-quad-8 counter driver
> > for differential encoder status code changes. Mutex lock calls used for
> > protection.
> >
> > Signed-off-by: Syed Nayyar Waris <[email protected]>
> > ---
> > Changes in v5:
> > - Change spin lock calls to mutex lock calls.
> > - Modify the title description.
>
> Looks like the Fixes tags were dropped in these last two patches. I
> suppose they aren't really necessary though since these features haven't
> yet made it out of the IIO tree, so no need to backport these fixes.
>
> Signed-off-by: William Breathitt Gray <[email protected]>
Adding the 'Fixes' tag:
Fixes: bbef69e088c3 ("counter: 104-quad-8: Support Differential
Encoder Cable Status")
Regards
Syed Nayyar Waris
On Sun, 7 Jun 2020 10:52:57 +0530
Syed Nayyar Waris <[email protected]> wrote:
> On Wed, Mar 18, 2020 at 7:48 AM William Breathitt Gray
> <[email protected]> wrote:
> >
> > On Mon, Mar 16, 2020 at 06:20:06PM +0530, Syed Nayyar Waris wrote:
> > > Add lock protection from race conditions to 104-quad-8 counter driver
> > > for differential encoder status code changes. Mutex lock calls used for
> > > protection.
> > >
> > > Signed-off-by: Syed Nayyar Waris <[email protected]>
> > > ---
> > > Changes in v5:
> > > - Change spin lock calls to mutex lock calls.
> > > - Modify the title description.
> >
> > Looks like the Fixes tags were dropped in these last two patches. I
> > suppose they aren't really necessary though since these features haven't
> > yet made it out of the IIO tree, so no need to backport these fixes.
> >
> > Signed-off-by: William Breathitt Gray <[email protected]>
>
> Adding the 'Fixes' tag:
>
> Fixes: bbef69e088c3 ("counter: 104-quad-8: Support Differential
> Encoder Cable Status")
That doesn't seem to be the correct hash upstream though it exists in my
local tree. I'm not sure quite what happened here (and don't care enough
to try and figure it out), so I've fixed to match the upstream hash.
Applied to the fixes-togreg branch of iio.git.
Thanks,
Jonathan
>
> Regards
> Syed Nayyar Waris