public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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, 27 Jan 2005 13:18:55 -0500	[thread overview]
Message-ID: <d120d5000501271018358c1d56@mail.gmail.com> (raw)
In-Reply-To: <20050127163605.GA15301@ucw.cz>

On Thu, 27 Jan 2005 17:36:05 +0100, Vojtech Pavlik <vojtech@suse.cz> wrote:
> On Thu, Jan 27, 2005 at 05:15:18PM +0100, Vojtech Pavlik wrote:
> 
> > OK. I'll go through them, and apply as appropriate. I still need to wrap
> > my mind around the start() and stop() methods and see the necessity. I
> > still think a variable in the serio struct, only accessed by the serio.c
> > core driver itself (and never by the port driver) that'd cause all
> > serio_interrupt() calls to be ignored until set in the asynchronous port
> > registration would be well enough.
> 
> I've read he start() and stop() code, and I came to the conclusion
> again that we don't need them as serio port driver methods. i8042 uses
> them to set the exists variable only and uses that variable _solely_ for
> the purpose of skipping calls to serio_interrupt(), serio_cleanup() and
> serio_unregister().
> 
> By instead checking a member of the serio struct in these functions, and
> doing nothing if not set, we achieve the same goal, without adding extra
> cruft to the interface, making it allowed to call these serio functions
> on a non-registered or half-registered serio struct, with the effect
> being defined to nothing.
> 

No, you can not peek into serio structure from a driver, not when it
was dynamically allocated and can be gone at any time. Please consider
the following screnario when shutting down 8042 when you have a MUX
with several ports:

The rough call sequence is:
i8042_exit
  serio_unregister_port
     driver->disconnect
        serio_close
           i8042->close
     free(serio)

We need to keep interrupts passed to serio core until serio_close is
completed so device properly ACKs/responds to cleanup commands.
Additionally, in i8042 close we do not free IRQ until last port is
unregistered nor we disable the port because we want to support
hotplugging. If interrupt comes after port was freed but before
serio_unregister_port has returned i8042_interrupt will call
serio_interrupt for port that was just free()ed. Special flag in serio
will not help because you need to know that port pointer is valid. You
could try pinning the port in memory buy taking a refernce but then
asynchronous unregister is not possible and it is needed in some
cases.

I think that having these 2 interface functions helps clearly define
these sequence points when port can/can not be used, simplifies logic
and alerts driver authors of this potential problem.
 
-- 
Dmitry

  reply	other threads:[~2005-01-27 18:19 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
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 [this message]
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=d120d5000501271018358c1d56@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