All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/02] ACPI: sysfs eject support for container
@ 2013-02-06 22:50 Toshi Kani
  2013-02-06 22:50 ` [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers Toshi Kani
  2013-02-06 22:50 ` [PATCH 02/02] ACPI: Register container drv as scan driver Toshi Kani
  0 siblings, 2 replies; 9+ messages in thread
From: Toshi Kani @ 2013-02-06 22:50 UTC (permalink / raw)
  To: rjw, linux-acpi
  Cc: gregkh, bhelgaas, mika.westerberg, matthew.garrett, yinghai,
	liuj97, linux-kernel, Toshi Kani

This patchset enables sysfs eject for ACPI scan drivers and
registers the ACPI container driver as an ACPI scan driver.
This patchset is the one I mentioned in my following reply.

Toshi

Re: [PATCH 2/2] ACPI / scan: Simplify container driver 

On Mon, 2013-02-04 at 00:47 +0100, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> The only useful thing that the ACPI container driver does is to
> install system notify handlers for all container and module device
> objects it finds in the namespace.  The driver structure,
> acpi_container_driver, and the data structures created by its
> .add() callback are in fact not used by the driver, so remove
> them entirely.
> 
> It also makes a little sense to build that driver as a module,
> so make it non-modular and add its initialization to the
> namespace scanning code.
> 
> In addition to that, make the namespace walk callback used for
> installing the notify handlers more straightforward.

I think the container driver needs to be registered as an ACPI scan
driver so that sysfs eject will continue to work for container devices,
such as ACPI0004:XX/eject.  Since the container driver does not support
ACPI eject notification (and we have been discussing how system device
hot-plug should work), this sysfs eject is the only way to eject a
container device at this point.  I will send an update patchset that
applies on top of this patch.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
  2013-02-06 22:50 [PATCH 00/02] ACPI: sysfs eject support for container Toshi Kani
@ 2013-02-06 22:50 ` Toshi Kani
  2013-02-08  0:50     ` Yasuaki Ishimatsu
  2013-02-06 22:50 ` [PATCH 02/02] ACPI: Register container drv as scan driver Toshi Kani
  1 sibling, 1 reply; 9+ messages in thread
From: Toshi Kani @ 2013-02-06 22:50 UTC (permalink / raw)
  To: rjw, linux-acpi
  Cc: gregkh, bhelgaas, mika.westerberg, matthew.garrett, yinghai,
	liuj97, linux-kernel, Toshi Kani

Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.

Signed-off-by: Toshi Kani <toshi.kani@hp.com>
---
 drivers/acpi/scan.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index cfd7a69..3ff632e 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
 		return -EINVAL;
 	}
 #ifndef FORCE_EJECT
-	if (acpi_device->driver == NULL) {
+	if (!acpi_device->driver && !acpi_device->handler) {
 		ret = -ENODEV;
 		goto err;
 	}

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 02/02] ACPI: Register container drv as scan driver
  2013-02-06 22:50 [PATCH 00/02] ACPI: sysfs eject support for container Toshi Kani
  2013-02-06 22:50 ` [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers Toshi Kani
@ 2013-02-06 22:50 ` Toshi Kani
  1 sibling, 0 replies; 9+ messages in thread
From: Toshi Kani @ 2013-02-06 22:50 UTC (permalink / raw)
  To: rjw, linux-acpi
  Cc: gregkh, bhelgaas, mika.westerberg, matthew.garrett, yinghai,
	liuj97, linux-kernel, Toshi Kani

Changed to register the ACPI container driver as an ACPI scan driver
so that sysfs eject of container devices works.

Fixed a typo in the acpi_container_init() prototype definition.
Removed struct acpi_container, which is no longer used.

Signed-off-by: Toshi Kani <toshi.kani@hp.com>
---

This patch applies on top of the patch below.
https://lkml.org/lkml/2013/2/3/318

---
 drivers/acpi/container.c |   23 +++++++++++++++++++++++
 drivers/acpi/internal.h  |    2 +-
 include/acpi/container.h |    8 --------
 3 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c
index bcde1f3..f493180 100644
--- a/drivers/acpi/container.c
+++ b/drivers/acpi/container.c
@@ -41,6 +41,10 @@
 #define _COMPONENT			ACPI_CONTAINER_COMPONENT
 ACPI_MODULE_NAME("container");
 
+static int container_device_attach(struct acpi_device *device,
+				const struct acpi_device_id *not_used);
+static void container_device_detach(struct acpi_device *device);
+
 static const struct acpi_device_id container_device_ids[] = {
 	{"ACPI0004", 0},
 	{"PNP0A05", 0},
@@ -48,6 +52,12 @@ static const struct acpi_device_id container_device_ids[] = {
 	{"", 0},
 };
 
+static struct acpi_scan_handler container_device_handler = {
+	.ids = container_device_ids,
+	.attach = container_device_attach,
+	.detach = container_device_detach,
+};
+
 static int is_device_present(acpi_handle handle)
 {
 	acpi_handle temp;
@@ -66,6 +76,17 @@ static int is_device_present(acpi_handle handle)
 	return ((sta & ACPI_STA_DEVICE_PRESENT) == ACPI_STA_DEVICE_PRESENT);
 }
 
+static int container_device_attach(struct acpi_device *device,
+				const struct acpi_device_id *not_used)
+{
+	return 1;
+}
+
+static void container_device_detach(struct acpi_device *device)
+{
+	return;
+}
+
 static void container_notify_cb(acpi_handle handle, u32 type, void *context)
 {
 	struct acpi_device *device = NULL;
@@ -167,4 +188,6 @@ void __init acpi_container_init(void)
 	acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
 			    acpi_container_register_notify_handler, NULL,
 			    NULL, NULL);
+
+	acpi_scan_add_handler(&container_device_handler);
 }
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
index 78fbf26..cbc0638 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -40,7 +40,7 @@ void acpi_memory_hotplug_init(void);
 #else
 static inline void acpi_memory_hotplug_init(void) {}
 #endif
-#ifdef ACPI_CONTAINER
+#ifdef CONFIG_ACPI_CONTAINER
 void acpi_container_init(void);
 #else
 static inline void acpi_container_init(void) {}
diff --git a/include/acpi/container.h b/include/acpi/container.h
index a703f14..0a464d2 100644
--- a/include/acpi/container.h
+++ b/include/acpi/container.h
@@ -1,12 +1,4 @@
 #ifndef __ACPI_CONTAINER_H
 #define __ACPI_CONTAINER_H
 
-#include <linux/kernel.h>
-
-struct acpi_container {
-	acpi_handle handle;
-	unsigned long sun;
-	int state;
-};
-
 #endif				/* __ACPI_CONTAINER_H */

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
  2013-02-06 22:50 ` [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers Toshi Kani
@ 2013-02-08  0:50     ` Yasuaki Ishimatsu
  0 siblings, 0 replies; 9+ messages in thread
From: Yasuaki Ishimatsu @ 2013-02-08  0:50 UTC (permalink / raw)
  To: Toshi Kani
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

Hi Toshi,

2013/02/07 7:50, Toshi Kani wrote:
> Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
> 
> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> ---
>   drivers/acpi/scan.c |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index cfd7a69..3ff632e 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
>   		return -EINVAL;
>   	}
>   #ifndef FORCE_EJECT

> -	if (acpi_device->driver == NULL) {
> +	if (!acpi_device->driver && !acpi_device->handler) {

I don't understand the fix.

The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
acpi_device->handler has pointer. Is it O.K.?

I think it should be if (!acpi_device->driver || !acpi_device->handler).

Thanks,
Yasuaki Ishimatsu

>   		ret = -ENODEV;
>   		goto err;
>   	}
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
@ 2013-02-08  0:50     ` Yasuaki Ishimatsu
  0 siblings, 0 replies; 9+ messages in thread
From: Yasuaki Ishimatsu @ 2013-02-08  0:50 UTC (permalink / raw)
  To: Toshi Kani
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

Hi Toshi,

2013/02/07 7:50, Toshi Kani wrote:
> Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
> 
> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> ---
>   drivers/acpi/scan.c |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index cfd7a69..3ff632e 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
>   		return -EINVAL;
>   	}
>   #ifndef FORCE_EJECT

> -	if (acpi_device->driver == NULL) {
> +	if (!acpi_device->driver && !acpi_device->handler) {

I don't understand the fix.

The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
acpi_device->handler has pointer. Is it O.K.?

I think it should be if (!acpi_device->driver || !acpi_device->handler).

Thanks,
Yasuaki Ishimatsu

>   		ret = -ENODEV;
>   		goto err;
>   	}
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
  2013-02-08  0:50     ` Yasuaki Ishimatsu
  (?)
@ 2013-02-08  1:10     ` Toshi Kani
  2013-02-08  1:33         ` Yasuaki Ishimatsu
  -1 siblings, 1 reply; 9+ messages in thread
From: Toshi Kani @ 2013-02-08  1:10 UTC (permalink / raw)
  To: Yasuaki Ishimatsu
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

On Fri, 2013-02-08 at 09:50 +0900, Yasuaki Ishimatsu wrote:
> Hi Toshi,
> 
> 2013/02/07 7:50, Toshi Kani wrote:
> > Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
> > 
> > Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> > ---
> >   drivers/acpi/scan.c |    2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> > index cfd7a69..3ff632e 100644
> > --- a/drivers/acpi/scan.c
> > +++ b/drivers/acpi/scan.c
> > @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
> >   		return -EINVAL;
> >   	}
> >   #ifndef FORCE_EJECT
> 
> > -	if (acpi_device->driver == NULL) {
> > +	if (!acpi_device->driver && !acpi_device->handler) {
> 
> I don't understand the fix.
> 
> The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
> are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
> acpi_device->handler has pointer. Is it O.K.?

Yes.

> I think it should be if (!acpi_device->driver || !acpi_device->handler).

No, the condition has to be "&&" because an acpi_device is _either_
bound to an ACPI driver or an ACPI scan handler. 

Thanks,
-Toshi



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
  2013-02-08  1:33         ` Yasuaki Ishimatsu
  (?)
@ 2013-02-08  1:25         ` Toshi Kani
  -1 siblings, 0 replies; 9+ messages in thread
From: Toshi Kani @ 2013-02-08  1:25 UTC (permalink / raw)
  To: Yasuaki Ishimatsu
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

On Fri, 2013-02-08 at 10:33 +0900, Yasuaki Ishimatsu wrote:
> 2013/02/08 10:10, Toshi Kani wrote:
> > On Fri, 2013-02-08 at 09:50 +0900, Yasuaki Ishimatsu wrote:
> >> Hi Toshi,
> >>
> >> 2013/02/07 7:50, Toshi Kani wrote:
> >>> Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
> >>>
> >>> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> >>> ---
> >>>    drivers/acpi/scan.c |    2 +-
> >>>    1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> >>> index cfd7a69..3ff632e 100644
> >>> --- a/drivers/acpi/scan.c
> >>> +++ b/drivers/acpi/scan.c
> >>> @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
> >>>    		return -EINVAL;
> >>>    	}
> >>>    #ifndef FORCE_EJECT
> >>
> >>> -	if (acpi_device->driver == NULL) {
> >>> +	if (!acpi_device->driver && !acpi_device->handler) {
> >>
> >> I don't understand the fix.
> >>
> >> The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
> >> are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
> >> acpi_device->handler has pointer. Is it O.K.?
> >
> > Yes.
> >
> >> I think it should be if (!acpi_device->driver || !acpi_device->handler).
> >
> > No, the condition has to be "&&" because an acpi_device is _either_
> > bound to an ACPI driver or an ACPI scan handler.
> 
> Thank you for you clarification. I understood it.
> 
> Acked-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>

Thanks Yasuaki!
-Toshi


> 
> Thanks,
> Yasuaki Ishimatsu
> 
> >
> > Thanks,
> > -Toshi
> >
> >
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
  2013-02-08  1:10     ` Toshi Kani
@ 2013-02-08  1:33         ` Yasuaki Ishimatsu
  0 siblings, 0 replies; 9+ messages in thread
From: Yasuaki Ishimatsu @ 2013-02-08  1:33 UTC (permalink / raw)
  To: Toshi Kani
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

2013/02/08 10:10, Toshi Kani wrote:
> On Fri, 2013-02-08 at 09:50 +0900, Yasuaki Ishimatsu wrote:
>> Hi Toshi,
>>
>> 2013/02/07 7:50, Toshi Kani wrote:
>>> Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
>>>
>>> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
>>> ---
>>>    drivers/acpi/scan.c |    2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
>>> index cfd7a69..3ff632e 100644
>>> --- a/drivers/acpi/scan.c
>>> +++ b/drivers/acpi/scan.c
>>> @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
>>>    		return -EINVAL;
>>>    	}
>>>    #ifndef FORCE_EJECT
>>
>>> -	if (acpi_device->driver == NULL) {
>>> +	if (!acpi_device->driver && !acpi_device->handler) {
>>
>> I don't understand the fix.
>>
>> The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
>> are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
>> acpi_device->handler has pointer. Is it O.K.?
>
> Yes.
>
>> I think it should be if (!acpi_device->driver || !acpi_device->handler).
>
> No, the condition has to be "&&" because an acpi_device is _either_
> bound to an ACPI driver or an ACPI scan handler.

Thank you for you clarification. I understood it.

Acked-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>

Thanks,
Yasuaki Ishimatsu

>
> Thanks,
> -Toshi
>
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers
@ 2013-02-08  1:33         ` Yasuaki Ishimatsu
  0 siblings, 0 replies; 9+ messages in thread
From: Yasuaki Ishimatsu @ 2013-02-08  1:33 UTC (permalink / raw)
  To: Toshi Kani
  Cc: rjw, linux-acpi, gregkh, bhelgaas, mika.westerberg,
	matthew.garrett, yinghai, liuj97, linux-kernel

2013/02/08 10:10, Toshi Kani wrote:
> On Fri, 2013-02-08 at 09:50 +0900, Yasuaki Ishimatsu wrote:
>> Hi Toshi,
>>
>> 2013/02/07 7:50, Toshi Kani wrote:
>>> Changed sysfs eject, acpi_eject_store(), to support ACPI scan handlers.
>>>
>>> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
>>> ---
>>>    drivers/acpi/scan.c |    2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
>>> index cfd7a69..3ff632e 100644
>>> --- a/drivers/acpi/scan.c
>>> +++ b/drivers/acpi/scan.c
>>> @@ -203,7 +203,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
>>>    		return -EINVAL;
>>>    	}
>>>    #ifndef FORCE_EJECT
>>
>>> -	if (acpi_device->driver == NULL) {
>>> +	if (!acpi_device->driver && !acpi_device->handler) {
>>
>> I don't understand the fix.
>>
>> The if sentence becomes true, when both acpi_device->driver and acpi_device->handler
>> are NULL. It means that acpi_eject_store() runs if either acpi_device->driver or
>> acpi_device->handler has pointer. Is it O.K.?
>
> Yes.
>
>> I think it should be if (!acpi_device->driver || !acpi_device->handler).
>
> No, the condition has to be "&&" because an acpi_device is _either_
> bound to an ACPI driver or an ACPI scan handler.

Thank you for you clarification. I understood it.

Acked-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>

Thanks,
Yasuaki Ishimatsu

>
> Thanks,
> -Toshi
>
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-02-08  1:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-06 22:50 [PATCH 00/02] ACPI: sysfs eject support for container Toshi Kani
2013-02-06 22:50 ` [PATCH 01/02] ACPI: sysfs eject support for ACPI scan handlers Toshi Kani
2013-02-08  0:50   ` Yasuaki Ishimatsu
2013-02-08  0:50     ` Yasuaki Ishimatsu
2013-02-08  1:10     ` Toshi Kani
2013-02-08  1:33       ` Yasuaki Ishimatsu
2013-02-08  1:33         ` Yasuaki Ishimatsu
2013-02-08  1:25         ` Toshi Kani
2013-02-06 22:50 ` [PATCH 02/02] ACPI: Register container drv as scan driver Toshi Kani

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.