From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Vojtech Pavlik <vojtech@suse.cz>
Cc: linux-input@atrey.karlin.mff.cuni.cz,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 0/16] New set of input patches
Date: Thu, 13 Jan 2005 15:16:11 -0500 [thread overview]
Message-ID: <d120d50005011312166fd03c56@mail.gmail.com> (raw)
In-Reply-To: <20050113192525.GA4680@ucw.cz>
On Thu, 13 Jan 2005 20:25:25 +0100, Vojtech Pavlik <vojtech@suse.cz> wrote:
> On Thu, Jan 13, 2005 at 12:52:14PM -0500, Dmitry Torokhov wrote:
>
> > The problem is not with binding devices, it is with mostly with
> > sharing the same IRQ between different ports.
> >
> > Look at the MUX case, you have 4 ports all sharing the same IRQ. At
> > startup i8042 enables all on-chip ports and registers them with
> > serio_register_port(). When first serio driver class i8042_open it
> > installs IRQ handler. All 4 ports are enabled now (because we want to
> > do hot-plug) but, especially with async. serio registration, only the
> > first is fully registered with serio subsystem. If data was to come
> > from any other port the shared IRQ handler will call serio_reconnect
> > on half-alive port. The similar issues happen when you try to
> > unregister port.
> >
> > With start/stop methods allow serop core signal driver that the port
> > is fully registered and now is safe to use. If IRQ is not shared
> > between ports one can safely register/unregister handler in open/close
> > methods (at the expense of hotplug device support) but with shared IRQ
> > you need additional callbacks.
>
> Yes, this can result in calling serio_reconnect on a port that's not
> registered yet. But I believe we don't need a callback for this, just a
> flag in the serio struct that will say "live", be set during
> registration, and until that time all serio_interrupt() calls would be
> ignored?
>
You can't have this flag in serio struct because unless this flag is
set you should not access serio struct in question, this is chicken
and egg problem. While you can somewhat control creation the deletion
is especially tricky. You need to service interrupts up until the
close is called but not a moment later as serio structure will be
freed by serio core. Therefore flag should be in the driver and having
code poking in the driver guts is not a giood idea.
start/stop are not mandatory methods so only problem drivers needs to
be adjusted.
>
> > > > 04-serio-suppress-dup-events.patch
> > > > Do not submit serio event into event queue if there is already one
> > > > of the same type for the same port in front of it. Also look for
> > > > duplicat events once event is processed. This should help with
> > > > disconnected ports generating alot of data and consuming memory for
> > > > events when kseriod gets behind and prevents constant rescans.
> > > > This also allows to remove special check for 0xaa in reconnect path
> > > > of interrupt handler known to cause problems with Toshibas keyboards.
> > >
> > > Ok. Since we'll be usually scanning an empty list, this shouldn't add
> > > any overhead.
> >
> > Plus serio events are rare so unless there are "runaway" serio interrupt this
> > patch tries to procet from there shoudl not be pretty much any overhead.
>
> Indeed.
>
> > > Btw, why do we need _both_ to scan for duplicate events on event
> > > completion and check at event insert time? One should be enough - if we
> > > always check, then we cannot have duplicate events and if we always are
> > > able to deal with them, we don't have to care ...
> >
> > A duplicate event can be queued while kseriod was processing current event,
> > checking for a dupe is cheaper then doing duplicate work we'd just done and
> > the list is most likely empty anyway.
>
> Yes. So I'd probably drop the check when we're inserting the event?
>
No because (potentially) while kseriod is busy waiting on semaphore or
doing something else psmouse with synaptics touchpad can generate
rescan events at rate of 480 events/sec consuming memory for no good
reason.
>
> I think it could be done by marking the port dead, but still leaving it
> there when the module exits, but it's probably not worth it.
>
Then you would have to have 2 separate paths for hardware cleanup on
unload and for cleanup on driver disconnect...
--
Dmitry
next prev parent reply other threads:[~2005-01-13 20:23 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-29 7:17 [PATCH 0/16] New set of input patches Dmitry Torokhov
2004-12-29 7:19 ` [PATCH 1/16] i8042 panicblink cleanup Dmitry Torokhov
2004-12-29 7:20 ` [PATCH 2/16] Add serio start and stop methods Dmitry Torokhov
2004-12-29 7:20 ` [PATCH 3/16] i8042: Make use of new " Dmitry Torokhov
2004-12-29 7:21 ` [PATCH 4/16] Suppress duplicate events in serio core Dmitry Torokhov
2004-12-29 7:22 ` [PATCH 5/16] evdev: return -EINVAL if read buffer is too small Dmitry Torokhov
2004-12-29 7:23 ` [PATCH 6/16] Propery set up name for PS/2 Logitech mice Dmitry Torokhov
2004-12-29 7:24 ` [PATCH 7/16] Limit Synaptics rate on Toshiba Satellites Dmitry Torokhov
2004-12-29 7:25 ` [PATCH 8/16] Allow setkeycodes work again Dmitry Torokhov
2004-12-29 7:26 ` [PATCH 9/16] i8042: fix sysfs permissiions for 'debug' parameter Dmitry Torokhov
2004-12-29 7:27 ` [PATCH 10/16] Fix building twidjoy module Dmitry Torokhov
2004-12-29 7:28 ` [PATCH 11/16] Use msecs_to_jiffies in input core Dmitry Torokhov
2004-12-29 7:28 ` [PATCH 12/16] Use msecs_to_jiffies in atkbd Dmitry Torokhov
2004-12-29 7:29 ` [PATCH 13/16] Introduce serio_get/set_drvdata helpers Dmitry Torokhov
2004-12-29 7:31 ` [PATCH 14/16] Introduce serio_id to match ports and drivers Dmitry Torokhov
2004-12-29 7:32 ` [PATCH 15/16] serio bus implementation cleanup Dmitry Torokhov
2004-12-29 7:33 ` [PATCH 16/16] serio connect methods should return error codes Dmitry Torokhov
2005-01-13 15:36 ` [PATCH 0/16] New set of input patches Vojtech Pavlik
2005-01-13 17:52 ` Dmitry Torokhov
2005-01-13 19:25 ` Vojtech Pavlik
2005-01-13 20:16 ` Dmitry Torokhov [this message]
2005-01-27 14:04 ` Dmitry Torokhov
2005-01-27 16:15 ` Vojtech Pavlik
2005-01-27 16:36 ` Vojtech Pavlik
2005-01-27 18:18 ` Dmitry Torokhov
2005-01-27 22:16 ` Vojtech Pavlik
2005-01-30 23:35 ` Dmitry Torokhov
2005-01-31 9:13 ` Vojtech Pavlik
2005-01-28 7:13 ` Dmitry Torokhov
2005-01-28 11:24 ` Vojtech Pavlik
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=d120d50005011312166fd03c56@mail.gmail.com \
--to=dmitry.torokhov@gmail.com \
--cc=dtor_core@ameritech.net \
--cc=linux-input@atrey.karlin.mff.cuni.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=vojtech@suse.cz \
/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