Re: [PATCH] ACPI: don't send netlink events for those that go into input layer

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

 



I like it, Rui.

I think that upon this patch, we can start to deprecate acpi_bus_generate_event,
as every user of it is now handled by the input layer or netlink.

applied.

thanks,
-Len

On Wednesday 22 August 2007 13:24, Zhang Rui wrote:
> As a replacement of /prco/acpi/event, all ACPI events are exported to user
> space either via netlink or via input layer.
> Events that go into input layer should not be sent to netlink at the same time.
> 
> This patch introduces a new interface acpi_bus_generate_netlink_event which is
> called by devices that want to export events via netlink rather than input layer.
> 
> events that are sent via netlink:
> 	ac/battery/sbs events
> 	thermal events
> 	processor events
> 	thinkpad_acpi dock/bay events
> 
> events that are sent via input layer:
> 	video hotkey events
> 	thinkpad_acpi hotkey events
> 	button events
> 	asus_acpi/asus-laptop hotkey events
> 	sonypi/sonylaptop events
> 
> Signed-off-by: Zhang Rui <rui.zhang@xxxxxxxxx>
> ---
>  drivers/acpi/ac.c                 |    3 +++
>  drivers/acpi/battery.c            |    3 +++
>  drivers/acpi/bus.c                |    4 ----
>  drivers/acpi/event.c              |   13 +++++++++----
>  drivers/acpi/processor_core.c     |    7 +++++++
>  drivers/acpi/sbs.c                |    1 +
>  drivers/acpi/thermal.c            |   12 ++++++++++++
>  drivers/misc/thinkpad_acpi.c      |   20 ++++++++++++++------
>  drivers/pci/hotplug/acpiphp_ibm.c |    3 +++
>  include/acpi/acpi_bus.h           |    3 +--
>  10 files changed, 53 insertions(+), 16 deletions(-)
> 
> Index: linux-2.6.23-rc3/drivers/acpi/bus.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/bus.c
> +++ linux-2.6.23-rc3/drivers/acpi/bus.c
> @@ -292,10 +292,6 @@ int acpi_bus_generate_event(struct acpi_
>  	if (!device)
>  		return -EINVAL;
>  
> -	if (acpi_bus_generate_genetlink_event(device, type, data))
> -		printk(KERN_WARNING PREFIX
> -			"Failed to generate an ACPI event via genetlink!\n");
> -
>  	/* drop event on the floor if no one's listening */
>  	if (!event_is_open)
>  		return 0;
> Index: linux-2.6.23-rc3/drivers/acpi/event.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/event.c
> +++ linux-2.6.23-rc3/drivers/acpi/event.c
> @@ -147,7 +147,8 @@ static struct genl_multicast_group acpi_
>  	.name = ACPI_GENL_MCAST_GROUP_NAME,
>  };
>  
> -int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> +int acpi_bus_generate_netlink_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(st
>  
>  	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;
>  
> @@ -211,6 +212,8 @@ int acpi_bus_generate_genetlink_event(st
>  	return 0;
>  }
>  
> +EXPORT_SYMBOL(acpi_bus_generate_netlink_event);
> +
>  static int acpi_event_genetlink_init(void)
>  {
>  	int result;
> @@ -228,12 +231,14 @@ static int acpi_event_genetlink_init(voi
>  }
>  
>  #else
> -int acpi_bus_generate_genetlink_event(struct acpi_device *device, u8 type,
> +int acpi_bus_generate_netlink_event(struct acpi_device *device, u8 type,
>  				      int data)
>  {
>  	return 0;
>  }
>  
> +EXPORT_SYMBOL(acpi_generate_netlink_event);
> +
>  static int acpi_event_genetlink_init(void)
>  {
>  	return -ENODEV;
> Index: linux-2.6.23-rc3/drivers/acpi/ac.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/ac.c
> +++ linux-2.6.23-rc3/drivers/acpi/ac.c
> @@ -205,6 +205,9 @@ static void acpi_ac_notify(acpi_handle h
>  	case ACPI_NOTIFY_DEVICE_CHECK:
>  		acpi_ac_get_state(ac);
>  		acpi_bus_generate_event(device, event, (u32) ac->state);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event,
> +						  (u32) ac->state);
>  		break;
>  	default:
>  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc3/include/acpi/acpi_bus.h
> ===================================================================
> --- linux-2.6.23-rc3.orig/include/acpi/acpi_bus.h
> +++ linux-2.6.23-rc3/include/acpi/acpi_bus.h
> @@ -321,8 +321,7 @@ 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_netlink_event(const char*, const char*, u8, int);
>  /*
>   * External Functions
>   */
> Index: linux-2.6.23-rc3/drivers/acpi/battery.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/battery.c
> +++ linux-2.6.23-rc3/drivers/acpi/battery.c
> @@ -869,6 +869,9 @@ static void acpi_battery_notify(acpi_han
>  		acpi_battery_notify_update(battery);
>  		acpi_bus_generate_event(device, event,
>  					acpi_battery_present(battery));
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event,
> +						  acpi_battery_present(battery));
>  		break;
>  	default:
>  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc3/drivers/acpi/processor_core.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/processor_core.c
> +++ linux-2.6.23-rc3/drivers/acpi/processor_core.c
> @@ -700,14 +700,21 @@ static void acpi_processor_notify(acpi_h
>  		acpi_processor_ppc_has_changed(pr);
>  		acpi_bus_generate_event(device, event,
>  					pr->performance_platform_limit);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event,
> +						  pr->performance_platform_limit);
>  		break;
>  	case ACPI_PROCESSOR_NOTIFY_POWER:
>  		acpi_processor_cst_has_changed(pr);
>  		acpi_bus_generate_event(device, event, 0);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event, 0);
>  		break;
>  	case ACPI_PROCESSOR_NOTIFY_THROTTLING:
>  		acpi_processor_tstate_has_changed(pr);
>  		acpi_bus_generate_event(device, event, 0);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event, 0);
>  	default:
>  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
>  				  "Unsupported event [0x%x]\n", event));
> Index: linux-2.6.23-rc3/drivers/acpi/thermal.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/thermal.c
> +++ linux-2.6.23-rc3/drivers/acpi/thermal.c
> @@ -487,6 +487,10 @@ static int acpi_thermal_critical(struct 
>  	       KELVIN_TO_CELSIUS(tz->temperature));
>  	acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
>  				tz->trips.critical.flags.enabled);
> +	acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
> +					  tz->device->dev.bus_id,
> +					  ACPI_THERMAL_NOTIFY_CRITICAL,
> +					  tz->trips.critical.flags.enabled);
>  
>  	orderly_poweroff(true);
>  
> @@ -506,6 +510,10 @@ static int acpi_thermal_hot(struct acpi_
>  
>  	acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
>  				tz->trips.hot.flags.enabled);
> +	acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
> +					  tz->device->dev.bus_id,
> +					  ACPI_THERMAL_NOTIFY_HOT,
> +					  tz->trips.hot.flags.enabled);
>  
>  	/* TBD: Call user-mode "sleep(S4)" function */
>  
> @@ -1150,11 +1158,15 @@ static void acpi_thermal_notify(acpi_han
>  		acpi_thermal_get_trip_points(tz);
>  		acpi_thermal_check(tz);
>  		acpi_bus_generate_event(device, event, 0);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event, 0);
>  		break;
>  	case ACPI_THERMAL_NOTIFY_DEVICES:
>  		if (tz->flags.devices)
>  			acpi_thermal_get_devices(tz);
>  		acpi_bus_generate_event(device, event, 0);
> +		acpi_bus_generate_netlink_event(device->pnp.device_class,
> +						  device->dev.bus_id, event, 0);
>  		break;
>  	default:
>  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc3/drivers/misc/thinkpad_acpi.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/misc/thinkpad_acpi.c
> +++ linux-2.6.23-rc3/drivers/misc/thinkpad_acpi.c
> @@ -2162,22 +2162,27 @@ static void dock_notify(struct ibm_struc
>  	int docked = dock_docked();
>  	int pci = ibm->acpi->hid && ibm->acpi->device &&
>  		acpi_match_device_ids(ibm->acpi->device, ibm_pci_device_ids);
> +	int data;
>  
>  	if (event == 1 && !pci)	/* 570 */
> -		acpi_bus_generate_event(ibm->acpi->device, event, 1);	/* button */
> +		data = 1;	/* button */
>  	else if (event == 1 && pci)	/* 570 */
> -		acpi_bus_generate_event(ibm->acpi->device, event, 3);	/* dock */
> +		data = 3;	/* dock */
>  	else if (event == 3 && docked)
> -		acpi_bus_generate_event(ibm->acpi->device, event, 1);	/* button */
> +		data = 1;	/* button */
>  	else if (event == 3 && !docked)
> -		acpi_bus_generate_event(ibm->acpi->device, event, 2);	/* undock */
> +		data = 2;	/* undock */
>  	else if (event == 0 && docked)
> -		acpi_bus_generate_event(ibm->acpi->device, event, 3);	/* dock */
> +		data = 3;	/* dock */
>  	else {
>  		printk(IBM_ERR "unknown dock event %d, status %d\n",
>  		       event, _sta(dock_handle));
> -		acpi_bus_generate_event(ibm->acpi->device, event, 0);	/* unknown */
> +		data = 0;	/* unknown */
>  	}
> +	acpi_bus_generate_event(ibm->acpi->device, event, data);
> +	acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
> +					  ibm->acpi->device->dev.bus_id,
> +					  event, data);
>  }
>  
>  static int dock_read(char *p)
> @@ -2276,6 +2281,9 @@ static int __init bay_init(struct ibm_in
>  static void bay_notify(struct ibm_struct *ibm, u32 event)
>  {
>  	acpi_bus_generate_event(ibm->acpi->device, event, 0);
> +	acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
> +					  ibm->acpi->device->dev.bus_id,
> +					  event, 0);
>  }
>  
>  #define bay_occupied(b) (_sta(b##_handle) & 1)
> Index: linux-2.6.23-rc3/drivers/pci/hotplug/acpiphp_ibm.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/pci/hotplug/acpiphp_ibm.c
> +++ linux-2.6.23-rc3/drivers/pci/hotplug/acpiphp_ibm.c
> @@ -268,6 +268,9 @@ static void ibm_handle_events(acpi_handl
>  	if (subevent == 0x80) {
>  		dbg("%s: generationg bus event\n", __FUNCTION__);
>  		acpi_bus_generate_event(note->device, note->event, detail);
> +		acpi_bus_generate_netlink_event(note->device->pnp.device_class,
> +						  note->device->dev.bus_id,
> +						  note->event, detail);
>  	} else
>  		note->event = event;
>  }
> Index: linux-2.6.23-rc3/drivers/acpi/sbs.c
> ===================================================================
> --- linux-2.6.23-rc3.orig/drivers/acpi/sbs.c
> +++ linux-2.6.23-rc3/drivers/acpi/sbs.c
> @@ -445,6 +445,7 @@ static int acpi_sbs_generate_event(struc
>  	strcpy(acpi_device_bid(device), bid_saved);
>  	strcpy(acpi_device_class(device), class_saved);
>  
> +	acpi_bus_generate_netlink_event(class, bid, event, state);
>  	return result;
>  }
>  
> 
-
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