Re: [PATCH 06/12] ACPI: Add acpi_bus_generate_event4() function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2007-08-16 at 18:03 +0400, Alexey Starikovskiy wrote:
> From: Alexey Starikovskiy <astarikovskiy@xxxxxxx>
> 
> acpi_bus_generate_event() takes two strings out of passed device object.
> SBS needs to supply these strings directly.
> 
This doesn't make sense.
acpi_dev->dev.bus_id is the name we are using for ACPI device in sysfs.
That's why acpi_dev->dev.bus_id is exported via netlink message rather
than the acpi_dev.pnp.bus_id.
BTW: what's wrong with the old acpi_sbs_generate_event thing?

Thanks,
Rui
> Signed-off-by: Alexey Starikovskiy <astarikovskiy@xxxxxxx>
> ---
> 
>  drivers/acpi/bus.c      |   25 ++++++++++++++++---------
>  drivers/acpi/event.c    |    7 ++++---
>  drivers/acpi/sbs.c      |   39 ++++++++-------------------------------
>  include/acpi/acpi_bus.h |    6 ++++--
>  4 files changed, 32 insertions(+), 45 deletions(-)
> 
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index 6b2658c..992bb30 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -283,16 +283,12 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
>  
>  extern int event_is_open;
>  
> -int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
> +int acpi_bus_generate_event4(const char *device_class, const char *bus_id, u8 type, int data)
>  {
> -	struct acpi_bus_event *event = NULL;
> +	struct acpi_bus_event *event;
>  	unsigned long flags = 0;
>  
> -
> -	if (!device)
> -		return -EINVAL;
> -
> -	if (acpi_bus_generate_genetlink_event(device, type, data))
> +	if (acpi_bus_generate_genetlink_event(device_class, bus_id, type, data))
>  		printk(KERN_WARNING PREFIX
>  			"Failed to generate an ACPI event via genetlink!\n");
>  
> @@ -304,8 +300,8 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
>  	if (!event)
>  		return -ENOMEM;
>  
> -	strcpy(event->device_class, device->pnp.device_class);
> -	strcpy(event->bus_id, device->pnp.bus_id);
> +	strcpy(event->device_class, device_class);
> +	strcpy(event->bus_id, bus_id);
>  	event->type = type;
>  	event->data = data;
>  
> @@ -316,6 +312,17 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
>  	wake_up_interruptible(&acpi_bus_event_queue);
>  
>  	return 0;
> +
> +}
> +
> +EXPORT_SYMBOL_GPL(acpi_bus_generate_event4);
> +
> +int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
> +{
> +	if (!device)
> +		return -EINVAL;
> +	return acpi_bus_generate_event4(device->pnp.device_class,
> +					device->pnp.bus_id, type, data);
>  }
>  
>  EXPORT_SYMBOL(acpi_bus_generate_event);
> diff --git a/drivers/acpi/event.c b/drivers/acpi/event.c
> index 95637a4..6529280 100644
> --- a/drivers/acpi/event.c
> +++ b/drivers/acpi/event.c
> @@ -147,7 +147,8 @@ static struct genl_multicast_group acpi_event_mcgrp = {
>  	.name = ACPI_GENL_MCAST_GROUP_NAME,
>  };
>  
> -int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> +int acpi_bus_generate_genetlink_event(const char *device_class,
> +				      const char *bus_id,
>  				      u8 type, int data)
>  {
>  	struct sk_buff *skb;
> @@ -191,8 +192,8 @@ int acpi_bus_generate_genetlink_event(struct acpi_device *device,
>  
>  	memset(event, 0, sizeof(struct acpi_genl_event));
>  
> -	strcpy(event->device_class, device->pnp.device_class);
> -	strcpy(event->bus_id, device->dev.bus_id);
> +	strcpy(event->device_class, device_class);
> +	strcpy(event->bus_id, bus_id);
>  	event->type = type;
>  	event->data = data;
>  
> diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
> index 82c3a55..88af657 100644
> --- a/drivers/acpi/sbs.c
> +++ b/drivers/acpi/sbs.c
> @@ -427,27 +427,6 @@ static int acpi_check_update_proc(struct acpi_sbs *sbs)
>  	return 0;
>  }
>  
> -static int acpi_sbs_generate_event(struct acpi_device *device,
> -				   int event, int state, char *bid, char *class)
> -{
> -	char bid_saved[5];
> -	char class_saved[20];
> -	int result = 0;
> -
> -	strcpy(bid_saved, acpi_device_bid(device));
> -	strcpy(class_saved, acpi_device_class(device));
> -
> -	strcpy(acpi_device_bid(device), bid);
> -	strcpy(acpi_device_class(device), class);
> -
> -	result = acpi_bus_generate_event(device, event, state);
> -
> -	strcpy(acpi_device_bid(device), bid_saved);
> -	strcpy(acpi_device_class(device), class_saved);
> -
> -	return result;
> -}
> -
>  static int acpi_battery_get_present(struct acpi_battery *battery)
>  {
>  	s16 state;
> @@ -1451,14 +1430,13 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs, int id, int data_type)
>  	}
>  
>  	if (do_ac_init) {
> -		result = acpi_sbs_generate_event(sbs->device,
> -						 ACPI_SBS_AC_NOTIFY_STATUS,
> -						 new_ac_present,
> +		result = acpi_bus_generate_event4(ACPI_AC_CLASS,
>  						 ACPI_AC_DIR_NAME,
> -						 ACPI_AC_CLASS);
> +						 ACPI_SBS_AC_NOTIFY_STATUS,
> +						 new_ac_present);
>  		if (result) {
>  			ACPI_EXCEPTION((AE_INFO, AE_ERROR,
> -					"acpi_sbs_generate_event() failed"));
> +					"acpi_bus_generate_event4() failed"));
>  		}
>  	}
>  
> @@ -1567,14 +1545,13 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs, int id, int data_type)
>  		    old_remaining_capacity !=
>  		    battery->state.remaining_capacity) {
>  			sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
> -			result = acpi_sbs_generate_event(sbs->device,
> -							 ACPI_SBS_BATTERY_NOTIFY_STATUS,
> -							 new_battery_present,
> +			result = acpi_bus_generate_event4(ACPI_BATTERY_CLASS,
>  							 dir_name,
> -							 ACPI_BATTERY_CLASS);
> +							 ACPI_SBS_BATTERY_NOTIFY_STATUS,
> +							 new_battery_present);
>  			if (result) {
>  				ACPI_EXCEPTION((AE_INFO, AE_ERROR,
> -						"acpi_sbs_generate_event() "
> +						"acpi_bus_generate_event4() "
>  						"failed"));
>  			}
>  		}
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 3d0fea2..0878928 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -321,8 +321,9 @@ struct acpi_bus_event {
>  };
>  
>  extern struct kset acpi_subsys;
> -extern int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> -						u8 type, int data);
> +extern int acpi_bus_generate_genetlink_event(const char *device_class,
> +					     const char *bus_id,
> +					     u8 type, int data);
>  /*
>   * External Functions
>   */
> @@ -333,6 +334,7 @@ int acpi_bus_get_status(struct acpi_device *device);
>  int acpi_bus_get_power(acpi_handle handle, int *state);
>  int acpi_bus_set_power(acpi_handle handle, int state);
>  int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data);
> +int acpi_bus_generate_event4(const char *class, const char *bid, u8 type, int data);
>  int acpi_bus_receive_event(struct acpi_bus_event *event);
>  int acpi_bus_register_driver(struct acpi_driver *driver);
>  void acpi_bus_unregister_driver(struct acpi_driver *driver);
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux