* [PATCH 3/4] fix module autoloading for ACPI enumerated devices
@ 2014-01-13 13:48 Zhang Rui
[not found] ` <1389620911-3890-1-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Zhang Rui @ 2014-01-13 13:48 UTC (permalink / raw)
To: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA
Cc: rjw-LthD3rsA81gm4RdzfppkhA, grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA, Zhang Rui
ACPI enumerated devices has ACPI style _HID and _CID strings,
all of these strings can be used for both driver loading and matching.
But currently, in Platform, I2C and SPI bus, only the ACPI style
driver matching is supported by invoking acpi_driver_match_device()
in bus .match() callback.
This patch fixes module autoloading on those buses for ACPI enumerated devices.
Signed-off-by: Zhang Rui <rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
drivers/base/platform.c | 12 +++++++++++-
drivers/i2c/i2c-core.c | 11 +++++++++++
drivers/spi/spi.c | 10 ++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 3a94b79..2f4aea2 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
char *buf)
{
struct platform_device *pdev = to_platform_device(dev);
- int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
+ if (len != -ENODEV)
+ return len;
+
+ len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
}
@@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
if (rc != -ENODEV)
return rc;
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
+
add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
pdev->name);
return 0;
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index d74c0b3..c4c5588 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
{
struct i2c_client *client = to_i2c_client(dev);
+ int rc;
+
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
if (add_uevent_var(env, "MODALIAS=%s%s",
I2C_MODULE_PREFIX, client->name))
@@ -409,6 +414,12 @@ static ssize_t
show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
{
struct i2c_client *client = to_i2c_client(dev);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
+ if (len != -ENODEV)
+ return len;
+
return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
}
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 349ebba..ab70eda 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -58,6 +58,11 @@ static ssize_t
modalias_show(struct device *dev, struct device_attribute *a, char *buf)
{
const struct spi_device *spi = to_spi_device(dev);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE);
+ if (len != -ENODEV)
+ return len;
return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
}
@@ -114,6 +119,11 @@ static int spi_match_device(struct device *dev, struct device_driver *drv)
static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
{
const struct spi_device *spi = to_spi_device(dev);
+ int rc;
+
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias);
return 0;
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <1389620911-3890-1-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2014-01-13 17:35 ` Mark Brown
[not found] ` <20140113173525.GF29039-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Mark Brown @ 2014-01-13 17:35 UTC (permalink / raw)
To: Zhang Rui
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, rjw-LthD3rsA81gm4RdzfppkhA,
grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
[-- Attachment #1: Type: text/plain, Size: 1395 bytes --]
On Mon, Jan 13, 2014 at 09:48:31PM +0800, Zhang Rui wrote:
> ACPI enumerated devices has ACPI style _HID and _CID strings,
> all of these strings can be used for both driver loading and matching.
> But currently, in Platform, I2C and SPI bus, only the ACPI style
> driver matching is supported by invoking acpi_driver_match_device()
> in bus .match() callback.
I don't understand what this means, sorry. As far as I can tell "ACPI
style _HID and _CID strings" are something different to "ACPI style
driver matching" but what that actually means is not at all clear to me
so I don't know what problem this is intended to fix.
Please also always remember to CC maintainers on patches.
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index 349ebba..ab70eda 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -58,6 +58,11 @@ static ssize_t
> modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> {
> const struct spi_device *spi = to_spi_device(dev);
> + int len;
> +
> + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
> + if (len != -ENODEV)
> + return len;
>
> return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
> }
What does this do and why can't acpi_driver_match_device() handle this
like it does for other ACPI devices? We don't need to add such code for
other firmware interfaces...
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <20140113173525.GF29039-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
@ 2014-01-14 8:00 ` Zhang Rui
2014-01-14 14:41 ` Mark Brown
0 siblings, 1 reply; 19+ messages in thread
From: Zhang Rui @ 2014-01-14 8:00 UTC (permalink / raw)
To: Mark Brown
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, rjw-LthD3rsA81gm4RdzfppkhA,
grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
On Mon, 2014-01-13 at 17:35 +0000, Mark Brown wrote:
> On Mon, Jan 13, 2014 at 09:48:31PM +0800, Zhang Rui wrote:
> > ACPI enumerated devices has ACPI style _HID and _CID strings,
> > all of these strings can be used for both driver loading and matching.
>
> > But currently, in Platform, I2C and SPI bus, only the ACPI style
> > driver matching is supported by invoking acpi_driver_match_device()
> > in bus .match() callback.
>
> I don't understand what this means, sorry.
sorry, I should be clearer about this.
> As far as I can tell "ACPI
> style _HID and _CID strings" are something different to "ACPI style
> driver matching" but what that actually means is not at all clear to me
> so I don't know what problem this is intended to fix.
>
I gave a more detailed description about the problem in the changelog of
patch 2/4.
Take the following piece of code for example,
static const struct acpi_device_id xxx_acpi_match[] = {
{ "INTABCD", 0 },
{ }
};
MODULE_DEVICE_TABLE(acpi, xxx_acpi_match);
this can be seen in a platform/I2C/SPI driver that supports an ACPI
enumerated device, right?
If this piece of code is used in a platform driver for
an ACPI enumerated platform device, the platform DRIVER module_alias
is "acpi:INTABCD", but the uevent attribute of its platform device node
is "platform:INTABCD:00" (PREFIX:platform_device->name).
If this piece of code is used in an I2C driver for an ACPI enumerated
i2c device, the i2c driver module_alias is "acpi:INTABCD", but
the uevent of its i2c device node is
"i2c:INTABCD:00" (PREFIX:i2c_client->name).
If this piece of code is used in an *SPI* driver for an ACPI enumerated
spi device, the spi driver module_alias is "acpi:INTABCD", but
the uevent of its spi device node is
"spi:INTABCD" (PREFIX:spi_device->modalias).
thus when the device node is created, the driver will not be loaded
automatically because their modalias do not match.
> Please also always remember to CC maintainers on patches.
>
okay, will resend the patches later.
thanks,
rui
> > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> > index 349ebba..ab70eda 100644
> > --- a/drivers/spi/spi.c
> > +++ b/drivers/spi/spi.c
> > @@ -58,6 +58,11 @@ static ssize_t
> > modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> > {
> > const struct spi_device *spi = to_spi_device(dev);
> > + int len;
> > +
> > + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
> > + if (len != -ENODEV)
> > + return len;
> >
> > return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
> > }
>
> What does this do and why can't acpi_driver_match_device() handle this
> like it does for other ACPI devices? We don't need to add such code for
> other firmware interfaces...
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <1389689198-2641-1-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2014-01-14 8:46 ` Zhang Rui
2014-01-15 15:08 ` Mika Westerberg
` (2 more replies)
0 siblings, 3 replies; 19+ messages in thread
From: Zhang Rui @ 2014-01-14 8:46 UTC (permalink / raw)
To: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA
Cc: wsa-z923LK4zBo2bacvFa/9K2g, broonie-QSEj5FYQhm4dnm+yROfE0A,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA, Zhang Rui
ACPI enumerated devices has ACPI style _HID and _CID strings,
all of these strings can be used for both driver loading and matching.
Currently, in Platform, I2C and SPI bus, the ACPI style driver matching
is supported by invoking acpi_driver_match_device() in bus .match() callback.
But, the module autoloading is still broken.
For example, there is any ACPI device with _HID "INTABCD" that is
enumerated to platform bus, and we have a driver that can probe it.
The driver exports its module_alias as "acpi:INTABCD" use the following code
static const struct acpi_device_id xxx_acpi_match[] = {
{ "INTABCD", 0 },
{ }
};
MODULE_DEVICE_TABLE(acpi, xxx_acpi_match);
But, unfortunately, the device' modalias is shown as "platform:INTABCD:00",
please refer to modalias_show() and platform_uevent() in
drivers/base/platform.c.
This results in that the driver will not be loaded automatically when the
device node is created, because their modalias do not match.
This also applies to I2C and SPI bus.
With this patch, the device' modalias will be shown as "acpi:INTABCD" as well.
Signed-off-by: Zhang Rui <rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
drivers/base/platform.c | 12 +++++++++++-
drivers/i2c/i2c-core.c | 11 +++++++++++
drivers/spi/spi.c | 10 ++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 3a94b79..2f4aea2 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
char *buf)
{
struct platform_device *pdev = to_platform_device(dev);
- int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
+ if (len != -ENODEV)
+ return len;
+
+ len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
}
@@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
if (rc != -ENODEV)
return rc;
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
+
add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
pdev->name);
return 0;
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index d74c0b3..c4c5588 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
{
struct i2c_client *client = to_i2c_client(dev);
+ int rc;
+
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
if (add_uevent_var(env, "MODALIAS=%s%s",
I2C_MODULE_PREFIX, client->name))
@@ -409,6 +414,12 @@ static ssize_t
show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
{
struct i2c_client *client = to_i2c_client(dev);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
+ if (len != -ENODEV)
+ return len;
+
return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
}
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 349ebba..ab70eda 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -58,6 +58,11 @@ static ssize_t
modalias_show(struct device *dev, struct device_attribute *a, char *buf)
{
const struct spi_device *spi = to_spi_device(dev);
+ int len;
+
+ len = acpi_device_modalias(dev, buf, PAGE_SIZE);
+ if (len != -ENODEV)
+ return len;
return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
}
@@ -114,6 +119,11 @@ static int spi_match_device(struct device *dev, struct device_driver *drv)
static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
{
const struct spi_device *spi = to_spi_device(dev);
+ int rc;
+
+ rc = acpi_device_uevent_modalias(dev, env);
+ if (rc != -ENODEV)
+ return rc;
add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias);
return 0;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-14 8:00 ` Zhang Rui
@ 2014-01-14 14:41 ` Mark Brown
2014-01-15 1:16 ` Zhang Rui
0 siblings, 1 reply; 19+ messages in thread
From: Mark Brown @ 2014-01-14 14:41 UTC (permalink / raw)
To: Zhang Rui
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, rjw-LthD3rsA81gm4RdzfppkhA,
grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
[-- Attachment #1: Type: text/plain, Size: 692 bytes --]
On Tue, Jan 14, 2014 at 04:00:17PM +0800, Zhang Rui wrote:
> On Mon, 2014-01-13 at 17:35 +0000, Mark Brown wrote:
> > On Mon, Jan 13, 2014 at 09:48:31PM +0800, Zhang Rui wrote:
> > > ACPI enumerated devices has ACPI style _HID and _CID strings,
> > > all of these strings can be used for both driver loading and matching.
> If this piece of code is used in an *SPI* driver for an ACPI enumerated
> spi device, the spi driver module_alias is "acpi:INTABCD", but
> the uevent of its spi device node is
> "spi:INTABCD" (PREFIX:spi_device->modalias).
OK that makes sense, but what does this have to do with the _HID and
_CID methods? Surely we're just replacing spi: with acpi: in the uevent?
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-14 14:41 ` Mark Brown
@ 2014-01-15 1:16 ` Zhang Rui
0 siblings, 0 replies; 19+ messages in thread
From: Zhang Rui @ 2014-01-15 1:16 UTC (permalink / raw)
To: Mark Brown
Cc: linux-kernel, linux-i2c, linux-spi, rjw, grant.likely,
jarkko.nikula, mika.westerberg
On Tue, 2014-01-14 at 14:41 +0000, Mark Brown wrote:
> On Tue, Jan 14, 2014 at 04:00:17PM +0800, Zhang Rui wrote:
> > On Mon, 2014-01-13 at 17:35 +0000, Mark Brown wrote:
> > > On Mon, Jan 13, 2014 at 09:48:31PM +0800, Zhang Rui wrote:
> > > > ACPI enumerated devices has ACPI style _HID and _CID strings,
> > > > all of these strings can be used for both driver loading and matching.
>
> > If this piece of code is used in an *SPI* driver for an ACPI enumerated
> > spi device, the spi driver module_alias is "acpi:INTABCD", but
> > the uevent of its spi device node is
> > "spi:INTABCD" (PREFIX:spi_device->modalias).
>
> OK that makes sense, but what does this have to do with the _HID and
> _CID methods?
If an ACPI enumerated SPI device has a _HID and a _CID,
both of them need to be exposed in 'uevent', so that a driver that
matches _CID can also have a chance to be probed. This can not be done
by the current code, thus we need special handling of ACPI enumerated
SPI devices.
> Surely we're just replacing spi: with acpi: in the uevent?
yes.
thanks,
rui
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-14 8:46 ` [PATCH 3/4] fix module autoloading for ACPI enumerated devices Zhang Rui
@ 2014-01-15 15:08 ` Mika Westerberg
[not found] ` <20140115150834.GX2494-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-01-16 12:27 ` Wolfram Sang
[not found] ` <1389689198-2641-4-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2 siblings, 1 reply; 19+ messages in thread
From: Mika Westerberg @ 2014-01-15 15:08 UTC (permalink / raw)
To: Zhang Rui
Cc: linux-kernel, linux-acpi, linux-i2c, linux-spi, wsa, broonie,
gregkh, rafael.j.wysocki, grant.likely, rob.herring,
jarkko.nikula
On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 3a94b79..2f4aea2 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> char *buf)
> {
> struct platform_device *pdev = to_platform_device(dev);
> - int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> + int len;
> +
> + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
Here you have PAGE_SIZE -1...
> + if (len != -ENODEV)
> + return len;
> +
> + len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
>
> return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
> }
> @@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
> if (rc != -ENODEV)
> return rc;
>
> + rc = acpi_device_uevent_modalias(dev, env);
> + if (rc != -ENODEV)
> + return rc;
> +
> add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
> pdev->name);
> return 0;
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index d74c0b3..c4c5588 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> {
> struct i2c_client *client = to_i2c_client(dev);
> + int rc;
> +
> + rc = acpi_device_uevent_modalias(dev, env);
> + if (rc != -ENODEV)
> + return rc;
>
> if (add_uevent_var(env, "MODALIAS=%s%s",
> I2C_MODULE_PREFIX, client->name))
> @@ -409,6 +414,12 @@ static ssize_t
> show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
> {
> struct i2c_client *client = to_i2c_client(dev);
> + int len;
> +
> + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
and here
> + if (len != -ENODEV)
> + return len;
> +
> return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
> }
>
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index 349ebba..ab70eda 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -58,6 +58,11 @@ static ssize_t
> modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> {
> const struct spi_device *spi = to_spi_device(dev);
> + int len;
> +
> + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
but here it is PAGE_SIZE.
Perhaps it should be PAGE_SIZE in all sites?
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <20140115150834.GX2494-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2014-01-16 8:04 ` Zhang Rui
2014-01-17 1:28 ` Rafael J. Wysocki
0 siblings, 1 reply; 19+ messages in thread
From: Zhang Rui @ 2014-01-16 8:04 UTC (permalink / raw)
To: Mika Westerberg
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, wsa-z923LK4zBo2bacvFa/9K2g,
broonie-QSEj5FYQhm4dnm+yROfE0A,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA
On Wed, 2014-01-15 at 17:08 +0200, Mika Westerberg wrote:
> On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 3a94b79..2f4aea2 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> > char *buf)
> > {
> > struct platform_device *pdev = to_platform_device(dev);
> > - int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> > + int len;
> > +
> > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
>
> Here you have PAGE_SIZE -1...
>
> > + if (len != -ENODEV)
> > + return len;
> > +
> > + len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> >
> > return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
> > }
> > @@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
> > if (rc != -ENODEV)
> > return rc;
> >
> > + rc = acpi_device_uevent_modalias(dev, env);
> > + if (rc != -ENODEV)
> > + return rc;
> > +
> > add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
> > pdev->name);
> > return 0;
> > diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> > index d74c0b3..c4c5588 100644
> > --- a/drivers/i2c/i2c-core.c
> > +++ b/drivers/i2c/i2c-core.c
> > @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> > static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> > {
> > struct i2c_client *client = to_i2c_client(dev);
> > + int rc;
> > +
> > + rc = acpi_device_uevent_modalias(dev, env);
> > + if (rc != -ENODEV)
> > + return rc;
> >
> > if (add_uevent_var(env, "MODALIAS=%s%s",
> > I2C_MODULE_PREFIX, client->name))
> > @@ -409,6 +414,12 @@ static ssize_t
> > show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
> > {
> > struct i2c_client *client = to_i2c_client(dev);
> > + int len;
> > +
> > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
>
> and here
>
> > + if (len != -ENODEV)
> > + return len;
> > +
> > return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
> > }
> >
> > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> > index 349ebba..ab70eda 100644
> > --- a/drivers/spi/spi.c
> > +++ b/drivers/spi/spi.c
> > @@ -58,6 +58,11 @@ static ssize_t
> > modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> > {
> > const struct spi_device *spi = to_spi_device(dev);
> > + int len;
> > +
> > + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
>
> but here it is PAGE_SIZE.
>
good catch.
> Perhaps it should be PAGE_SIZE in all sites?
dev_attr_show() will give a warning message if modalias_show() returns
PAGE_SIZE, thus I'd prefer to use PAGE_SIZE - 1 for all sites.
thanks,
rui
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-14 8:46 ` [PATCH 3/4] fix module autoloading for ACPI enumerated devices Zhang Rui
2014-01-15 15:08 ` Mika Westerberg
@ 2014-01-16 12:27 ` Wolfram Sang
2014-01-16 13:05 ` Zhang Rui
[not found] ` <1389689198-2641-4-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2 siblings, 1 reply; 19+ messages in thread
From: Wolfram Sang @ 2014-01-16 12:27 UTC (permalink / raw)
To: Zhang Rui
Cc: linux-kernel, linux-acpi, linux-i2c, linux-spi, broonie, gregkh,
rafael.j.wysocki, grant.likely, rob.herring, jarkko.nikula,
mika.westerberg
[-- Attachment #1: Type: text/plain, Size: 730 bytes --]
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index d74c0b3..c4c5588 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> {
> struct i2c_client *client = to_i2c_client(dev);
> + int rc;
> +
> + rc = acpi_device_uevent_modalias(dev, env);
> + if (rc != -ENODEV)
> + return rc;
>
> if (add_uevent_var(env, "MODALIAS=%s%s",
> I2C_MODULE_PREFIX, client->name))
I wonder why we don't have/need that with CONFIG_OF? Because probably
nobody is using modules with i2c devices there?
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <1389689198-2641-4-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2014-01-16 12:28 ` Mark Brown
[not found] ` <20140116122819.GO15567-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Mark Brown @ 2014-01-16 12:28 UTC (permalink / raw)
To: Zhang Rui
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, wsa-z923LK4zBo2bacvFa/9K2g,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
[-- Attachment #1: Type: text/plain, Size: 590 bytes --]
On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> ACPI enumerated devices has ACPI style _HID and _CID strings,
> all of these strings can be used for both driver loading and matching.
>
> Currently, in Platform, I2C and SPI bus, the ACPI style driver matching
> is supported by invoking acpi_driver_match_device() in bus .match() callback.
> But, the module autoloading is still broken.
Acked-by: Mark Brown <broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
modulo the PAGE_SIZE stuff Mika noted - unless this changes radically
please just assume I'm OK with it.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <20140116122819.GO15567-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
@ 2014-01-16 12:51 ` Zhang Rui
2014-01-16 19:24 ` Wolfram Sang
1 sibling, 0 replies; 19+ messages in thread
From: Zhang Rui @ 2014-01-16 12:51 UTC (permalink / raw)
To: Mark Brown
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, wsa-z923LK4zBo2bacvFa/9K2g,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
On Thu, 2014-01-16 at 12:28 +0000, Mark Brown wrote:
> On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> > ACPI enumerated devices has ACPI style _HID and _CID strings,
> > all of these strings can be used for both driver loading and matching.
> >
> > Currently, in Platform, I2C and SPI bus, the ACPI style driver matching
> > is supported by invoking acpi_driver_match_device() in bus .match() callback.
> > But, the module autoloading is still broken.
>
> Acked-by: Mark Brown <broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
>
> modulo the PAGE_SIZE stuff Mika noted - unless this changes radically
> please just assume I'm OK with it.
thanks.
-rui
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-16 12:27 ` Wolfram Sang
@ 2014-01-16 13:05 ` Zhang Rui
2014-01-16 19:46 ` Mark Brown
0 siblings, 1 reply; 19+ messages in thread
From: Zhang Rui @ 2014-01-16 13:05 UTC (permalink / raw)
To: Wolfram Sang
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, broonie-QSEj5FYQhm4dnm+yROfE0A,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
grant.likely-s3s/WqlpOiPyB63q8FvJNQ
On Thu, 2014-01-16 at 13:27 +0100, Wolfram Sang wrote:
> > diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> > index d74c0b3..c4c5588 100644
> > --- a/drivers/i2c/i2c-core.c
> > +++ b/drivers/i2c/i2c-core.c
> > @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> > static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> > {
> > struct i2c_client *client = to_i2c_client(dev);
> > + int rc;
> > +
> > + rc = acpi_device_uevent_modalias(dev, env);
> > + if (rc != -ENODEV)
> > + return rc;
> >
> > if (add_uevent_var(env, "MODALIAS=%s%s",
> > I2C_MODULE_PREFIX, client->name))
>
> I wonder why we don't have/need that with CONFIG_OF? Because probably
> nobody is using modules with i2c devices there?
>
This seems a gap to me but I'm not 100% sure.
I saw Grant Likely introduced the OF style MODALIAS to platform bus, and
OF style registration/binding to i2c bus, maybe he has an answer for
this.
thanks,
rui
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <20140116122819.GO15567-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-01-16 12:51 ` Zhang Rui
@ 2014-01-16 19:24 ` Wolfram Sang
1 sibling, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2014-01-16 19:24 UTC (permalink / raw)
To: Mark Brown
Cc: Zhang Rui, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA
[-- Attachment #1: Type: text/plain, Size: 758 bytes --]
On Thu, Jan 16, 2014 at 12:28:19PM +0000, Mark Brown wrote:
> On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> > ACPI enumerated devices has ACPI style _HID and _CID strings,
> > all of these strings can be used for both driver loading and matching.
> >
> > Currently, in Platform, I2C and SPI bus, the ACPI style driver matching
> > is supported by invoking acpi_driver_match_device() in bus .match() callback.
> > But, the module autoloading is still broken.
>
> Acked-by: Mark Brown <broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
>
> modulo the PAGE_SIZE stuff Mika noted - unless this changes radically
> please just assume I'm OK with it.
Ditto
Acked-by: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-16 13:05 ` Zhang Rui
@ 2014-01-16 19:46 ` Mark Brown
2014-01-17 7:37 ` Jarkko Nikula
0 siblings, 1 reply; 19+ messages in thread
From: Mark Brown @ 2014-01-16 19:46 UTC (permalink / raw)
To: Zhang Rui
Cc: Wolfram Sang, linux-kernel, linux-acpi, linux-i2c, linux-spi,
gregkh, rafael.j.wysocki, grant.likely, jarkko.nikula,
mika.westerberg, grant.likely
[-- Attachment #1: Type: text/plain, Size: 657 bytes --]
On Thu, Jan 16, 2014 at 09:05:09PM +0800, Zhang Rui wrote:
> On Thu, 2014-01-16 at 13:27 +0100, Wolfram Sang wrote:
> > I wonder why we don't have/need that with CONFIG_OF? Because probably
> > nobody is using modules with i2c devices there?
> This seems a gap to me but I'm not 100% sure.
> I saw Grant Likely introduced the OF style MODALIAS to platform bus, and
> OF style registration/binding to i2c bus, maybe he has an answer for
> this.
This is needed for ACPI because we rewrite the device names to give us
stable names. With OF for I2C and SPI nothing bus specific is done that
affects this stuff so the default behaviour works.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-16 8:04 ` Zhang Rui
@ 2014-01-17 1:28 ` Rafael J. Wysocki
[not found] ` <3559262.qTvGllE4Ix-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Rafael J. Wysocki @ 2014-01-17 1:28 UTC (permalink / raw)
To: Zhang Rui, grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: Mika Westerberg, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, wsa-z923LK4zBo2bacvFa/9K2g,
broonie-QSEj5FYQhm4dnm+yROfE0A,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA
On Thursday, January 16, 2014 04:04:35 PM Zhang Rui wrote:
> On Wed, 2014-01-15 at 17:08 +0200, Mika Westerberg wrote:
> > On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > > index 3a94b79..2f4aea2 100644
> > > --- a/drivers/base/platform.c
> > > +++ b/drivers/base/platform.c
> > > @@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> > > char *buf)
> > > {
> > > struct platform_device *pdev = to_platform_device(dev);
> > > - int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> > > + int len;
> > > +
> > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
> >
> > Here you have PAGE_SIZE -1...
> >
> > > + if (len != -ENODEV)
> > > + return len;
> > > +
> > > + len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> > >
> > > return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
> > > }
> > > @@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
> > > if (rc != -ENODEV)
> > > return rc;
> > >
> > > + rc = acpi_device_uevent_modalias(dev, env);
> > > + if (rc != -ENODEV)
> > > + return rc;
> > > +
> > > add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
> > > pdev->name);
> > > return 0;
> > > diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> > > index d74c0b3..c4c5588 100644
> > > --- a/drivers/i2c/i2c-core.c
> > > +++ b/drivers/i2c/i2c-core.c
> > > @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> > > static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> > > {
> > > struct i2c_client *client = to_i2c_client(dev);
> > > + int rc;
> > > +
> > > + rc = acpi_device_uevent_modalias(dev, env);
> > > + if (rc != -ENODEV)
> > > + return rc;
> > >
> > > if (add_uevent_var(env, "MODALIAS=%s%s",
> > > I2C_MODULE_PREFIX, client->name))
> > > @@ -409,6 +414,12 @@ static ssize_t
> > > show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
> > > {
> > > struct i2c_client *client = to_i2c_client(dev);
> > > + int len;
> > > +
> > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
> >
> > and here
> >
> > > + if (len != -ENODEV)
> > > + return len;
> > > +
> > > return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
> > > }
> > >
> > > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> > > index 349ebba..ab70eda 100644
> > > --- a/drivers/spi/spi.c
> > > +++ b/drivers/spi/spi.c
> > > @@ -58,6 +58,11 @@ static ssize_t
> > > modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> > > {
> > > const struct spi_device *spi = to_spi_device(dev);
> > > + int len;
> > > +
> > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
> >
> > but here it is PAGE_SIZE.
> >
> good catch.
>
> > Perhaps it should be PAGE_SIZE in all sites?
>
> dev_attr_show() will give a warning message if modalias_show() returns
> PAGE_SIZE, thus I'd prefer to use PAGE_SIZE - 1 for all sites.
So I changed the PAGE_SIZE to PAGE_SIZE - 1 in the last instance and queued
up the whole series for 3.14 in linux-pm.git/linux-next. Please have a look
at that and let me know if there's anything wrong with it.
Thanks!
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <3559262.qTvGllE4Ix-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
@ 2014-01-17 1:56 ` Zhang Rui
0 siblings, 0 replies; 19+ messages in thread
From: Zhang Rui @ 2014-01-17 1:56 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: grant.likely-QSEj5FYQhm4dnm+yROfE0A, Mika Westerberg,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA, wsa-z923LK4zBo2bacvFa/9K2g,
broonie-QSEj5FYQhm4dnm+yROfE0A,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
jarkko.nikula-VuQAYsv1563Yd54FQh9/CA
On Fri, 2014-01-17 at 02:28 +0100, Rafael J. Wysocki wrote:
> On Thursday, January 16, 2014 04:04:35 PM Zhang Rui wrote:
> > On Wed, 2014-01-15 at 17:08 +0200, Mika Westerberg wrote:
> > > On Tue, Jan 14, 2014 at 04:46:37PM +0800, Zhang Rui wrote:
> > > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > > > index 3a94b79..2f4aea2 100644
> > > > --- a/drivers/base/platform.c
> > > > +++ b/drivers/base/platform.c
> > > > @@ -677,7 +677,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> > > > char *buf)
> > > > {
> > > > struct platform_device *pdev = to_platform_device(dev);
> > > > - int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> > > > + int len;
> > > > +
> > > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
> > >
> > > Here you have PAGE_SIZE -1...
> > >
> > > > + if (len != -ENODEV)
> > > > + return len;
> > > > +
> > > > + len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
> > > >
> > > > return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
> > > > }
> > > > @@ -699,6 +705,10 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
> > > > if (rc != -ENODEV)
> > > > return rc;
> > > >
> > > > + rc = acpi_device_uevent_modalias(dev, env);
> > > > + if (rc != -ENODEV)
> > > > + return rc;
> > > > +
> > > > add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
> > > > pdev->name);
> > > > return 0;
> > > > diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> > > > index d74c0b3..c4c5588 100644
> > > > --- a/drivers/i2c/i2c-core.c
> > > > +++ b/drivers/i2c/i2c-core.c
> > > > @@ -104,6 +104,11 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
> > > > static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> > > > {
> > > > struct i2c_client *client = to_i2c_client(dev);
> > > > + int rc;
> > > > +
> > > > + rc = acpi_device_uevent_modalias(dev, env);
> > > > + if (rc != -ENODEV)
> > > > + return rc;
> > > >
> > > > if (add_uevent_var(env, "MODALIAS=%s%s",
> > > > I2C_MODULE_PREFIX, client->name))
> > > > @@ -409,6 +414,12 @@ static ssize_t
> > > > show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
> > > > {
> > > > struct i2c_client *client = to_i2c_client(dev);
> > > > + int len;
> > > > +
> > > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
> > >
> > > and here
> > >
> > > > + if (len != -ENODEV)
> > > > + return len;
> > > > +
> > > > return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
> > > > }
> > > >
> > > > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> > > > index 349ebba..ab70eda 100644
> > > > --- a/drivers/spi/spi.c
> > > > +++ b/drivers/spi/spi.c
> > > > @@ -58,6 +58,11 @@ static ssize_t
> > > > modalias_show(struct device *dev, struct device_attribute *a, char *buf)
> > > > {
> > > > const struct spi_device *spi = to_spi_device(dev);
> > > > + int len;
> > > > +
> > > > + len = acpi_device_modalias(dev, buf, PAGE_SIZE);
> > >
> > > but here it is PAGE_SIZE.
> > >
> > good catch.
> >
> > > Perhaps it should be PAGE_SIZE in all sites?
> >
> > dev_attr_show() will give a warning message if modalias_show() returns
> > PAGE_SIZE, thus I'd prefer to use PAGE_SIZE - 1 for all sites.
>
> So I changed the PAGE_SIZE to PAGE_SIZE - 1 in the last instance and queued
> up the whole series for 3.14 in linux-pm.git/linux-next. Please have a look
> at that and let me know if there's anything wrong with it.
>
the change looks okay to me.
thanks,
rui
> Thanks!
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-16 19:46 ` Mark Brown
@ 2014-01-17 7:37 ` Jarkko Nikula
[not found] ` <52D8DDD4.10704-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Jarkko Nikula @ 2014-01-17 7:37 UTC (permalink / raw)
To: Mark Brown
Cc: Zhang Rui, Wolfram Sang, linux-kernel, linux-acpi, linux-i2c,
linux-spi, gregkh, rafael.j.wysocki, grant.likely,
mika.westerberg, grant.likely
On 01/16/2014 09:46 PM, Mark Brown wrote:
> On Thu, Jan 16, 2014 at 09:05:09PM +0800, Zhang Rui wrote:
>> On Thu, 2014-01-16 at 13:27 +0100, Wolfram Sang wrote:
>> This seems a gap to me but I'm not 100% sure.
>> I saw Grant Likely introduced the OF style MODALIAS to platform bus, and
>> OF style registration/binding to i2c bus, maybe he has an answer for
>> this.
> This is needed for ACPI because we rewrite the device names to give us
> stable names. With OF for I2C and SPI nothing bus specific is done that
> affects this stuff so the default behaviour works.
Sidenote: actually this modalias/module loading issue is different and
not related to stable ACPI i2c/spi slave device names.
--
Jarkko
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
[not found] ` <52D8DDD4.10704-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
@ 2014-01-17 15:57 ` Mark Brown
2014-01-20 7:10 ` Jarkko Nikula
0 siblings, 1 reply; 19+ messages in thread
From: Mark Brown @ 2014-01-17 15:57 UTC (permalink / raw)
To: Jarkko Nikula
Cc: Zhang Rui, Wolfram Sang, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-acpi-u79uwXL29TY76Z2rM5mHXA,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-spi-u79uwXL29TY76Z2rM5mHXA,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
grant.likely-s3s/WqlpOiPyB63q8FvJNQ
[-- Attachment #1: Type: text/plain, Size: 528 bytes --]
On Fri, Jan 17, 2014 at 09:37:56AM +0200, Jarkko Nikula wrote:
> On 01/16/2014 09:46 PM, Mark Brown wrote:
> >This is needed for ACPI because we rewrite the device names to give us
> >stable names. With OF for I2C and SPI nothing bus specific is done that
> >affects this stuff so the default behaviour works.
> Sidenote: actually this modalias/module loading issue is different
> and not related to stable ACPI i2c/spi slave device names.
Oh, I'd been under the impression that it was the rewrite that was
triggering this?
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] fix module autoloading for ACPI enumerated devices
2014-01-17 15:57 ` Mark Brown
@ 2014-01-20 7:10 ` Jarkko Nikula
0 siblings, 0 replies; 19+ messages in thread
From: Jarkko Nikula @ 2014-01-20 7:10 UTC (permalink / raw)
To: Mark Brown
Cc: Zhang Rui, Wolfram Sang, linux-kernel, linux-acpi, linux-i2c,
linux-spi, gregkh, rafael.j.wysocki, grant.likely,
mika.westerberg, grant.likely
On 01/17/2014 05:57 PM, Mark Brown wrote:
> On Fri, Jan 17, 2014 at 09:37:56AM +0200, Jarkko Nikula wrote:
>> Sidenote: actually this modalias/module loading issue is different
>> and not related to stable ACPI i2c/spi slave device names.
> Oh, I'd been under the impression that it was the rewrite that was
> triggering this?
IIRC issue has been there since when ACPI slave device support was added.
I have a partial fix for it in cf9eb39c6f7b ("spi: Fix modalias for ACPI
enumerated SPI devices") and when doing similar change for i2c Rui
pointed me that he has a better fix that takes care of _CID string and
platform code too.
--
Jarkko
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2014-01-20 7:10 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-13 13:48 [PATCH 3/4] fix module autoloading for ACPI enumerated devices Zhang Rui
[not found] ` <1389620911-3890-1-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-01-13 17:35 ` Mark Brown
[not found] ` <20140113173525.GF29039-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-01-14 8:00 ` Zhang Rui
2014-01-14 14:41 ` Mark Brown
2014-01-15 1:16 ` Zhang Rui
-- strict thread matches above, loose matches on Subject: below --
2014-01-14 8:46 [PATCH 0/4] module autoloading fixes Zhang Rui
[not found] ` <1389689198-2641-1-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-01-14 8:46 ` [PATCH 3/4] fix module autoloading for ACPI enumerated devices Zhang Rui
2014-01-15 15:08 ` Mika Westerberg
[not found] ` <20140115150834.GX2494-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-01-16 8:04 ` Zhang Rui
2014-01-17 1:28 ` Rafael J. Wysocki
[not found] ` <3559262.qTvGllE4Ix-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2014-01-17 1:56 ` Zhang Rui
2014-01-16 12:27 ` Wolfram Sang
2014-01-16 13:05 ` Zhang Rui
2014-01-16 19:46 ` Mark Brown
2014-01-17 7:37 ` Jarkko Nikula
[not found] ` <52D8DDD4.10704-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-01-17 15:57 ` Mark Brown
2014-01-20 7:10 ` Jarkko Nikula
[not found] ` <1389689198-2641-4-git-send-email-rui.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-01-16 12:28 ` Mark Brown
[not found] ` <20140116122819.GO15567-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-01-16 12:51 ` Zhang Rui
2014-01-16 19:24 ` Wolfram Sang
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).