* [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 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
* 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.