From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Jean Delvare <khali@linux-fr.org>,
ben-linux@fluff.org, w.sang@pengutronix.de,
linux-kernel@vger.kernel.org, lenb@kernel.org,
rafael.j.wysocki@intel.com, broonie@opensource.wolfsonmicro.com,
grant.likely@secretlab.ca, linus.walleij@linaro.org,
mathias.nyman@linux.intel.com, linux-acpi@vger.kernel.org
Subject: Re: [PATCH 2/2] ACPI / platform: Initialize ACPI handles of platform devices in advance
Date: Mon, 19 Nov 2012 14:32:21 -0800 [thread overview]
Message-ID: <20121119223221.GB2250@kroah.com> (raw)
In-Reply-To: <1610515.dOb8aMkzLk@vostro.rjw.lan>
On Mon, Nov 19, 2012 at 09:44:21PM +0100, Rafael J. Wysocki wrote:
> On Monday, November 19, 2012 06:45:22 PM Rafael J. Wysocki wrote:
> > On Monday, November 19, 2012 06:32:06 PM Rafael J. Wysocki wrote:
> > > On Monday, November 19, 2012 08:23:34 AM Greg Kroah-Hartman wrote:
> > > > On Sun, Nov 18, 2012 at 10:13:59PM +0100, Rafael J. Wysocki wrote:
> > > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > >
> > > > > The current platform device creation and registration code in
> > > > > acpi_create_platform_device() is quite convoluted. This function
> > > > > takes an ACPI device node as an argument and eventually calls
> > > > > platform_device_register_resndata() to create and register a
> > > > > platform device object on the basis of the information contained
> > > > > in that code. However, it doesn't associate the new platform
> > > > > device with the ACPI node directly, but instead it relies on
> > > > > acpi_platform_notify(), called from within device_add(), to find
> > > > > that ACPI node again with the help of acpi_platform_find_device()
> > > > > and acpi_platform_match() and then attach the new platform device
> > > > > to it. This causes an additional ACPI namespace walk to happen and
> > > > > is clearly suboptimal.
> > > > >
> > > > > Use the observation that it is now possible to initialize the ACPI
> > > > > handle of a device before calling device_add() for it to make this
> > > > > code more straightforward. Namely, add a new field to struct
> > > > > platform_device_info allowing us to pass the ACPI handle of interest
> > > > > to platform_device_register_full(), which will then use it to
> > > > > initialize the new device's ACPI handle before registering it.
> > > > > This will cause acpi_platform_notify() to use the ACPI handle from
> > > > > the device structure directly instead of using the .find_device()
> > > > > routine provided by the device's bus type. In consequence,
> > > > > acpi_platform_bus, acpi_platform_find_device(), and
> > > > > acpi_platform_match() are not necessary any more, so remove them.
> > > >
> > > > Why can't you use the platform_data * that is already in struct device
> > > > for this, instead of adding an acpi-specific field to the
> > > > platform_device structure?
> > >
> > > Hmm, I kind of don't understand the question. :-)
> > >
> > > Yes, we have acpi_handle in struct device (it actually is being added by a
> > > patch you've acked) and we use it. The whole point here is to streamline
> > > of the initalization of that field.
> > >
> > > > If not that, surely there is another field in struct device that you
> > > > could use that is free for this type of device?
> > >
> > > Yes, there is one and as I said above. :-)
> > >
> > > I'd be happy to use the struct device's field directly, but
> > > platform_device_register_full() allocates memory for the struct device in
> > > question, so that field actually doesn't exist yet when it is called.
> > >
> > > > > struct platform_device_info {
> > > > > struct device *parent;
> > > > > + void *acpi_handle;
> > > >
> > > > Oh, and if I do accept this, I want a "real" structure pointer here
> > > > please, not a void * "handle". That way is a slippery slope to the
> > > > Windows kernel programming style :)
> > >
> > > This is (void *), because the field being initialized is (void *). That field,
> > > in turn, is (void *), because ACPICA defines it that way. I thought about
> > > wrapping that in some more meaningless data type, but I did't find a way
> >
> > s/meaningless/meaningful/
>
> Well, perhaps I'll describe the problem to you, maybe you can help. :-)
>
> So, we want to have acpi_handle (or acpi_node) in addition to of_node in struct
> device (to be used in the analogous way plus for the execution of AML methods),
> but we don't want all users of device.h to have to include ACPI headers
> where the acpi_handle data type is defined. For this reason, we're using
> (void *) as its data type now, which let's say I'm not really happy with.
>
> I've been thinking about that for quite a while, though, and I'm not really
> sure what to do about that. Perhaps we could define something like
>
> struct acpi_dev_node {
> #ifdef CONFIG_ACPI
> void *handle;
> #endif
> };
>
> in device.h and use that as "struct acpi_dev_node acpi_node;" in struct device.
> Then, we could add the following macro
>
> #ifdef CONFIG_ACPI
> #define ACPI_HANDLE(dev) ((dev)->acpi_node.handle)
> #else
> #define ACPI_HANDLE(dev) (NULL)
> #endif
>
> and redefine DEVICE_ACPI_HANDLE(dev) as ((acpi_handle)ACPI_HANDLE(dev)).
>
> Then, the $subject patch would add "struct acpi_dev_node acpi_node;" to
> struct platform_device_info and use ACPI_HANDLE(dev) instead of accessing
> the struct device's field directly.
>
> I wonder what you think?
I like the hack of using an empty structure here, that's fine with me,
and makes me feel a little bit better about the whole "void *" stuff.
If you respin the patch with this, I'll ack it.
thanks,
greg k-h
next prev parent reply other threads:[~2012-11-19 22:31 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-15 11:03 [PATCH v2 0/3] ACPI 5 support for GPIO, SPI and I2C Mika Westerberg
2012-11-15 11:03 ` [PATCH v2 1/3] gpio / ACPI: add ACPI support Mika Westerberg
2012-11-16 1:34 ` Rafael J. Wysocki
2012-11-16 6:54 ` Mika Westerberg
2012-11-16 8:05 ` Mika Westerberg
2012-11-16 8:12 ` Mika Westerberg
2012-11-16 10:02 ` Rafael J. Wysocki
2012-11-16 12:49 ` Mika Westerberg
2012-11-16 10:03 ` Rafael J. Wysocki
2012-11-15 11:03 ` [PATCH v2 2/3] spi / ACPI: add ACPI enumeration support Mika Westerberg
2012-11-16 10:06 ` Rafael J. Wysocki
2012-11-17 10:11 ` Rafael J. Wysocki
2012-11-17 10:18 ` Mika Westerberg
2012-11-15 11:03 ` [PATCH v2 3/3] i2c " Mika Westerberg
2012-11-16 10:09 ` Rafael J. Wysocki
2012-11-16 13:03 ` Jean Delvare
2012-11-16 13:21 ` Rafael J. Wysocki
2012-11-16 13:42 ` Jean Delvare
2012-11-16 14:17 ` Mika Westerberg
2012-11-16 15:23 ` Mika Westerberg
2012-11-16 16:47 ` Jean Delvare
2012-11-16 17:28 ` [PATCH v2 3/3 UPDATED] " Mika Westerberg
2012-11-16 18:12 ` Jean Delvare
2012-11-17 6:46 ` Bjorn Helgaas
2012-11-17 8:03 ` Mika Westerberg
2012-11-17 9:55 ` Mika Westerberg
2012-11-19 22:49 ` Bjorn Helgaas
2012-11-19 23:15 ` Rafael J. Wysocki
2012-11-19 23:28 ` Rafael J. Wysocki
2012-11-20 7:07 ` Mika Westerberg
2012-11-17 11:24 ` Rafael J. Wysocki
2012-11-18 15:55 ` Mika Westerberg
2012-11-18 21:10 ` [PATCH 0/2] ACPI: Simplify "glueing" to physical nodes (was: Re: [PATCH v2 3/3 UPDATED] i2c / ACPI: add ACPI enumeration support) Rafael J. Wysocki
2012-11-18 21:12 ` [PATCH 1/2] ACPI: Allow ACPI handles of devices to be initialized in advance Rafael J. Wysocki
2012-11-19 9:42 ` Mika Westerberg
2012-11-19 12:33 ` [Update][PATCH " Rafael J. Wysocki
2012-11-18 21:13 ` [PATCH 2/2] ACPI / platform: Initialize ACPI handles of platform devices " Rafael J. Wysocki
2012-11-19 16:23 ` Greg Kroah-Hartman
2012-11-19 17:32 ` Rafael J. Wysocki
2012-11-19 17:45 ` Rafael J. Wysocki
2012-11-19 20:44 ` Rafael J. Wysocki
2012-11-19 21:05 ` Mika Westerberg
2012-11-19 21:56 ` Rafael J. Wysocki
2012-11-19 22:32 ` Greg Kroah-Hartman [this message]
2012-11-19 22:44 ` Rafael J. Wysocki
2012-11-19 18:25 ` Rafael J. Wysocki
2012-11-19 22:31 ` Greg Kroah-Hartman
2012-11-19 22:45 ` Rafael J. Wysocki
2012-11-20 0:55 ` [Update][PATCH 0/3] ACPI: Simplify "glueing" to physical nodes Rafael J. Wysocki
2012-11-20 0:57 ` [Update][PATCH 1/3] ACPI: Allow ACPI handles of devices to be initialized in advance Rafael J. Wysocki
2012-11-20 0:59 ` [Update][PATCH 2/3] ACPI / driver core: Introduce struct acpi_dev_node and related macros Rafael J. Wysocki
2012-11-20 9:10 ` Mika Westerberg
2012-11-20 9:34 ` [Update 2][PATCH " Rafael J. Wysocki
2012-11-20 12:57 ` Mika Westerberg
2012-11-20 18:08 ` Greg Kroah-Hartman
2012-11-20 1:01 ` [Update][PATCH 3/3] ACPI / platform: Initialize ACPI handles of platform devices in advance Rafael J. Wysocki
2012-11-20 18:08 ` Greg Kroah-Hartman
2012-11-20 9:11 ` [Update][PATCH 0/3] ACPI: Simplify "glueing" to physical nodes Mika Westerberg
2012-11-20 9:31 ` Rafael J. Wysocki
2012-11-20 18:09 ` Greg Kroah-Hartman
2012-11-20 21:40 ` Rafael J. Wysocki
2012-11-16 20:02 ` [PATCH v2 3/3] i2c / ACPI: add ACPI enumeration support Rafael J. Wysocki
2012-11-16 20:09 ` Mika Westerberg
2012-11-16 20:18 ` Rafael J. Wysocki
2012-11-20 10:29 ` [PATCH v3 0/3] ACPI 5 support for GPIO, SPI and I2C Mika Westerberg
2012-11-20 10:29 ` [PATCH v3 1/3] gpio / ACPI: add ACPI support Mika Westerberg
2012-11-20 12:46 ` Rafael J. Wysocki
2012-11-20 10:29 ` [PATCH v3 2/3] spi / ACPI: add ACPI enumeration support Mika Westerberg
2012-11-20 13:05 ` Rafael J. Wysocki
2012-11-20 13:15 ` Mika Westerberg
2012-11-20 13:24 ` Rafael J. Wysocki
2012-11-20 10:29 ` [PATCH v3 3/3] i2c " Mika Westerberg
2012-11-20 13:06 ` Rafael J. Wysocki
2012-11-20 13:57 ` Mika Westerberg
2012-11-20 18:13 ` [PATCH v4 0/3] ACPI 5 support for GPIO, SPI and I2C Mika Westerberg
2012-11-20 18:13 ` [PATCH v4 1/3] gpio / ACPI: add ACPI support Mika Westerberg
2012-11-30 11:20 ` Grant Likely
2012-11-30 11:20 ` Grant Likely
2012-11-30 11:27 ` Rafael J. Wysocki
2012-11-20 18:13 ` [PATCH v4 2/3] spi / ACPI: add ACPI enumeration support Mika Westerberg
2012-11-30 11:24 ` Grant Likely
2012-11-30 11:24 ` Grant Likely
2012-11-30 11:36 ` Rafael J. Wysocki
2012-11-20 18:13 ` [PATCH v4 3/3] i2c " Mika Westerberg
2012-11-21 21:31 ` [PATCH v4 0/3] ACPI 5 support for GPIO, SPI and I2C Rafael J. Wysocki
2012-11-21 21:54 ` Jean Delvare
2012-11-23 11:39 ` Rafael J. Wysocki
2012-11-22 1:36 ` Mark Brown
2012-11-22 9:43 ` Linus Walleij
2012-11-22 10:03 ` Rafael J. Wysocki
2012-11-28 12:36 ` Mika Westerberg
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=20121119223221.GB2250@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=ben-linux@fluff.org \
--cc=bhelgaas@google.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=grant.likely@secretlab.ca \
--cc=khali@linux-fr.org \
--cc=lenb@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathias.nyman@linux.intel.com \
--cc=mika.westerberg@linux.intel.com \
--cc=rafael.j.wysocki@intel.com \
--cc=rjw@sisk.pl \
--cc=w.sang@pengutronix.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 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.