* Re: [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC
2007-07-31 23:00 [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC Zhang Rui
@ 2007-07-31 13:33 ` Rafael J. Wysocki
2007-08-16 3:36 ` Len Brown
1 sibling, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2007-07-31 13:33 UTC (permalink / raw)
To: Zhang Rui; +Cc: linux-acpi, lenb
On Wednesday, 1 August 2007 01:00, Zhang Rui wrote:
> Use GFP_KERNEL instead of GFP_ATOMIC.
Hmm, if any of these things can happen during a suspend, GFP_NOFS would be
safer (or even GFP_NOIO).
Greetings,
Rafael
--
"Premature optimization is the root of all evil." - Donald Knuth
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC
@ 2007-07-31 23:00 Zhang Rui
2007-07-31 13:33 ` Rafael J. Wysocki
2007-08-16 3:36 ` Len Brown
0 siblings, 2 replies; 5+ messages in thread
From: Zhang Rui @ 2007-07-31 23:00 UTC (permalink / raw)
To: linux-acpi; +Cc: lenb
Use GFP_KERNEL instead of GFP_ATOMIC.
GFP_ATOMIC is still needed by the sonypi and sony-laptop driver.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
---
drivers/acpi/ac.c | 3 ++-
drivers/acpi/asus_acpi.c | 2 +-
drivers/acpi/battery.c | 3 ++-
drivers/acpi/bus.c | 7 ++++---
drivers/acpi/button.c | 2 +-
drivers/acpi/event.c | 6 +++---
drivers/acpi/processor_core.c | 7 ++++---
drivers/acpi/sbs.c | 2 +-
drivers/acpi/thermal.c | 8 ++++----
drivers/acpi/video.c | 10 +++++-----
drivers/char/sonypi.c | 3 ++-
drivers/misc/asus-laptop.c | 2 +-
drivers/misc/sony-laptop.c | 4 ++--
drivers/misc/thinkpad_acpi.c | 26 +++++++++++++++++---------
drivers/pci/hotplug/acpiphp_ibm.c | 3 ++-
include/acpi/acpi_bus.h | 5 +++--
16 files changed, 54 insertions(+), 39 deletions(-)
Index: linux-2.6.23-rc1/drivers/acpi/bus.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/bus.c
+++ linux-2.6.23-rc1/drivers/acpi/bus.c
@@ -284,7 +284,8 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_q
extern int event_is_open;
-int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
+int acpi_bus_generate_event(struct acpi_device *device, u8 type,
+ int data, gfp_t flag)
{
struct acpi_bus_event *event = NULL;
unsigned long flags = 0;
@@ -293,7 +294,7 @@ int acpi_bus_generate_event(struct acpi_
if (!device)
return -EINVAL;
- if (acpi_bus_generate_genetlink_event(device, type, data))
+ if (acpi_bus_generate_genetlink_event(device, type, data, flag))
printk(KERN_WARNING PREFIX
"Failed to generate an ACPI event via genetlink!\n");
@@ -301,7 +302,7 @@ int acpi_bus_generate_event(struct acpi_
if (!event_is_open)
return 0;
- event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
+ event = kmalloc(sizeof(struct acpi_bus_event), flag);
if (!event)
return -ENOMEM;
Index: linux-2.6.23-rc1/drivers/acpi/event.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/event.c
+++ linux-2.6.23-rc1/drivers/acpi/event.c
@@ -148,7 +148,7 @@ static struct genl_multicast_group acpi_
};
int acpi_bus_generate_genetlink_event(struct acpi_device *device,
- u8 type, int data)
+ u8 type, int data, gfp_t flag)
{
struct sk_buff *skb;
struct nlattr *attr;
@@ -161,7 +161,7 @@ int acpi_bus_generate_genetlink_event(st
size = nla_total_size(sizeof(struct acpi_genl_event)) +
nla_total_size(0);
- skb = genlmsg_new(size, GFP_ATOMIC);
+ skb = genlmsg_new(size, flag);
if (!skb)
return -ENOMEM;
@@ -204,7 +204,7 @@ int acpi_bus_generate_genetlink_event(st
}
result =
- genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC);
+ genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, flag);
if (result)
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Failed to send a Genetlink message!\n"));
Index: linux-2.6.23-rc1/include/acpi/acpi_bus.h
===================================================================
--- linux-2.6.23-rc1.orig/include/acpi/acpi_bus.h
+++ linux-2.6.23-rc1/include/acpi/acpi_bus.h
@@ -322,7 +322,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);
+ u8 type, int data, gfp_t flag);
/*
* External Functions
*/
@@ -332,7 +332,8 @@ void acpi_bus_data_handler(acpi_handle h
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_event(struct acpi_device *device, u8 type, int data,
+ gfp_t flag);
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);
Index: linux-2.6.23-rc1/drivers/acpi/ac.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/ac.c
+++ linux-2.6.23-rc1/drivers/acpi/ac.c
@@ -199,7 +199,8 @@ static void acpi_ac_notify(acpi_handle h
case ACPI_NOTIFY_BUS_CHECK:
case ACPI_NOTIFY_DEVICE_CHECK:
acpi_ac_get_state(ac);
- acpi_bus_generate_event(device, event, (u32) ac->state);
+ acpi_bus_generate_event(device, event, (u32) ac->state,
+ GFP_KERNEL);
break;
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
Index: linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/asus_acpi.c
+++ linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
@@ -1065,7 +1065,7 @@ static void asus_hotk_notify(acpi_handle
}
acpi_bus_generate_event(hotk->device, event,
- hotk->event_count[event % 128]++);
+ hotk->event_count[event % 128]++, GFP_KERNEL);
return;
}
Index: linux-2.6.23-rc1/drivers/acpi/battery.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/battery.c
+++ linux-2.6.23-rc1/drivers/acpi/battery.c
@@ -868,7 +868,8 @@ static void acpi_battery_notify(acpi_han
device = battery->device;
acpi_battery_notify_update(battery);
acpi_bus_generate_event(device, event,
- acpi_battery_present(battery));
+ acpi_battery_present(battery),
+ GFP_KERNEL);
break;
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
Index: linux-2.6.23-rc1/drivers/acpi/button.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/button.c
+++ linux-2.6.23-rc1/drivers/acpi/button.c
@@ -275,7 +275,7 @@ static void acpi_button_notify(acpi_hand
input_sync(input);
acpi_bus_generate_event(button->device, event,
- ++button->pushed);
+ ++button->pushed, GFP_KERNEL);
break;
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
Index: linux-2.6.23-rc1/drivers/acpi/processor_core.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/processor_core.c
+++ linux-2.6.23-rc1/drivers/acpi/processor_core.c
@@ -693,15 +693,16 @@ static void acpi_processor_notify(acpi_h
case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
acpi_processor_ppc_has_changed(pr);
acpi_bus_generate_event(device, event,
- pr->performance_platform_limit);
+ pr->performance_platform_limit,
+ GFP_KERNEL);
break;
case ACPI_PROCESSOR_NOTIFY_POWER:
acpi_processor_cst_has_changed(pr);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
case ACPI_PROCESSOR_NOTIFY_THROTTLING:
acpi_processor_tstate_has_changed(pr);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Unsupported event [0x%x]\n", event));
Index: linux-2.6.23-rc1/drivers/acpi/sbs.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/sbs.c
+++ linux-2.6.23-rc1/drivers/acpi/sbs.c
@@ -434,7 +434,7 @@ static int acpi_sbs_generate_event(struc
strcpy(acpi_device_bid(device), bid);
strcpy(acpi_device_class(device), class);
- result = acpi_bus_generate_event(device, event, state);
+ result = acpi_bus_generate_event(device, event, state, GFP_KERNEL);
strcpy(acpi_device_bid(device), bid_saved);
strcpy(acpi_device_class(device), class_saved);
Index: linux-2.6.23-rc1/drivers/acpi/thermal.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/thermal.c
+++ linux-2.6.23-rc1/drivers/acpi/thermal.c
@@ -434,7 +434,7 @@ static int acpi_thermal_critical(struct
"Critical temperature reached (%ld C), shutting down.\n",
KELVIN_TO_CELSIUS(tz->temperature));
acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
- tz->trips.critical.flags.enabled);
+ tz->trips.critical.flags.enabled, GFP_KERNEL);
orderly_poweroff(true);
@@ -453,7 +453,7 @@ static int acpi_thermal_hot(struct acpi_
tz->trips.hot.flags.enabled = 0;
acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
- tz->trips.hot.flags.enabled);
+ tz->trips.hot.flags.enabled, GFP_KERNEL);
/* TBD: Call user-mode "sleep(S4)" function */
@@ -1095,12 +1095,12 @@ static void acpi_thermal_notify(acpi_han
case ACPI_THERMAL_NOTIFY_THRESHOLDS:
acpi_thermal_get_trip_points(tz);
acpi_thermal_check(tz);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
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_event(device, event, 0, GFP_KERNEL);
break;
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
Index: linux-2.6.23-rc1/drivers/acpi/video.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/video.c
+++ linux-2.6.23-rc1/drivers/acpi/video.c
@@ -1769,7 +1769,7 @@ static void acpi_video_bus_notify(acpi_h
switch (event) {
case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
* most likely via hotkey. */
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed a video
@@ -1777,14 +1777,14 @@ static void acpi_video_bus_notify(acpi_h
acpi_video_device_enumerate(video);
acpi_video_device_rebind(video);
acpi_video_switch_output(video, event);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
acpi_video_switch_output(video, event);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
default:
@@ -1809,7 +1809,7 @@ static void acpi_video_device_notify(acp
switch (event) {
case ACPI_VIDEO_NOTIFY_SWITCH: /* change in status (cycle output device) */
case ACPI_VIDEO_NOTIFY_PROBE: /* change in status (output device status) */
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
@@ -1817,7 +1817,7 @@ static void acpi_video_device_notify(acp
case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
acpi_video_switch_brightness(video_device, event);
- acpi_bus_generate_event(device, event, 0);
+ acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
break;
default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
Index: linux-2.6.23-rc1/drivers/char/sonypi.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/char/sonypi.c
+++ linux-2.6.23-rc1/drivers/char/sonypi.c
@@ -875,7 +875,8 @@ found:
#ifdef CONFIG_ACPI
if (sonypi_acpi_device)
- acpi_bus_generate_event(sonypi_acpi_device, 1, event);
+ acpi_bus_generate_event(sonypi_acpi_device, 1,
+ event, GFP_ATOMIC);
#endif
kfifo_put(sonypi_device.fifo, (unsigned char *)&event, sizeof(event));
Index: linux-2.6.23-rc1/drivers/misc/sony-laptop.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/misc/sony-laptop.c
+++ linux-2.6.23-rc1/drivers/misc/sony-laptop.c
@@ -904,7 +904,7 @@ static void sony_acpi_notify(acpi_handle
dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
sony_laptop_report_input_event(ev);
- acpi_bus_generate_event(sony_nc_acpi_device, 1, ev);
+ acpi_bus_generate_event(sony_nc_acpi_device, 1, ev, GFP_KERNEL);
}
static acpi_status sony_walk_callback(acpi_handle handle, u32 level,
@@ -2275,7 +2275,7 @@ static irqreturn_t sony_pic_irq(int irq,
found:
sony_laptop_report_input_event(device_event);
- acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event);
+ acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event, GFP_ATOMIC);
sonypi_compat_report_event(device_event);
return IRQ_HANDLED;
Index: linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/misc/thinkpad_acpi.c
+++ linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
@@ -1189,10 +1189,12 @@ static void hotkey_notify(struct ibm_str
}
if (sendacpi)
- acpi_bus_generate_event(ibm->acpi->device, event, hkey);
+ acpi_bus_generate_event(ibm->acpi->device, event, hkey,
+ GFP_KERNEL);
} else {
printk(IBM_ERR "unknown hotkey notification event %d\n", event);
- acpi_bus_generate_event(ibm->acpi->device, event, 0);
+ acpi_bus_generate_event(ibm->acpi->device, event, 0,
+ GFP_KERNEL);
}
}
@@ -2152,19 +2154,25 @@ static void dock_notify(struct ibm_struc
int pci = ibm->acpi->hid && strstr(ibm->acpi->hid, PCI_ROOT_HID_STRING);
if (event == 1 && !pci) /* 570 */
- acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 1, GFP_KERNEL); /* button */
else if (event == 1 && pci) /* 570 */
- acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 3, GFP_KERNEL); /* dock */
else if (event == 3 && docked)
- acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 1, GFP_KERNEL); /* button */
else if (event == 3 && !docked)
- acpi_bus_generate_event(ibm->acpi->device, event, 2); /* undock */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 2, GFP_KERNEL); /* undock */
else if (event == 0 && docked)
- acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 3, GFP_KERNEL); /* 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 */
+ acpi_bus_generate_event(ibm->acpi->device, event,
+ 0, GFP_KERNEL); /* unknown */
}
}
@@ -2263,7 +2271,7 @@ 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_event(ibm->acpi->device, event, 0, GFP_KERNEL);
}
#define bay_occupied(b) (_sta(b##_handle) & 1)
Index: linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/pci/hotplug/acpiphp_ibm.c
+++ linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
@@ -267,7 +267,8 @@ 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_event(note->device, note->event,
+ detail, GFP_KERNEL);
} else
note->event = event;
}
Index: linux-2.6.23-rc1/drivers/misc/asus-laptop.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/misc/asus-laptop.c
+++ linux-2.6.23-rc1/drivers/misc/asus-laptop.c
@@ -728,7 +728,7 @@ static void asus_hotk_notify(acpi_handle
}
acpi_bus_generate_event(hotk->device, event,
- hotk->event_count[event % 128]++);
+ hotk->event_count[event % 128]++, GFP_KERNEL);
return;
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC
2007-07-31 23:00 [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC Zhang Rui
2007-07-31 13:33 ` Rafael J. Wysocki
@ 2007-08-16 3:36 ` Len Brown
2007-08-16 4:06 ` Zhang Rui
1 sibling, 1 reply; 5+ messages in thread
From: Len Brown @ 2007-08-16 3:36 UTC (permalink / raw)
To: Zhang Rui; +Cc: linux-acpi
On Tuesday 31 July 2007 19:00, Zhang Rui wrote:
> Use GFP_KERNEL instead of GFP_ATOMIC.
>
> GFP_ATOMIC is still needed by the sonypi and sony-laptop driver.
Why?
Sony can't events from user-context like everybody else does?
I don't like adding this extra param to every caller.
I'm looking forward to acpi_bus_generate_event()
being renamed acpi_bus_generate_proc_event()
then it should be #ifdef'd with /proc/acpi/event for eventual removal,
and the callers should invoke acpi_bus_generate_genetlink_event() directly.
The exception is the callers that are covered by the input layer already --
such as button.c. The can continue to call the legacy interface while
it exists, but should not be generating a netlink event -- for they
act like button keys and are covered by the input layer.
thanks,
-Len
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> ---
> drivers/acpi/ac.c | 3 ++-
> drivers/acpi/asus_acpi.c | 2 +-
> drivers/acpi/battery.c | 3 ++-
> drivers/acpi/bus.c | 7 ++++---
> drivers/acpi/button.c | 2 +-
> drivers/acpi/event.c | 6 +++---
> drivers/acpi/processor_core.c | 7 ++++---
> drivers/acpi/sbs.c | 2 +-
> drivers/acpi/thermal.c | 8 ++++----
> drivers/acpi/video.c | 10 +++++-----
> drivers/char/sonypi.c | 3 ++-
> drivers/misc/asus-laptop.c | 2 +-
> drivers/misc/sony-laptop.c | 4 ++--
> drivers/misc/thinkpad_acpi.c | 26 +++++++++++++++++---------
> drivers/pci/hotplug/acpiphp_ibm.c | 3 ++-
> include/acpi/acpi_bus.h | 5 +++--
> 16 files changed, 54 insertions(+), 39 deletions(-)
>
> Index: linux-2.6.23-rc1/drivers/acpi/bus.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/bus.c
> +++ linux-2.6.23-rc1/drivers/acpi/bus.c
> @@ -284,7 +284,8 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_q
>
> extern int event_is_open;
>
> -int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
> +int acpi_bus_generate_event(struct acpi_device *device, u8 type,
> + int data, gfp_t flag)
> {
> struct acpi_bus_event *event = NULL;
> unsigned long flags = 0;
> @@ -293,7 +294,7 @@ int acpi_bus_generate_event(struct acpi_
> if (!device)
> return -EINVAL;
>
> - if (acpi_bus_generate_genetlink_event(device, type, data))
> + if (acpi_bus_generate_genetlink_event(device, type, data, flag))
> printk(KERN_WARNING PREFIX
> "Failed to generate an ACPI event via genetlink!\n");
>
> @@ -301,7 +302,7 @@ int acpi_bus_generate_event(struct acpi_
> if (!event_is_open)
> return 0;
>
> - event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
> + event = kmalloc(sizeof(struct acpi_bus_event), flag);
> if (!event)
> return -ENOMEM;
>
> Index: linux-2.6.23-rc1/drivers/acpi/event.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/event.c
> +++ linux-2.6.23-rc1/drivers/acpi/event.c
> @@ -148,7 +148,7 @@ static struct genl_multicast_group acpi_
> };
>
> int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> - u8 type, int data)
> + u8 type, int data, gfp_t flag)
> {
> struct sk_buff *skb;
> struct nlattr *attr;
> @@ -161,7 +161,7 @@ int acpi_bus_generate_genetlink_event(st
> size = nla_total_size(sizeof(struct acpi_genl_event)) +
> nla_total_size(0);
>
> - skb = genlmsg_new(size, GFP_ATOMIC);
> + skb = genlmsg_new(size, flag);
> if (!skb)
> return -ENOMEM;
>
> @@ -204,7 +204,7 @@ int acpi_bus_generate_genetlink_event(st
> }
>
> result =
> - genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC);
> + genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, flag);
> if (result)
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> "Failed to send a Genetlink message!\n"));
> Index: linux-2.6.23-rc1/include/acpi/acpi_bus.h
> ===================================================================
> --- linux-2.6.23-rc1.orig/include/acpi/acpi_bus.h
> +++ linux-2.6.23-rc1/include/acpi/acpi_bus.h
> @@ -322,7 +322,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);
> + u8 type, int data, gfp_t flag);
> /*
> * External Functions
> */
> @@ -332,7 +332,8 @@ void acpi_bus_data_handler(acpi_handle h
> 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_event(struct acpi_device *device, u8 type, int data,
> + gfp_t flag);
> 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);
> Index: linux-2.6.23-rc1/drivers/acpi/ac.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/ac.c
> +++ linux-2.6.23-rc1/drivers/acpi/ac.c
> @@ -199,7 +199,8 @@ static void acpi_ac_notify(acpi_handle h
> case ACPI_NOTIFY_BUS_CHECK:
> case ACPI_NOTIFY_DEVICE_CHECK:
> acpi_ac_get_state(ac);
> - acpi_bus_generate_event(device, event, (u32) ac->state);
> + acpi_bus_generate_event(device, event, (u32) ac->state,
> + GFP_KERNEL);
> break;
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/asus_acpi.c
> +++ linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
> @@ -1065,7 +1065,7 @@ static void asus_hotk_notify(acpi_handle
> }
>
> acpi_bus_generate_event(hotk->device, event,
> - hotk->event_count[event % 128]++);
> + hotk->event_count[event % 128]++, GFP_KERNEL);
>
> return;
> }
> Index: linux-2.6.23-rc1/drivers/acpi/battery.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/battery.c
> +++ linux-2.6.23-rc1/drivers/acpi/battery.c
> @@ -868,7 +868,8 @@ static void acpi_battery_notify(acpi_han
> device = battery->device;
> acpi_battery_notify_update(battery);
> acpi_bus_generate_event(device, event,
> - acpi_battery_present(battery));
> + acpi_battery_present(battery),
> + GFP_KERNEL);
> break;
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc1/drivers/acpi/button.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/button.c
> +++ linux-2.6.23-rc1/drivers/acpi/button.c
> @@ -275,7 +275,7 @@ static void acpi_button_notify(acpi_hand
> input_sync(input);
>
> acpi_bus_generate_event(button->device, event,
> - ++button->pushed);
> + ++button->pushed, GFP_KERNEL);
> break;
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc1/drivers/acpi/processor_core.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/processor_core.c
> +++ linux-2.6.23-rc1/drivers/acpi/processor_core.c
> @@ -693,15 +693,16 @@ static void acpi_processor_notify(acpi_h
> case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
> acpi_processor_ppc_has_changed(pr);
> acpi_bus_generate_event(device, event,
> - pr->performance_platform_limit);
> + pr->performance_platform_limit,
> + GFP_KERNEL);
> break;
> case ACPI_PROCESSOR_NOTIFY_POWER:
> acpi_processor_cst_has_changed(pr);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
> case ACPI_PROCESSOR_NOTIFY_THROTTLING:
> acpi_processor_tstate_has_changed(pr);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> "Unsupported event [0x%x]\n", event));
> Index: linux-2.6.23-rc1/drivers/acpi/sbs.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/sbs.c
> +++ linux-2.6.23-rc1/drivers/acpi/sbs.c
> @@ -434,7 +434,7 @@ static int acpi_sbs_generate_event(struc
> strcpy(acpi_device_bid(device), bid);
> strcpy(acpi_device_class(device), class);
>
> - result = acpi_bus_generate_event(device, event, state);
> + result = acpi_bus_generate_event(device, event, state, GFP_KERNEL);
>
> strcpy(acpi_device_bid(device), bid_saved);
> strcpy(acpi_device_class(device), class_saved);
> Index: linux-2.6.23-rc1/drivers/acpi/thermal.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/thermal.c
> +++ linux-2.6.23-rc1/drivers/acpi/thermal.c
> @@ -434,7 +434,7 @@ static int acpi_thermal_critical(struct
> "Critical temperature reached (%ld C), shutting down.\n",
> KELVIN_TO_CELSIUS(tz->temperature));
> acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
> - tz->trips.critical.flags.enabled);
> + tz->trips.critical.flags.enabled, GFP_KERNEL);
>
> orderly_poweroff(true);
>
> @@ -453,7 +453,7 @@ static int acpi_thermal_hot(struct acpi_
> tz->trips.hot.flags.enabled = 0;
>
> acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
> - tz->trips.hot.flags.enabled);
> + tz->trips.hot.flags.enabled, GFP_KERNEL);
>
> /* TBD: Call user-mode "sleep(S4)" function */
>
> @@ -1095,12 +1095,12 @@ static void acpi_thermal_notify(acpi_han
> case ACPI_THERMAL_NOTIFY_THRESHOLDS:
> acpi_thermal_get_trip_points(tz);
> acpi_thermal_check(tz);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> 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_event(device, event, 0, GFP_KERNEL);
> break;
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc1/drivers/acpi/video.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/acpi/video.c
> +++ linux-2.6.23-rc1/drivers/acpi/video.c
> @@ -1769,7 +1769,7 @@ static void acpi_video_bus_notify(acpi_h
> switch (event) {
> case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
> * most likely via hotkey. */
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
>
> case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed a video
> @@ -1777,14 +1777,14 @@ static void acpi_video_bus_notify(acpi_h
> acpi_video_device_enumerate(video);
> acpi_video_device_rebind(video);
> acpi_video_switch_output(video, event);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
>
> case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
> case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
> case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
> acpi_video_switch_output(video, event);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
>
> default:
> @@ -1809,7 +1809,7 @@ static void acpi_video_device_notify(acp
> switch (event) {
> case ACPI_VIDEO_NOTIFY_SWITCH: /* change in status (cycle output device) */
> case ACPI_VIDEO_NOTIFY_PROBE: /* change in status (output device status) */
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
> case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
> case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
> @@ -1817,7 +1817,7 @@ static void acpi_video_device_notify(acp
> case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
> case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
> acpi_video_switch_brightness(video_device, event);
> - acpi_bus_generate_event(device, event, 0);
> + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> break;
> default:
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> Index: linux-2.6.23-rc1/drivers/char/sonypi.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/char/sonypi.c
> +++ linux-2.6.23-rc1/drivers/char/sonypi.c
> @@ -875,7 +875,8 @@ found:
>
> #ifdef CONFIG_ACPI
> if (sonypi_acpi_device)
> - acpi_bus_generate_event(sonypi_acpi_device, 1, event);
> + acpi_bus_generate_event(sonypi_acpi_device, 1,
> + event, GFP_ATOMIC);
> #endif
>
> kfifo_put(sonypi_device.fifo, (unsigned char *)&event, sizeof(event));
> Index: linux-2.6.23-rc1/drivers/misc/sony-laptop.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/misc/sony-laptop.c
> +++ linux-2.6.23-rc1/drivers/misc/sony-laptop.c
> @@ -904,7 +904,7 @@ static void sony_acpi_notify(acpi_handle
>
> dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
> sony_laptop_report_input_event(ev);
> - acpi_bus_generate_event(sony_nc_acpi_device, 1, ev);
> + acpi_bus_generate_event(sony_nc_acpi_device, 1, ev, GFP_KERNEL);
> }
>
> static acpi_status sony_walk_callback(acpi_handle handle, u32 level,
> @@ -2275,7 +2275,7 @@ static irqreturn_t sony_pic_irq(int irq,
>
> found:
> sony_laptop_report_input_event(device_event);
> - acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event);
> + acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event, GFP_ATOMIC);
> sonypi_compat_report_event(device_event);
>
> return IRQ_HANDLED;
> Index: linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/misc/thinkpad_acpi.c
> +++ linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
> @@ -1189,10 +1189,12 @@ static void hotkey_notify(struct ibm_str
> }
>
> if (sendacpi)
> - acpi_bus_generate_event(ibm->acpi->device, event, hkey);
> + acpi_bus_generate_event(ibm->acpi->device, event, hkey,
> + GFP_KERNEL);
> } else {
> printk(IBM_ERR "unknown hotkey notification event %d\n", event);
> - acpi_bus_generate_event(ibm->acpi->device, event, 0);
> + acpi_bus_generate_event(ibm->acpi->device, event, 0,
> + GFP_KERNEL);
> }
> }
>
> @@ -2152,19 +2154,25 @@ static void dock_notify(struct ibm_struc
> int pci = ibm->acpi->hid && strstr(ibm->acpi->hid, PCI_ROOT_HID_STRING);
>
> if (event == 1 && !pci) /* 570 */
> - acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 1, GFP_KERNEL); /* button */
> else if (event == 1 && pci) /* 570 */
> - acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 3, GFP_KERNEL); /* dock */
> else if (event == 3 && docked)
> - acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 1, GFP_KERNEL); /* button */
> else if (event == 3 && !docked)
> - acpi_bus_generate_event(ibm->acpi->device, event, 2); /* undock */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 2, GFP_KERNEL); /* undock */
> else if (event == 0 && docked)
> - acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 3, GFP_KERNEL); /* 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 */
> + acpi_bus_generate_event(ibm->acpi->device, event,
> + 0, GFP_KERNEL); /* unknown */
> }
> }
>
> @@ -2263,7 +2271,7 @@ 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_event(ibm->acpi->device, event, 0, GFP_KERNEL);
> }
>
> #define bay_occupied(b) (_sta(b##_handle) & 1)
> Index: linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/pci/hotplug/acpiphp_ibm.c
> +++ linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
> @@ -267,7 +267,8 @@ 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_event(note->device, note->event,
> + detail, GFP_KERNEL);
> } else
> note->event = event;
> }
> Index: linux-2.6.23-rc1/drivers/misc/asus-laptop.c
> ===================================================================
> --- linux-2.6.23-rc1.orig/drivers/misc/asus-laptop.c
> +++ linux-2.6.23-rc1/drivers/misc/asus-laptop.c
> @@ -728,7 +728,7 @@ static void asus_hotk_notify(acpi_handle
> }
>
> acpi_bus_generate_event(hotk->device, event,
> - hotk->event_count[event % 128]++);
> + hotk->event_count[event % 128]++, GFP_KERNEL);
>
> return;
> }
> -
> 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] 5+ messages in thread
* Re: [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC
2007-08-16 3:36 ` Len Brown
@ 2007-08-16 4:06 ` Zhang Rui
2007-08-16 11:30 ` Mattia Dongili
0 siblings, 1 reply; 5+ messages in thread
From: Zhang Rui @ 2007-08-16 4:06 UTC (permalink / raw)
To: Len Brown; +Cc: linux-acpi, rjw
On Thu, 2007-08-16 at 11:36 +0800, Len Brown wrote:
> On Tuesday 31 July 2007 19:00, Zhang Rui wrote:
> > Use GFP_KERNEL instead of GFP_ATOMIC.
> >
> > GFP_ATOMIC is still needed by the sonypi and sony-laptop driver.
>
> Why?
> Sony can't events from user-context like everybody else does?
Mattia has the plan to do this. But it won't be finished recently.
> I don't like adding this extra param to every caller.
>
> I'm looking forward to acpi_bus_generate_event()
> being renamed acpi_bus_generate_proc_event()
> then it should be #ifdef'd with /proc/acpi/event for eventual removal,
> and the callers should invoke acpi_bus_generate_genetlink_event()
> directly.
acpi_bus_generate_genetlink_event still need to alloc memory with a
proper gfp_t flag.
Rafael said that "if any of these things can happen during a suspend,
GFP_NOFS would be safer (or even GFP_NOIO)."
I'm not sure which is the proper flag. In fact, we are still using
GFP_KERNEL if we want to evaluate some methods in the notify handler.
> The exception is the callers that are covered by the input layer
> already --
> such as button.c. The can continue to call the legacy interface while
> it exists, but should not be generating a netlink event -- for they
> act like button keys and are covered by the input layer.
That makes sense. But IMO, that's a kind of fussy and need a lot of
#ifdef.As we know what kind of devices/events are sent via input layer,
how about create a blacklist for these devices/events and stop them from
sending genetlink events. Then all we need is to hack in the
acpi_bus_generate_bus().
thanks,
Rui
> thanks,
> -Len
>
> > Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> > ---
> > drivers/acpi/ac.c | 3 ++-
> > drivers/acpi/asus_acpi.c | 2 +-
> > drivers/acpi/battery.c | 3 ++-
> > drivers/acpi/bus.c | 7 ++++---
> > drivers/acpi/button.c | 2 +-
> > drivers/acpi/event.c | 6 +++---
> > drivers/acpi/processor_core.c | 7 ++++---
> > drivers/acpi/sbs.c | 2 +-
> > drivers/acpi/thermal.c | 8 ++++----
> > drivers/acpi/video.c | 10 +++++-----
> > drivers/char/sonypi.c | 3 ++-
> > drivers/misc/asus-laptop.c | 2 +-
> > drivers/misc/sony-laptop.c | 4 ++--
> > drivers/misc/thinkpad_acpi.c | 26 +++++++++++++++++---------
> > drivers/pci/hotplug/acpiphp_ibm.c | 3 ++-
> > include/acpi/acpi_bus.h | 5 +++--
> > 16 files changed, 54 insertions(+), 39 deletions(-)
> >
> > Index: linux-2.6.23-rc1/drivers/acpi/bus.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/bus.c
> > +++ linux-2.6.23-rc1/drivers/acpi/bus.c
> > @@ -284,7 +284,8 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_q
> >
> > extern int event_is_open;
> >
> > -int acpi_bus_generate_event(struct acpi_device *device, u8 type,
> int data)
> > +int acpi_bus_generate_event(struct acpi_device *device, u8 type,
> > + int data, gfp_t flag)
> > {
> > struct acpi_bus_event *event = NULL;
> > unsigned long flags = 0;
> > @@ -293,7 +294,7 @@ int acpi_bus_generate_event(struct acpi_
> > if (!device)
> > return -EINVAL;
> >
> > - if (acpi_bus_generate_genetlink_event(device, type, data))
> > + if (acpi_bus_generate_genetlink_event(device, type, data,
> flag))
> > printk(KERN_WARNING PREFIX
> > "Failed to generate an ACPI event via
> genetlink!\n");
> >
> > @@ -301,7 +302,7 @@ int acpi_bus_generate_event(struct acpi_
> > if (!event_is_open)
> > return 0;
> >
> > - event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
> > + event = kmalloc(sizeof(struct acpi_bus_event), flag);
> > if (!event)
> > return -ENOMEM;
> >
> > Index: linux-2.6.23-rc1/drivers/acpi/event.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/event.c
> > +++ linux-2.6.23-rc1/drivers/acpi/event.c
> > @@ -148,7 +148,7 @@ static struct genl_multicast_group acpi_
> > };
> >
> > int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> > - u8 type, int data)
> > + u8 type, int data, gfp_t flag)
> > {
> > struct sk_buff *skb;
> > struct nlattr *attr;
> > @@ -161,7 +161,7 @@ int acpi_bus_generate_genetlink_event(st
> > size = nla_total_size(sizeof(struct acpi_genl_event)) +
> > nla_total_size(0);
> >
> > - skb = genlmsg_new(size, GFP_ATOMIC);
> > + skb = genlmsg_new(size, flag);
> > if (!skb)
> > return -ENOMEM;
> >
> > @@ -204,7 +204,7 @@ int acpi_bus_generate_genetlink_event(st
> > }
> >
> > result =
> > - genlmsg_multicast(skb, 0, acpi_event_mcgrp.id,
> GFP_ATOMIC);
> > + genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, flag);
> > if (result)
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > "Failed to send a Genetlink message!
> \n"));
> > Index: linux-2.6.23-rc1/include/acpi/acpi_bus.h
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/include/acpi/acpi_bus.h
> > +++ linux-2.6.23-rc1/include/acpi/acpi_bus.h
> > @@ -322,7 +322,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);
> > + u8 type, int data,
> gfp_t flag);
> > /*
> > * External Functions
> > */
> > @@ -332,7 +332,8 @@ void acpi_bus_data_handler(acpi_handle h
> > 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_event(struct acpi_device *device, u8 type,
> int data,
> > + gfp_t flag);
> > 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);
> > Index: linux-2.6.23-rc1/drivers/acpi/ac.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/ac.c
> > +++ linux-2.6.23-rc1/drivers/acpi/ac.c
> > @@ -199,7 +199,8 @@ static void acpi_ac_notify(acpi_handle h
> > case ACPI_NOTIFY_BUS_CHECK:
> > case ACPI_NOTIFY_DEVICE_CHECK:
> > acpi_ac_get_state(ac);
> > - acpi_bus_generate_event(device, event, (u32)
> ac->state);
> > + acpi_bus_generate_event(device, event, (u32)
> ac->state,
> > + GFP_KERNEL);
> > break;
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > Index: linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/asus_acpi.c
> > +++ linux-2.6.23-rc1/drivers/acpi/asus_acpi.c
> > @@ -1065,7 +1065,7 @@ static void asus_hotk_notify(acpi_handle
> > }
> >
> > acpi_bus_generate_event(hotk->device, event,
> > - hotk->event_count[event % 128]++);
> > + hotk->event_count[event % 128]++,
> GFP_KERNEL);
> >
> > return;
> > }
> > Index: linux-2.6.23-rc1/drivers/acpi/battery.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/battery.c
> > +++ linux-2.6.23-rc1/drivers/acpi/battery.c
> > @@ -868,7 +868,8 @@ static void acpi_battery_notify(acpi_han
> > device = battery->device;
> > acpi_battery_notify_update(battery);
> > acpi_bus_generate_event(device, event,
> > -
> acpi_battery_present(battery));
> > + acpi_battery_present(battery),
> > + GFP_KERNEL);
> > break;
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > Index: linux-2.6.23-rc1/drivers/acpi/button.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/button.c
> > +++ linux-2.6.23-rc1/drivers/acpi/button.c
> > @@ -275,7 +275,7 @@ static void acpi_button_notify(acpi_hand
> > input_sync(input);
> >
> > acpi_bus_generate_event(button->device, event,
> > - ++button->pushed);
> > + ++button->pushed, GFP_KERNEL);
> > break;
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > Index: linux-2.6.23-rc1/drivers/acpi/processor_core.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/processor_core.c
> > +++ linux-2.6.23-rc1/drivers/acpi/processor_core.c
> > @@ -693,15 +693,16 @@ static void acpi_processor_notify(acpi_h
> > case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
> > acpi_processor_ppc_has_changed(pr);
> > acpi_bus_generate_event(device, event,
> > -
> pr->performance_platform_limit);
> > +
> pr->performance_platform_limit,
> > + GFP_KERNEL);
> > break;
> > case ACPI_PROCESSOR_NOTIFY_POWER:
> > acpi_processor_cst_has_changed(pr);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> > case ACPI_PROCESSOR_NOTIFY_THROTTLING:
> > acpi_processor_tstate_has_changed(pr);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > "Unsupported event [0x%x]\n",
> event));
> > Index: linux-2.6.23-rc1/drivers/acpi/sbs.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/sbs.c
> > +++ linux-2.6.23-rc1/drivers/acpi/sbs.c
> > @@ -434,7 +434,7 @@ static int acpi_sbs_generate_event(struc
> > strcpy(acpi_device_bid(device), bid);
> > strcpy(acpi_device_class(device), class);
> >
> > - result = acpi_bus_generate_event(device, event, state);
> > + result = acpi_bus_generate_event(device, event, state,
> GFP_KERNEL);
> >
> > strcpy(acpi_device_bid(device), bid_saved);
> > strcpy(acpi_device_class(device), class_saved);
> > Index: linux-2.6.23-rc1/drivers/acpi/thermal.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/thermal.c
> > +++ linux-2.6.23-rc1/drivers/acpi/thermal.c
> > @@ -434,7 +434,7 @@ static int acpi_thermal_critical(struct
> > "Critical temperature reached (%ld C), shutting
> down.\n",
> > KELVIN_TO_CELSIUS(tz->temperature));
> > acpi_bus_generate_event(tz->device,
> ACPI_THERMAL_NOTIFY_CRITICAL,
> > - tz->trips.critical.flags.enabled);
> > + tz->trips.critical.flags.enabled,
> GFP_KERNEL);
> >
> > orderly_poweroff(true);
> >
> > @@ -453,7 +453,7 @@ static int acpi_thermal_hot(struct acpi_
> > tz->trips.hot.flags.enabled = 0;
> >
> > acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
> > - tz->trips.hot.flags.enabled);
> > + tz->trips.hot.flags.enabled,
> GFP_KERNEL);
> >
> > /* TBD: Call user-mode "sleep(S4)" function */
> >
> > @@ -1095,12 +1095,12 @@ static void acpi_thermal_notify(acpi_han
> > case ACPI_THERMAL_NOTIFY_THRESHOLDS:
> > acpi_thermal_get_trip_points(tz);
> > acpi_thermal_check(tz);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > 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_event(device, event, 0, GFP_KERNEL);
> > break;
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > Index: linux-2.6.23-rc1/drivers/acpi/video.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/acpi/video.c
> > +++ linux-2.6.23-rc1/drivers/acpi/video.c
> > @@ -1769,7 +1769,7 @@ static void acpi_video_bus_notify(acpi_h
> > switch (event) {
> > case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
> > * most likely via hotkey. */
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> >
> > case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed
> a video
> > @@ -1777,14 +1777,14 @@ static void acpi_video_bus_notify(acpi_h
> > acpi_video_device_enumerate(video);
> > acpi_video_device_rebind(video);
> > acpi_video_switch_output(video, event);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> >
> > case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey
> pressed. */
> > case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output
> hotkey pressed. */
> > case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display
> output hotkey pressed. */
> > acpi_video_switch_output(video, event);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> >
> > default:
> > @@ -1809,7 +1809,7 @@ static void acpi_video_device_notify(acp
> > switch (event) {
> > case ACPI_VIDEO_NOTIFY_SWITCH: /* change in status (cycle
> output device) */
> > case ACPI_VIDEO_NOTIFY_PROBE: /* change in status (output
> device status) */
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> > case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle
> brightness */
> > case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness
> */
> > @@ -1817,7 +1817,7 @@ static void acpi_video_device_notify(acp
> > case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
> > case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off
> */
> > acpi_video_switch_brightness(video_device, event);
> > - acpi_bus_generate_event(device, event, 0);
> > + acpi_bus_generate_event(device, event, 0, GFP_KERNEL);
> > break;
> > default:
> > ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> > Index: linux-2.6.23-rc1/drivers/char/sonypi.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/char/sonypi.c
> > +++ linux-2.6.23-rc1/drivers/char/sonypi.c
> > @@ -875,7 +875,8 @@ found:
> >
> > #ifdef CONFIG_ACPI
> > if (sonypi_acpi_device)
> > - acpi_bus_generate_event(sonypi_acpi_device, 1, event);
> > + acpi_bus_generate_event(sonypi_acpi_device, 1,
> > + event, GFP_ATOMIC);
> > #endif
> >
> > kfifo_put(sonypi_device.fifo, (unsigned char *)&event,
> sizeof(event));
> > Index: linux-2.6.23-rc1/drivers/misc/sony-laptop.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/misc/sony-laptop.c
> > +++ linux-2.6.23-rc1/drivers/misc/sony-laptop.c
> > @@ -904,7 +904,7 @@ static void sony_acpi_notify(acpi_handle
> >
> > dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
> > sony_laptop_report_input_event(ev);
> > - acpi_bus_generate_event(sony_nc_acpi_device, 1, ev);
> > + acpi_bus_generate_event(sony_nc_acpi_device, 1, ev,
> GFP_KERNEL);
> > }
> >
> > static acpi_status sony_walk_callback(acpi_handle handle, u32
> level,
> > @@ -2275,7 +2275,7 @@ static irqreturn_t sony_pic_irq(int irq,
> >
> > found:
> > sony_laptop_report_input_event(device_event);
> > - acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event);
> > + acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event,
> GFP_ATOMIC);
> > sonypi_compat_report_event(device_event);
> >
> > return IRQ_HANDLED;
> > Index: linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/misc/thinkpad_acpi.c
> > +++ linux-2.6.23-rc1/drivers/misc/thinkpad_acpi.c
> > @@ -1189,10 +1189,12 @@ static void hotkey_notify(struct ibm_str
> > }
> >
> > if (sendacpi)
> > - acpi_bus_generate_event(ibm->acpi->device,
> event, hkey);
> > + acpi_bus_generate_event(ibm->acpi->device,
> event, hkey,
> > + GFP_KERNEL);
> > } else {
> > printk(IBM_ERR "unknown hotkey notification event %d
> \n", event);
> > - acpi_bus_generate_event(ibm->acpi->device, event, 0);
> > + acpi_bus_generate_event(ibm->acpi->device, event, 0,
> > + GFP_KERNEL);
> > }
> > }
> >
> > @@ -2152,19 +2154,25 @@ static void dock_notify(struct ibm_struc
> > int pci = ibm->acpi->hid && strstr(ibm->acpi->hid,
> PCI_ROOT_HID_STRING);
> >
> > if (event == 1 && !pci) /* 570 */
> > - acpi_bus_generate_event(ibm->acpi->device, event,
> 1); /* button */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 1, GFP_KERNEL); /* button */
> > else if (event == 1 && pci) /* 570 */
> > - acpi_bus_generate_event(ibm->acpi->device, event,
> 3); /* dock */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 3, GFP_KERNEL); /* dock */
> > else if (event == 3 && docked)
> > - acpi_bus_generate_event(ibm->acpi->device, event,
> 1); /* button */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 1, GFP_KERNEL); /* button */
> > else if (event == 3 && !docked)
> > - acpi_bus_generate_event(ibm->acpi->device, event,
> 2); /* undock */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 2, GFP_KERNEL); /* undock */
> > else if (event == 0 && docked)
> > - acpi_bus_generate_event(ibm->acpi->device, event,
> 3); /* dock */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 3, GFP_KERNEL); /* 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 */
> > + acpi_bus_generate_event(ibm->acpi->device, event,
> > + 0, GFP_KERNEL); /* unknown */
> > }
> > }
> >
> > @@ -2263,7 +2271,7 @@ 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_event(ibm->acpi->device, event, 0,
> GFP_KERNEL);
> > }
> >
> > #define bay_occupied(b) (_sta(b##_handle) & 1)
> > Index: linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/pci/hotplug/acpiphp_ibm.c
> > +++ linux-2.6.23-rc1/drivers/pci/hotplug/acpiphp_ibm.c
> > @@ -267,7 +267,8 @@ 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_event(note->device, note->event,
> > + detail, GFP_KERNEL);
> > } else
> > note->event = event;
> > }
> > Index: linux-2.6.23-rc1/drivers/misc/asus-laptop.c
> > ===================================================================
> > --- linux-2.6.23-rc1.orig/drivers/misc/asus-laptop.c
> > +++ linux-2.6.23-rc1/drivers/misc/asus-laptop.c
> > @@ -728,7 +728,7 @@ static void asus_hotk_notify(acpi_handle
> > }
> >
> > acpi_bus_generate_event(hotk->device, event,
> > - hotk->event_count[event % 128]++);
> > + hotk->event_count[event % 128]++,
> GFP_KERNEL);
> >
> > return;
> > }
> > -
> > 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] 5+ messages in thread
* Re: [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC
2007-08-16 4:06 ` Zhang Rui
@ 2007-08-16 11:30 ` Mattia Dongili
0 siblings, 0 replies; 5+ messages in thread
From: Mattia Dongili @ 2007-08-16 11:30 UTC (permalink / raw)
To: Zhang Rui; +Cc: Len Brown, linux-acpi, rjw
On Thu, Aug 16, 2007 at 12:06:18PM +0800, Zhang Rui wrote:
> On Thu, 2007-08-16 at 11:36 +0800, Len Brown wrote:
> > On Tuesday 31 July 2007 19:00, Zhang Rui wrote:
> > > Use GFP_KERNEL instead of GFP_ATOMIC.
> > >
> > > GFP_ATOMIC is still needed by the sonypi and sony-laptop driver.
> >
> > Why?
> > Sony can't events from user-context like everybody else does?
> Mattia has the plan to do this. But it won't be finished recently.
Hopefully I'll be able to get some more spare time in the next week or
two.
--
mattia
:wq!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-08-16 11:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 23:00 [PATCH] [-mm] ACPI: use GFP_KERNEL instead of GFP_ATOMIC Zhang Rui
2007-07-31 13:33 ` Rafael J. Wysocki
2007-08-16 3:36 ` Len Brown
2007-08-16 4:06 ` Zhang Rui
2007-08-16 11:30 ` Mattia Dongili
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.