linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Shem Multinymous <multinymous@gmail.com>
Cc: Elias Oltmanns <eo@nebensachen.de>,
	Thomas Renninger <trenn@suse.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: Laptop shock detection and harddisk protection
Date: Thu, 11 Sep 2008 18:34:46 +0200	[thread overview]
Message-ID: <48C948A6.3080404@kernel.org> (raw)
In-Reply-To: <41840b750809110908o54a61f55w7b1b9793abf55634@mail.gmail.com>

Hello, Shem Multinymous.

Shem Multinymous wrote:
> Hi Tejun,
>> 1. How should the shock interface look like?  As we're gonna need
>>   userland daemon one way or the other, we can use the userland
>>   daemon to glue all the interfaces but it would be much better to
>>   have a unified interface.  Although there seem to be several
>>   different variants, they don't differ all that much and creating a
>>   new interface every time is painful.  I think we can get by with a
>>   sysfs interface with notification.
> 
> Using the input device interface for the accelerometer (as done by
> tp_smapi's hdaps + latest hdapsd) greatly reduces the number of
> accelerometer-related timer interrupts on tickless kernels, as
> measured by powertop. With syscall polling you have the kernal polling
> the hardware at ~50Hz and then the userspace hdapsd polling the kernel
> at ~50Hz. When they're out of phase so you can get up to 100
> interrupts/sec. With an input device you're always at 50Hz. The phase
> difference also induces a small extra delay in the shock handling
> response.

That reduction comes because input device supports poll and
sysfs_notify_event() does about the same thing.  The uesrland daemon
can just poll on a node and read data nodes when poll event on the
node triggeres.

>> 2. If we're gonna unify interface, how much can we unify the backend?
>>   Some devices are based on polling, others interrupt.  For polling,
>>   is it better to delegate the whole polling to userland or is it
>>   better to do some of it in kernel (tp_smapi seems to be doing
>>   this)?
> 
> The ThinkPad accelerometer needs to be polled at very regular
> intervals (max jitter on the order of 10ms), which sounds like a job
> for the kernel.

Yes, I agree.

> This is because in ThinkPads we actually have a 4-level pile:
> [hdapsd userspace] -> [hdaps kernel] -> [embedded controller] ->
> [accelerometer A2D]
> What the kernel polls is actually is the H8S embedded controller (EC)
> chip, which in turn does its own polling of the accelerometer A2D.
> Now, the EC has a tiny buffer and strange buffering semantics, and it
> has its own internal clock, so the software->EC polling should be very
> regular to minmize EC buffer overflows/underruns.

So, I think the whole polling should be implemented inside the kernel
and the kernel should notify userland when new data is available,
which is about what the current joystick implementation does and can
be achieved using sysfs_notify_event().

>> 3. What about the userland daemon?  It would be best to have a unified
>>   daemon which can handle all instead of one for hdaps and another
>>   for hp (and so on).  If we can unify the interface, this will be
>>   much easier.
> 
> Assuming the funky shock detection algorithms are done in userspace,
> we need two interfaces: one for the acceleration data (an input device
> works nicely) and one for "unload now" events.
> On HP, the kernel can trigger the "unload now" event directly. On
> ThinkPads, there's still the question of what the userspace shock
> detection daemon should do when it detects a shock: should it unloads
> the heads by itself, or trigger the generic "unload now" event and let
> someone else do the actual unloading.

Unloading heads will be simple.  Just echoing timeout in ms to sysfs
nodes, so I don't think it's a good idea to push out actual unloading
to another process especially as fork doesn't inherit mlockall.

On a related note, is there any plan to merge tp_smapi to mainline?
It seems you put a lot of work into it and I don't really see why it
should stay out of tree.

Thanks.

-- 
tejun

  reply	other threads:[~2008-09-11 16:36 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-10 16:59 Laptop shock detection and harddisk protection Tejun Heo
2008-09-10 19:43 ` Renato S. Yamane
2008-09-11 10:26 ` Austin Zhang
2008-09-11 11:18   ` Tejun Heo
2008-09-11 16:08 ` Shem Multinymous
2008-09-11 16:34   ` Tejun Heo [this message]
2008-08-17 19:48     ` Pavel Machek
2008-09-11 20:00     ` Elias Oltmanns
2008-08-17 19:51       ` Pavel Machek
2008-09-17 15:21         ` Elias Oltmanns
2008-09-17 19:36           ` Shem Multinymous
2008-09-11 20:25     ` Shem Multinymous
2008-08-17 19:30       ` Pavel Machek
2008-09-11 23:35       ` Tejun Heo
2008-09-12 16:59         ` Greg KH
2008-08-17 19:45           ` Pavel Machek
2008-09-17 18:04             ` Greg KH
2008-09-18 11:18               ` Pavel Machek
2008-09-19  9:03                 ` Thomas Renninger
2008-09-24  5:14                   ` Greg KH
2008-10-07 20:40                     ` Pavel Machek
2008-10-07 21:19                       ` Greg KH
2008-10-07 21:40                         ` Pavel Machek
2008-10-07 22:03                           ` Greg KH
2008-10-07 23:03                             ` Pavel Machek
2008-10-07 22:55                         ` Shem Multinymous
2008-09-15  8:29           ` Tejun Heo
2008-09-15 18:09             ` Shem Multinymous
2008-09-15 20:10               ` Tejun Heo
2008-09-14  4:41       ` Jeremy Fitzhardinge
2008-09-11 23:36     ` Henrique de Moraes Holschuh
     [not found] <baBmH-48R-17@gated-at.bofh.it>
2008-09-12 13:28 ` Bodo Eggert

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=48C948A6.3080404@kernel.org \
    --to=tj@kernel.org \
    --cc=eo@nebensachen.de \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=multinymous@gmail.com \
    --cc=trenn@suse.de \
    /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).