From: Alexander Holler <holler@ahsoftware.de>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
Jonathan Cameron <jic23@cam.ac.uk>,
rtc-linux@googlegroups.com,
Alessandro Zummo <a.zummo@towertech.it>,
srinivas pandruvada <srinivas.pandruvada@intel.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 4/4 v4] rtc: add rtc-driver for HID sensors of type time
Date: Fri, 14 Dec 2012 22:24:03 +0100 [thread overview]
Message-ID: <50CB98F3.9030509@ahsoftware.de> (raw)
In-Reply-To: <50CB54C3.1090409@metafoo.de>
Am 14.12.2012 17:33, schrieb Lars-Peter Clausen:
> On 12/14/2012 04:24 PM, Alexander Holler wrote:
>> Am 14.12.2012 15:34, schrieb Lars-Peter Clausen:
>>> On 12/14/2012 03:29 PM, Alexander Holler wrote:
>>>> Am 14.12.2012 15:15, schrieb Alexander Holler:
>>>>> Am 14.12.2012 14:08, schrieb Alexander Holler:
>>>>>> Am 14.12.2012 10:42, schrieb Lars-Peter Clausen:
>>>>>
>>>>>>> And another thing I've overlooked before:
>>>>>>> wait_for_completion_interruptible_timeout can either return a positive
>>>>>>> number when the completion was completed, 0 in case of an timeout, or a
>>>>>>> negative error code in case it was interrupted. You need to handle all
>>>>>>> three. E.g. something like this.
>>>>>>>
>>>>>>> ret = wait_for_completion_interruptible_timeout(...)
>>>>>>> if (ret == 0)
>>>>>>> return -EIO;
>>>>>>> if (ret < 0)
>>>>>>> return ret
>>>>>>>
>>>>>>
>>>>>> Hmpf, the only working approach to use some in kernel functions really
>>>>>> is to the read source yourself and don't trust anything else. :/
>>>>>
>>>>> Anyway, my approach doesn't work as it introduces a race condition:
>>>>>
>>>>>
>>>>> /* get a report with all values through requesting one value */
>>>>> sensor_hub_input_attr_get_raw_value(...)
>>>>>
>>>>> /* race if this task goes to slepp and the values were
>>>>> received before it could call the below wait...
>>>>>
>>>>> /* wait for all values (event) */
>>>>> if (!wait_for_completion_interruptible_timeout(...))
>>>>>
>>>>>
>>>>> I'll have to look for a mechanism how to avoid that. So v5 might need
>>>>> some time.
>>>>
>>>> Sorry for the noise. That INIT_COMPLETION() before the sensor...() does
>>>> exactly that. So it's enough if I handle the different return situations of
>>>> wait_for...().
>>>>
>>>> I will just use if(wait...()<=0) return -EIO.
>>>>
>>>
>>> No, that's wrong. You should really return the error code returned by
>>> wait_for_completion_interruptible_timeout(). This will make sure that
>>> userspace restarts the syscall if necessary.
>>
>> Sorry for my ignorance, but which reasons for interruption do exist
>> which doesn't kill the userspace too? The error number -ESYSRESTART
>> doesn't offer a hint.
>
>
> Well I'm not an expert on this either, but as far as I know any signal the
> process is listening on can cause an interruption. Most signals won't kill
> the process though. More on the whole restart stuff:
> http://lwn.net/Articles/528935/
I've come to the conclusion that using
wait_for_completion_interruptible_timeout() isn't what should be used
here and will switch to wait_for_completion_killable_timeout(). Here are
my reasons:
1. I don't think any caller of rtc_ops.read_time will be prepared to
handle -ESYSRESTART.
2. Someone wants the time. Beeing interruptible seems to mean the
process might be interrupted by signal processing with an unknown long
duration which could decrease the accuracy even below the desired one
second (which doesn't look unlikely, signal processing in userspace is
unpredictable and (mis)used for all kind of stuff).
3. I've primarily used it to be friendly in means of killable, but
didn't know that ..._killable() does exist. ;)
Btw., here is a imho good and especially short introduction about the
task states along with some pointers to more comprehensive resources:
http://www.ibm.com/developerworks/linux/library/l-task-killable/
v5 of that patch will follow. Hopefully the last one necessary.
Regards,
Alexander
next prev parent reply other threads:[~2012-12-14 21:24 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-09 12:21 [PATCH 0/3] iio: HID sensor time (as RTC) Alexander Holler
2012-12-09 12:21 ` [PATCH 1/3] iio: hid-sensors: respect CONFIG_IIO_TRIGGER Alexander Holler
2012-12-09 12:21 ` [PATCH 2/3] iio: Add Usage IDs for HID time sensors Alexander Holler
2012-12-09 12:21 ` [PATCH 3/3] iio: add rtc-driver for HID sensors of type time Alexander Holler
2012-12-09 12:55 ` Lars-Peter Clausen
2012-12-09 16:40 ` Alexander Holler
2012-12-09 18:16 ` Alexander Holler
2012-12-09 19:20 ` Lars-Peter Clausen
2012-12-10 13:12 ` Alexander Holler
2012-12-10 14:51 ` [PATCH 3/3 v2] " Alexander Holler
2012-12-10 17:05 ` Lars-Peter Clausen
2012-12-10 19:45 ` Alexander Holler
2012-12-10 20:22 ` Lars-Peter Clausen
2012-12-10 21:26 ` Alexander Holler
2012-12-10 21:39 ` Lars-Peter Clausen
2012-12-10 21:42 ` Jonathan Cameron
2012-12-10 22:50 ` Alexander Holler
2012-12-11 9:31 ` Jonathan Cameron
2012-12-11 9:40 ` Lars-Peter Clausen
2012-12-11 12:39 ` Alexander Holler
2012-12-11 13:54 ` Jonathan Cameron
2012-12-11 18:21 ` [PATCH 1/4 v2] iio: hid-sensors: respect CONFIG_IIO_TRIGGER Alexander Holler
2012-12-11 18:21 ` [PATCH 2/4 RESEND] iio: Add Usage IDs for HID time sensors Alexander Holler
2012-12-15 11:06 ` Jonathan Cameron
2012-12-15 12:41 ` Alexander Holler
2012-12-15 12:45 ` [PATCH 1/4 " Alexander Holler
2012-12-15 12:45 ` [PATCH 2/4 RESEND] iio: merge hid-sensor-attributes.h into hid-sensor-hub.h Alexander Holler
2013-01-03 9:41 ` Jiri Kosina
2013-01-06 11:50 ` Jonathan Cameron
2012-12-15 12:45 ` [PATCH 3/4 v5 RESEND] rtc: add rtc-driver for HID sensors of type time Alexander Holler
2013-01-03 22:39 ` Andrew Morton
2013-01-04 9:18 ` Jiri Kosina
2013-01-04 13:10 ` Alexander Holler
2013-01-06 11:50 ` Jonathan Cameron
2012-12-15 12:45 ` [PATCH 4/4 RESEND] hid: iio: rename struct hid_sensor_iio_common to hid_sensor_common Alexander Holler
2013-01-03 9:42 ` Jiri Kosina
2013-01-06 11:50 ` Jonathan Cameron
2013-01-03 9:40 ` [PATCH 1/4 RESEND] iio: Add Usage IDs for HID time sensors Jiri Kosina
2013-01-06 11:51 ` Jonathan Cameron
2012-12-11 18:21 ` [PATCH 3/4] iio: merge hid-sensor-attributes.h into hid-sensor-hub.h Alexander Holler
2012-12-12 15:45 ` Pandruvada, Srinivas
2012-12-12 20:10 ` Alexander Holler
2012-12-12 20:28 ` [PATCHi 5/4] hid: iio: rename struct hid_sensor_iio_common to hid_sensor_common Alexander Holler
2012-12-12 21:04 ` Pandruvada, Srinivas
2012-12-11 18:21 ` [PATCH 4/4 v3] rtc: add rtc-driver for HID sensors of type time Alexander Holler
2012-12-12 9:51 ` Lars-Peter Clausen
2012-12-12 10:14 ` Alexander Holler
2012-12-12 10:18 ` Lars-Peter Clausen
2012-12-12 11:11 ` [PATCH 4/4 v4] " Alexander Holler
2012-12-14 9:42 ` Lars-Peter Clausen
2012-12-14 13:08 ` Alexander Holler
2012-12-14 14:15 ` Alexander Holler
2012-12-14 14:29 ` Alexander Holler
2012-12-14 14:34 ` Lars-Peter Clausen
2012-12-14 15:24 ` Alexander Holler
2012-12-14 16:33 ` Lars-Peter Clausen
2012-12-14 21:24 ` Alexander Holler [this message]
2012-12-14 22:02 ` [PATCH 4/4 v5] " Alexander Holler
2012-12-15 10:54 ` [PATCH 1/4 v2] iio: hid-sensors: respect CONFIG_IIO_TRIGGER Jonathan Cameron
2012-12-15 12:37 ` Alexander Holler
2012-12-16 22:15 ` [PATCH 3/3 v2] iio: add rtc-driver for HID sensors of type time Alessandro Zummo
2012-12-17 7:38 ` Alexander Holler
2012-12-10 22:20 ` Alexander Holler
2012-12-10 22:36 ` Lars-Peter Clausen
2012-12-11 0:01 ` Alexander Holler
2012-12-11 10:35 ` Alan Cox
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=50CB98F3.9030509@ahsoftware.de \
--to=holler@ahsoftware.de \
--cc=a.zummo@towertech.it \
--cc=akpm@linux-foundation.org \
--cc=jic23@cam.ac.uk \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rtc-linux@googlegroups.com \
--cc=srinivas.pandruvada@intel.com \
/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;
as well as URLs for NNTP newsgroup(s).