Skip to contentSkip to conversation

Patch "staging: comedi: ni_mio_common: fix AO inttrig backwards compatibility" has been added to the 4.4-stable tree

PATCH [email protected] 1 participant 1 message Sep 5, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

staging: comedi: ni_mio_common: fix AO inttrig backwards compatibility

to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
staging-comedi-ni_mio_common-fix-ao-inttrig-backwards-compatibility.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From f0f4b0cc3a8cffd983f5940d46cd0227f3f5710a Mon Sep 17 00:00:00 2001

From: Ian Abbott <[email protected]>
Date: Tue, 19 Jul 2016 12:17:39 +0100
Subject: staging: comedi: ni_mio_common: fix AO inttrig backwards compatibility

From: Ian Abbott <[email protected]>

commit f0f4b0cc3a8cffd983f5940d46cd0227f3f5710a upstream.

Commit ebb657babfa9 ("staging: comedi: ni_mio_common: clarify the cmd->start_arg validation and use") introduced a backwards compatibility issue in the use of asynchronous commands on the AO subdevice when start_src is TRIG_EXT. Valid values for start_src are TRIG_INT (for internal, software trigger), and TRIG_EXT (for external trigger). When set to TRIG_EXT. In both cases, the driver relies on an internal, software trigger to set things up (allowing the user application to write sufficient samples to the data buffer before the trigger), so it acts as a software "pre-trigger" in the TRIG_EXT case. The software trigger is handled by ni_ao_inttrig().

Prior to the above change, when start_src was TRIG_INT, start_arg was required to be 0, and ni_ao_inttrig() checked that the software trigger number was also 0. After the above change, when start_src was TRIG_INT, any value was allowed for start_arg, and ni_ao_inttrig() checked that the software trigger number matched this start_arg value. The backwards compatibility issue is that the internal trigger number now has to match start_arg when start_src is TRIG_EXT when it previously had to be 0.

Fix the backwards compatibility issue in ni_ao_inttrig() by always allowing software trigger number 0 when start_src is something other than TRIG_INT.

Thanks to Spencer Olson for reporting the issue.

Fixes ebb657babfa9 ("staging: comedi: ni_mio_common: clarify the cmd->start_arg validation and use")
---
 drivers/staging/comedi/drivers/ni_mio_common.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/staging/comedi/drivers/ni_mio_common.c +9 -1
@@ -2823,7 +2823,15 @@ static int ni_ao_inttrig(struct comedi_d
 	int i;
 	static const int timeout = 1000;
 
-	if (trig_num != cmd->start_arg)
+	/*
+	 * Require trig_num == cmd->start_arg when cmd->start_src == TRIG_INT.
+	 * For backwards compatibility, also allow trig_num == 0 when
+	 * cmd->start_src != TRIG_INT (i.e. when cmd->start_src == TRIG_EXT);
+	 * in that case, the internal trigger is being used as a pre-trigger
+	 * before the external trigger.
+	 */
+	if (!(trig_num == cmd->start_arg ||
+	      (trig_num == 0 && cmd->start_src != TRIG_INT)))
 		return -EINVAL;
 
 	/* Null trig at beginning prevent ao start trigger from executing more than

Patches currently in stable-queue which might be from [email protected] are

queue-4.4/staging-comedi-comedi_test-fix-timer-race-conditions.patch queue-4.4/staging-comedi-ni_mio_common-fix-ao-inttrig-backwards-compatibility.patch queue-4.4/staging-comedi-ni_mio_common-fix-wrong-insn_write-handler.patch queue-4.4/staging-comedi-daqboard2000-bug-fix-board-type-matching-code.patch