Skip to content

Commit 708d989

Browse files
Syed Nayyar Warisjic23
authored andcommitted
counter: 104-quad-8: Add lock guards - differential encoder
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]> Fixes: 954ab5c ("counter: 104-quad-8: Support Differential Encoder Cable Status") Signed-off-by: Jonathan Cameron <[email protected]>
1 parent 25f02d3 commit 708d989

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

drivers/counter/104-quad-8.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,18 +1274,26 @@ static ssize_t quad8_signal_cable_fault_read(struct counter_device *counter,
12741274
struct counter_signal *signal,
12751275
void *private, char *buf)
12761276
{
1277-
const struct quad8_iio *const priv = counter->priv;
1277+
struct quad8_iio *const priv = counter->priv;
12781278
const size_t channel_id = signal->id / 2;
1279-
const bool disabled = !(priv->cable_fault_enable & BIT(channel_id));
1279+
bool disabled;
12801280
unsigned int status;
12811281
unsigned int fault;
12821282

1283-
if (disabled)
1283+
mutex_lock(&priv->lock);
1284+
1285+
disabled = !(priv->cable_fault_enable & BIT(channel_id));
1286+
1287+
if (disabled) {
1288+
mutex_unlock(&priv->lock);
12841289
return -EINVAL;
1290+
}
12851291

12861292
/* Logic 0 = cable fault */
12871293
status = inb(priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
12881294

1295+
mutex_unlock(&priv->lock);
1296+
12891297
/* Mask respective channel and invert logic */
12901298
fault = !(status & BIT(channel_id));
12911299

@@ -1317,6 +1325,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(
13171325
if (ret)
13181326
return ret;
13191327

1328+
mutex_lock(&priv->lock);
1329+
13201330
if (enable)
13211331
priv->cable_fault_enable |= BIT(channel_id);
13221332
else
@@ -1327,6 +1337,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(
13271337

13281338
outb(cable_fault_enable, priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
13291339

1340+
mutex_unlock(&priv->lock);
1341+
13301342
return len;
13311343
}
13321344

0 commit comments

Comments
 (0)