All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kristen Accardi <kristen.c.accardi@intel.com>
To: Patrick Mochel <mochel@linux.intel.com>
Cc: Prarit Bhargava <prarit@sgi.com>, Andrew Morton <akpm@osdl.org>,
	len.brown@intel.com, greg@kroah.com, linux-acpi@vger.kernel.org,
	pcihpd-discuss@lists.sourceforge.net,
	linux-kernel@vger.kernel.org, arjan@linux.intel.com,
	muneda.takahiro@jp.fujitsu.com, pavel@ucw.cz, temnota@kmv.ru
Subject: Re: [patch 1/3] acpi: dock driver
Date: Wed, 19 Apr 2006 10:08:57 -0700	[thread overview]
Message-ID: <1145466537.21185.24.camel@whizzy> (raw)
In-Reply-To: <20060418225427.GE4556@linux.intel.com>

On Tue, 2006-04-18 at 15:54 -0700, Patrick Mochel wrote:
> On Tue, Apr 18, 2006 at 11:03:16AM -0700, Kristen Accardi wrote:
> > Create a driver which lives in the acpi subsystem to handle dock events.  This 
> > driver is not an acpi driver, because acpi drivers require that the object
> > be present when the driver is loaded.
> 
> A few comments.. 
> 
> 
> > --- /dev/null
> > +++ 2.6-git-kca2/drivers/acpi/dock.c
> > @@ -0,0 +1,652 @@
> 
> > +#define ACPI_DOCK_COMPONENT 0x10000000
> > +#define ACPI_DOCK_DRIVER_NAME "ACPI Dock Station Driver"
> > +#define _COMPONENT		ACPI_DOCK_COMPONENT
> 
> These aren't necessary for code that is outside of the ACPI-CA. 

Originally I did not include these, but it turns out if you wish to use
the ACPI_DEBUG macro, you need to have these things defined.  I did go
ahead and use this macro in a couple places, mainly because I felt that
even though this isn't strictly an acpi driver (using the acpi driver
model), it does live in drivers/acpi and perhaps people might expect to
be able to debug it the same way.

> 
> > +struct dock_station {
> > +	acpi_handle handle;
> > +	unsigned long last_dock_time;
> > +	u32 flags;
> > +	spinlock_t dd_lock;
> > +	spinlock_t hp_lock;
> > +	struct list_head dependent_devices;
> > +	struct list_head hotplug_devices;
> > +};
> > +
> > +struct dock_dependent_device {
> > +	struct list_head list;
> > +	struct list_head hotplug_list;
> > +	acpi_handle handle;
> > +	acpi_notify_handler handler;
> > +	void *context;
> > +};
> > +
> > +#define DOCK_DOCKING	0x00000001
> > +
> > +static struct dock_station *dock_station;
> 
> Does this need to be dynamically allocated? Static initialization
> would be a bit cleaner and obviate the need for the NULL checks in
> several of the functions below. 
> 

It could be statically allocated, but I have a preference towards not
allocating statically in this case.  I will consider the option of
making it static.

> > +/**
> > + * eject_dock - respond to a dock eject request
> > + * @ds: the dock station
> > + *
> > + * This is called after _DCK is called, to execute the dock station's
> > + * _EJ0 method.
> > + */
> > +static void eject_dock(struct dock_station *ds)
> > +{
> > +	struct acpi_object_list arg_list;
> > +	union acpi_object arg;
> > +	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
> > +	union acpi_object *obj;
> > +
> > +	acpi_get_name(ds->handle, ACPI_FULL_PATHNAME, &buffer);
> > +	obj = buffer.pointer;
> > +
> > +	arg_list.count = 1;
> > +	arg_list.pointer = &arg;
> > +	arg.type = ACPI_TYPE_INTEGER;
> > +	arg.integer.value = 1;
> 
> Minor nit (that is replicated in many of the ACPI drivers). This can be
> done by just describing the data better: 
> 
> 	struct acpi_object arg = {
> 		.type		= ACPI_TYPE_INTEGER,
> 		.integer	= {
> 			.value	= 1,
> 		},
> 	};
> 	struct acpi_object_list arg_list = {
> 		.count		= 1,
> 		.pointer	= &arg,
> 	};
> 
> 	... 
> 
> In the long run, since the same exact code exists in dozens of places
> in the ACPI drivers, there should just be a helper for it. E.g.: 
> 
> 
> 	int ret;
> 	unsigned long value;
> 
> 	ret = acpi_get_int(ds->handle, "_EJO", &value);
> 	if (!ret)
> 		/* Use Value */
> 	else
> 		/* Error */
> 
> ...and get rid of the awkward object/object list handling. 
> 
> > +static inline void begin_dock(struct dock_station *ds)
> > +{
> > +	ds->flags |= DOCK_DOCKING;
> > +}
> > +
> > +static inline void complete_dock(struct dock_station *ds)
> > +{
> > +	ds->flags &= ~(DOCK_DOCKING);
> > +	ds->last_dock_time = jiffies;
> > +}
> > +
> > +/**
> > + * dock_in_progress - see if we are in the middle of handling a dock event
> > + * @ds: the dock station
> > + *
> > + * Sometimes while docking, false dock events can be sent to the driver
> > + * because good connections aren't made or some other reason.  Ignore these
> > + * if we are in the middle of doing something.
> > + */
> > +static int dock_in_progress(struct dock_station *ds)
> > +{
> > +	if ((ds->flags & DOCK_DOCKING) ||
> > +	    time_before(jiffies, (ds->last_dock_time + HZ)))
> > +		return 1;
> > +	return 0;
> > +}
> 
> These seem racy. It seems the flag should should at least be an atomic_t. But,
> if it's that, then it might as well be a mutex, eh? And, if it's a mutex, then
> do we need the other spinlocks? 
> 

yes, the flag might be racy.  we do need the other spinlocks however,
because they are locking lists within the dock_station struct, but not
the entire struct (unless I just change to something that locks the
entire struct).

> > +acpi_status
> > +register_hotplug_dock_device(acpi_handle handle, acpi_notify_handler handler,
> > +			     void *context)
> 
> If this is called from outside drivers/acpi/, you should return an int with a 
> real errno value. The AE_* values shouldn't be used outside of the ACPI CA. 
> 

Really?  We use these all over the place in drivers/pci/hotplug.  In
fact, you kinda have to use them if you are calling certain acpi
symbols, since they return these types.

For example, here are some functions will return acpi_status that we use
in hotplug land.

pci_osc_control_set() 
acpi_run_oshp()
acpi_walk_namespace requires its use.

I felt that by returning acpi_status I was being consistent with how
other acpi calls acted.  Is this another example of the iceberg that Len
was talking about in a previous email?? (ugh.)


> 
> > +acpi_status unregister_hotplug_dock_device(acpi_handle handle)
> 
> Does unregister need to return an error? 
> 

No probably not.

> 
> Thanks,
> 
> 
> 	Pat

thanks for reviewing again :).

Kristen

  reply	other threads:[~2006-04-19 17:00 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20060412221027.472109000@intel.com>
2006-04-12 22:18 ` [patch 1/3] acpi: dock driver Kristen Accardi
2006-04-12 22:35   ` [patch 1/3] acpi: dock driver (refreshed) Kristen Accardi
2006-04-13  5:27   ` [patch 1/3] acpi: dock driver Andrew Morton
2006-04-13  5:27     ` Andrew Morton
2006-04-14 22:02     ` Kristen Accardi
2006-04-14 22:49     ` Kristen Accardi
2006-04-15 14:29       ` Prarit Bhargava
2006-04-18 18:03         ` Kristen Accardi
2006-04-18 22:54           ` Patrick Mochel
2006-04-19 17:08             ` Kristen Accardi [this message]
2006-04-19 17:28               ` Patrick Mochel
2006-04-19 18:28                 ` Kristen Accardi
2006-04-19 18:20                   ` Patrick Mochel
2006-04-28 23:51           ` [patch 1/3] acpi: dock driver v3 Kristen Accardi
2006-05-11 18:45             ` [patch 1/3] acpi: dock driver v4 Kristen Accardi
2006-06-01 23:05               ` [patch 1/3] acpi: dock driver v6 Kristen Accardi
2006-06-01 23:20                 ` Andrew Morton
2006-06-02  0:53                   ` Kristen Accardi
2006-04-16 13:28       ` [patch 1/3] acpi: dock driver Prarit Bhargava
2006-04-12 22:18 ` [patch 2/3] acpiphp: use new " Kristen Accardi
2006-04-12 23:16   ` Christian Trefzer
2006-04-28 23:55   ` [patch 2/3] acpiphp: use new dock driver v2 Kristen Accardi
2006-04-12 22:18 ` [patch 3/3] acpiphp: prevent duplicate slot numbers when no _SUN Kristen Accardi
2006-04-13 12:36   ` MUNEDA Takahiro
2006-04-14 21:39     ` Kristen Accardi
2006-04-14 22:42 [patch 1/3] acpi: dock driver Brown, Len
2006-04-14 22:42 ` Brown, Len
2006-04-14 23:11 ` Kristen Accardi
  -- strict thread matches above, loose matches on Subject: below --
2006-04-14 23:17 Brown, Len
2006-04-14 23:17 ` Brown, Len
2006-04-19 17:14 Moore, Robert
2006-04-19 17:14 ` Moore, Robert
2006-04-19 17:36 ` Patrick Mochel
2006-04-19 17:51 Moore, Robert
2006-04-19 17:51 ` Moore, Robert
2006-04-19 18:06 ` Patrick Mochel
2006-04-19 19:17 Moore, Robert
2006-04-19 19:17 ` Moore, Robert

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=1145466537.21185.24.camel@whizzy \
    --to=kristen.c.accardi@intel.com \
    --cc=akpm@osdl.org \
    --cc=arjan@linux.intel.com \
    --cc=greg@kroah.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mochel@linux.intel.com \
    --cc=muneda.takahiro@jp.fujitsu.com \
    --cc=pavel@ucw.cz \
    --cc=pcihpd-discuss@lists.sourceforge.net \
    --cc=prarit@sgi.com \
    --cc=temnota@kmv.ru \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.