Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
da547d77
Commit
da547d77
authored
Aug 20, 2006
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge trivial low-risk suspend hotkey bugzilla-5918 into release
parents
ef7d1b24
5b9c9bf6
df6fd319
4e6e6504
5672bde6
16a74744
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
229 additions
and
179 deletions
+229
-179
MAINTAINERS
MAINTAINERS
+6
-0
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/boot.c
+1
-1
arch/i386/kernel/acpi/wakeup.S
arch/i386/kernel/acpi/wakeup.S
+4
-1
arch/ia64/kernel/acpi.c
arch/ia64/kernel/acpi.c
+1
-1
drivers/acpi/ac.c
drivers/acpi/ac.c
+2
-0
drivers/acpi/acpi_memhotplug.c
drivers/acpi/acpi_memhotplug.c
+2
-6
drivers/acpi/battery.c
drivers/acpi/battery.c
+3
-0
drivers/acpi/bus.c
drivers/acpi/bus.c
+8
-3
drivers/acpi/hotkey.c
drivers/acpi/hotkey.c
+119
-162
drivers/acpi/i2c_ec.c
drivers/acpi/i2c_ec.c
+1
-1
drivers/acpi/osl.c
drivers/acpi/osl.c
+10
-0
drivers/acpi/sbs.c
drivers/acpi/sbs.c
+3
-0
drivers/acpi/scan.c
drivers/acpi/scan.c
+10
-2
drivers/acpi/utils.c
drivers/acpi/utils.c
+1
-1
drivers/pci/hotplug/Kconfig
drivers/pci/hotplug/Kconfig
+1
-1
drivers/pci/quirks.c
drivers/pci/quirks.c
+57
-0
No files found.
MAINTAINERS
View file @
da547d77
...
...
@@ -889,6 +889,12 @@ M: rdunlap@xenotime.net
T: git http://tali.admingilde.org/git/linux-docbook.git
S: Maintained
DOCKING STATION DRIVER
P: Kristen Carlson Accardi
M: kristen.c.accardi@intel.com
L: linux-acpi@vger.kernel.org
S: Maintained
DOUBLETALK DRIVER
P: James R. Van Zandt
M: jrv@vanzandt.mv.com
...
...
arch/i386/kernel/acpi/boot.c
View file @
da547d77
...
...
@@ -59,7 +59,7 @@ static inline int gsi_irq_sharing(int gsi) { return gsi; }
#define BAD_MADT_ENTRY(entry, end) ( \
(!entry) || (unsigned long)entry + sizeof(*entry) > end || \
((acpi_table_entry_header *)entry)->length
!=
sizeof(*entry))
((acpi_table_entry_header *)entry)->length
<
sizeof(*entry))
#define PREFIX "ACPI: "
...
...
arch/i386/kernel/acpi/wakeup.S
View file @
da547d77
...
...
@@ -292,7 +292,10 @@ ENTRY(do_suspend_lowlevel)
pushl
$
3
call
acpi_enter_sleep_state
addl
$
4
,
%
esp
ret
#
In
case
of
S3
failure
,
we
'll emerge here. Jump
#
to
ret_point
to
recover
jmp
ret_point
.
p2align
4
,,
7
ret_point
:
call
restore_registers
...
...
arch/ia64/kernel/acpi.c
View file @
da547d77
...
...
@@ -55,7 +55,7 @@
#define BAD_MADT_ENTRY(entry, end) ( \
(!entry) || (unsigned long)entry + sizeof(*entry) > end || \
((acpi_table_entry_header *)entry)->length
!=
sizeof(*entry))
((acpi_table_entry_header *)entry)->length
<
sizeof(*entry))
#define PREFIX "ACPI: "
...
...
drivers/acpi/ac.c
View file @
da547d77
...
...
@@ -285,6 +285,8 @@ static int __init acpi_ac_init(void)
{
int
result
;
if
(
acpi_disabled
)
return
-
ENODEV
;
acpi_ac_dir
=
acpi_lock_ac_dir
();
if
(
!
acpi_ac_dir
)
...
...
drivers/acpi/acpi_memhotplug.c
View file @
da547d77
...
...
@@ -484,10 +484,8 @@ acpi_memory_register_notify_handler(acpi_handle handle,
status
=
is_memory_device
(
handle
);
if
(
ACPI_FAILURE
(
status
)){
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"handle is no memory device"
));
if
(
ACPI_FAILURE
(
status
))
return
AE_OK
;
/* continue */
}
status
=
acpi_install_notify_handler
(
handle
,
ACPI_SYSTEM_NOTIFY
,
acpi_memory_device_notify
,
NULL
);
...
...
@@ -503,10 +501,8 @@ acpi_memory_deregister_notify_handler(acpi_handle handle,
status
=
is_memory_device
(
handle
);
if
(
ACPI_FAILURE
(
status
)){
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"handle is no memory device"
));
if
(
ACPI_FAILURE
(
status
))
return
AE_OK
;
/* continue */
}
status
=
acpi_remove_notify_handler
(
handle
,
ACPI_SYSTEM_NOTIFY
,
...
...
drivers/acpi/battery.c
View file @
da547d77
...
...
@@ -757,6 +757,9 @@ static int __init acpi_battery_init(void)
{
int
result
;
if
(
acpi_disabled
)
return
-
ENODEV
;
acpi_battery_dir
=
acpi_lock_battery_dir
();
if
(
!
acpi_battery_dir
)
return
-
ENODEV
;
...
...
drivers/acpi/bus.c
View file @
da547d77
...
...
@@ -25,6 +25,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/sched.h>
#include <linux/pm.h>
...
...
@@ -68,7 +69,8 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
status
=
acpi_get_data
(
handle
,
acpi_bus_data_handler
,
(
void
**
)
device
);
if
(
ACPI_FAILURE
(
status
)
||
!*
device
)
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"No context for object [%p]"
,
handle
));
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"No context for object [%p]
\n
"
,
handle
));
return
-
ENODEV
;
}
...
...
@@ -192,7 +194,7 @@ int acpi_bus_set_power(acpi_handle handle, int state)
/* Make sure this is a valid target state */
if
(
!
device
->
flags
.
power_manageable
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Device `[%s]' is not power manageable"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Device `[%s]' is not power manageable
\n
"
,
device
->
kobj
.
name
));
return
-
ENODEV
;
}
...
...
@@ -738,7 +740,10 @@ static int __init acpi_init(void)
return
-
ENODEV
;
}
firmware_register
(
&
acpi_subsys
);
result
=
firmware_register
(
&
acpi_subsys
);
if
(
result
<
0
)
printk
(
KERN_WARNING
"%s: firmware_register error: %d
\n
"
,
__FUNCTION__
,
result
);
result
=
acpi_bus_init
();
...
...
drivers/acpi/hotkey.c
View file @
da547d77
...
...
@@ -91,6 +91,14 @@ enum {
HK_EVENT_ENTERRING_S5
,
};
enum
conf_entry_enum
{
bus_handle
=
0
,
bus_method
=
1
,
action_handle
=
2
,
method
=
3
,
LAST_CONF_ENTRY
};
/* procdir we use */
static
struct
proc_dir_entry
*
hotkey_proc_dir
;
static
struct
proc_dir_entry
*
hotkey_config
;
...
...
@@ -244,19 +252,15 @@ static int hotkey_info_open_fs(struct inode *inode, struct file *file)
static
char
*
format_result
(
union
acpi_object
*
object
)
{
char
*
buf
=
NULL
;
buf
=
(
char
*
)
kmalloc
(
RESULT_STR_LEN
,
GFP_KERNEL
);
if
(
buf
)
memset
(
buf
,
0
,
RESULT_STR_LEN
);
else
goto
do_fail
;
char
*
buf
;
buf
=
kzalloc
(
RESULT_STR_LEN
,
GFP_KERNEL
);
if
(
!
buf
)
return
NULL
;
/* Now, just support integer type */
if
(
object
->
type
==
ACPI_TYPE_INTEGER
)
sprintf
(
buf
,
"%d
\n
"
,
(
u32
)
object
->
integer
.
value
);
do_fail:
return
(
buf
);
return
buf
;
}
static
int
hotkey_polling_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
...
...
@@ -486,98 +490,102 @@ static void free_hotkey_device(union acpi_hotkey *key)
static
void
free_hotkey_buffer
(
union
acpi_hotkey
*
key
)
{
/* key would never be null, action method could be */
kfree
(
key
->
event_hotkey
.
action_method
);
}
static
void
free_poll_hotkey_buffer
(
union
acpi_hotkey
*
key
)
{
/* key would never be null, others could be*/
kfree
(
key
->
poll_hotkey
.
action_method
);
kfree
(
key
->
poll_hotkey
.
poll_method
);
kfree
(
key
->
poll_hotkey
.
poll_result
);
}
static
int
init_hotkey_device
(
union
acpi_hotkey
*
key
,
char
*
bus_str
,
char
*
action_str
,
char
*
method
,
int
std_num
,
int
external_num
)
init_hotkey_device
(
union
acpi_hotkey
*
key
,
char
*
*
config_entry
,
int
std_num
,
int
external_num
)
{
acpi_handle
tmp_handle
;
acpi_status
status
=
AE_OK
;
if
(
std_num
<
0
||
IS_POLL
(
std_num
)
||
!
key
)
goto
do_fail
;
if
(
!
bus_str
||
!
action_str
||
!
method
)
if
(
!
config_entry
[
bus_handle
]
||
!
config_entry
[
action_handle
]
||
!
config_entry
[
method
])
goto
do_fail
;
key
->
link
.
hotkey_type
=
ACPI_HOTKEY_EVENT
;
key
->
link
.
hotkey_standard_num
=
std_num
;
key
->
event_hotkey
.
flag
=
0
;
key
->
event_hotkey
.
action_method
=
method
;
key
->
event_hotkey
.
action_method
=
config_entry
[
method
]
;
status
=
acpi_get_handle
(
NULL
,
bus_str
,
&
(
key
->
event_hotkey
.
bus_handle
));
status
=
acpi_get_handle
(
NULL
,
config_entry
[
bus_handle
],
&
(
key
->
event_hotkey
.
bus_handle
));
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
key
->
event_hotkey
.
external_hotkey_num
=
external_num
;
status
=
acpi_get_handle
(
NULL
,
action_str
,
status
=
acpi_get_handle
(
NULL
,
config_entry
[
action_handle
],
&
(
key
->
event_hotkey
.
action_handle
));
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
status
=
acpi_get_handle
(
key
->
event_hotkey
.
action_handle
,
method
,
&
tmp_handle
);
config_entry
[
method
]
,
&
tmp_handle
);
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
return
AE_OK
;
do_fail:
do_fail_zero:
key
->
event_hotkey
.
action_method
=
NULL
;
do_fail:
return
-
ENODEV
;
}
static
int
init_poll_hotkey_device
(
union
acpi_hotkey
*
key
,
char
*
poll_str
,
char
*
poll_method
,
char
*
action_str
,
char
*
action_method
,
int
std_num
)
init_poll_hotkey_device
(
union
acpi_hotkey
*
key
,
char
**
config_entry
,
int
std_num
)
{
acpi_status
status
=
AE_OK
;
acpi_handle
tmp_handle
;
if
(
std_num
<
0
||
IS_EVENT
(
std_num
)
||
!
key
)
goto
do_fail
;
if
(
!
poll_str
||
!
poll_method
||
!
action_str
||
!
action_method
)
if
(
!
config_entry
[
bus_handle
]
||!
config_entry
[
bus_method
]
||
!
config_entry
[
action_handle
]
||
!
config_entry
[
method
]
)
goto
do_fail
;
key
->
link
.
hotkey_type
=
ACPI_HOTKEY_POLLING
;
key
->
link
.
hotkey_standard_num
=
std_num
;
key
->
poll_hotkey
.
flag
=
0
;
key
->
poll_hotkey
.
poll_method
=
poll_method
;
key
->
poll_hotkey
.
action_method
=
action_method
;
key
->
poll_hotkey
.
poll_method
=
config_entry
[
bus_method
]
;
key
->
poll_hotkey
.
action_method
=
config_entry
[
method
]
;
status
=
acpi_get_handle
(
NULL
,
poll_str
,
&
(
key
->
poll_hotkey
.
poll_handle
));
status
=
acpi_get_handle
(
NULL
,
config_entry
[
bus_handle
],
&
(
key
->
poll_hotkey
.
poll_handle
));
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
status
=
acpi_get_handle
(
key
->
poll_hotkey
.
poll_handle
,
poll_method
,
&
tmp_handle
);
config_entry
[
bus_method
]
,
&
tmp_handle
);
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
status
=
acpi_get_handle
(
NULL
,
action_str
,
acpi_get_handle
(
NULL
,
config_entry
[
action_handle
]
,
&
(
key
->
poll_hotkey
.
action_handle
));
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
status
=
acpi_get_handle
(
key
->
poll_hotkey
.
action_handle
,
action_method
,
&
tmp_handle
);
config_entry
[
method
]
,
&
tmp_handle
);
if
(
ACPI_FAILURE
(
status
))
goto
do_fail
;
goto
do_fail
_zero
;
key
->
poll_hotkey
.
poll_result
=
(
union
acpi_object
*
)
kmalloc
(
sizeof
(
union
acpi_object
),
GFP_KERNEL
);
if
(
!
key
->
poll_hotkey
.
poll_result
)
goto
do_fail
;
goto
do_fail
_zero
;
return
AE_OK
;
do_fail:
do_fail_zero:
key
->
poll_hotkey
.
poll_method
=
NULL
;
key
->
poll_hotkey
.
action_method
=
NULL
;
do_fail:
return
-
ENODEV
;
}
...
...
@@ -652,17 +660,18 @@ static int hotkey_poll_config_seq_show(struct seq_file *seq, void *offset)
}
static
int
get_parms
(
char
*
config_record
,
int
*
cmd
,
char
**
bus_handle
,
char
**
bus_method
,
char
**
action_handle
,
char
**
method
,
int
*
internal_event_num
,
int
*
external_event_num
)
get_parms
(
char
*
config_record
,
int
*
cmd
,
char
**
config_entry
,
int
*
internal_event_num
,
int
*
external_event_num
)
{
/* the format of *config_record =
* "1:\d+:*" : "cmd:internal_event_num"
* "\d+:\w+:\w+:\w+:\w+:\d+:\d+" :
* "cmd:bus_handle:bus_method:action_handle:method:internal_event_num:external_event_num"
*/
char
*
tmp
,
*
tmp1
,
count
;
int
i
;
sscanf
(
config_record
,
"%d"
,
cmd
);
if
(
*
cmd
==
1
)
{
if
(
sscanf
(
config_record
,
"%d:%d"
,
cmd
,
internal_event_num
)
!=
2
)
...
...
@@ -674,59 +683,27 @@ get_parms(char *config_record,
if
(
!
tmp
)
goto
do_fail
;
tmp
++
;
tmp1
=
strchr
(
tmp
,
':'
);
if
(
!
tmp1
)
goto
do_fail
;
count
=
tmp1
-
tmp
;
*
bus_handle
=
(
char
*
)
kmalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!*
bus_handle
)
goto
do_fail
;
strncpy
(
*
bus_handle
,
tmp
,
count
);
*
(
*
bus_handle
+
count
)
=
0
;
tmp
=
tmp1
;
tmp
++
;
tmp1
=
strchr
(
tmp
,
':'
);
if
(
!
tmp1
)
goto
do_fail
;
count
=
tmp1
-
tmp
;
*
bus_method
=
(
char
*
)
kmalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!*
bus_method
)
goto
do_fail
;
strncpy
(
*
bus_method
,
tmp
,
count
);
*
(
*
bus_method
+
count
)
=
0
;
tmp
=
tmp1
;
tmp
++
;
tmp1
=
strchr
(
tmp
,
':'
);
if
(
!
tmp1
)
goto
do_fail
;
count
=
tmp1
-
tmp
;
*
action_handle
=
(
char
*
)
kmalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!*
action_handle
)
goto
do_fail
;
strncpy
(
*
action_handle
,
tmp
,
count
);
*
(
*
action_handle
+
count
)
=
0
;
tmp
=
tmp1
;
tmp
++
;
tmp1
=
strchr
(
tmp
,
':'
);
if
(
!
tmp1
)
goto
do_fail
;
count
=
tmp1
-
tmp
;
*
method
=
(
char
*
)
kmalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!*
method
)
goto
do_fail
;
strncpy
(
*
method
,
tmp
,
count
);
*
(
*
method
+
count
)
=
0
;
if
(
sscanf
(
tmp1
+
1
,
"%d:%d"
,
internal_event_num
,
external_event_num
)
<=
0
)
goto
do_fail
;
return
6
;
do_fail:
for
(
i
=
0
;
i
<
LAST_CONF_ENTRY
;
i
++
)
{
tmp1
=
strchr
(
tmp
,
':'
);
if
(
!
tmp1
)
{
goto
do_fail
;
}
count
=
tmp1
-
tmp
;
config_entry
[
i
]
=
kzalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!
config_entry
[
i
])
goto
handle_failure
;
strncpy
(
config_entry
[
i
],
tmp
,
count
);
tmp
=
tmp1
+
1
;
}
if
(
sscanf
(
tmp
,
"%d:%d"
,
internal_event_num
,
external_event_num
)
<=
0
)
goto
handle_failure
;
if
(
!
IS_OTHERS
(
*
internal_event_num
))
{
return
6
;
}
handle_failure:
while
(
i
--
>
0
)
kfree
(
config_entry
[
i
]);
do_fail:
return
-
1
;
}
...
...
@@ -736,50 +713,34 @@ static ssize_t hotkey_write_config(struct file *file,
size_t
count
,
loff_t
*
data
)
{
char
*
config_record
=
NULL
;
char
*
bus_handle
=
NULL
;
char
*
bus_method
=
NULL
;
char
*
action_handle
=
NULL
;
char
*
method
=
NULL
;
char
*
config_entry
[
LAST_CONF_ENTRY
];
int
cmd
,
internal_event_num
,
external_event_num
;
int
ret
=
0
;
union
acpi_hotkey
*
key
=
NULL
;
union
acpi_hotkey
*
key
=
kzalloc
(
sizeof
(
union
acpi_hotkey
),
GFP_KERNEL
)
;
if
(
!
key
)
return
-
ENOMEM
;
config_record
=
(
char
*
)
kmalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!
config_record
)
config_record
=
kzalloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!
config_record
)
{
kfree
(
key
);
return
-
ENOMEM
;
}
if
(
copy_from_user
(
config_record
,
buffer
,
count
))
{
kfree
(
config_record
);
kfree
(
key
);
printk
(
KERN_ERR
PREFIX
"Invalid data
\n
"
);
return
-
EINVAL
;
}
config_record
[
count
]
=
0
;
ret
=
get_parms
(
config_record
,
&
cmd
,
&
bus_handle
,
&
bus_method
,
&
action_handle
,
&
method
,
&
internal_event_num
,
&
external_event_num
);
ret
=
get_parms
(
config_record
,
&
cmd
,
config_entry
,
&
internal_event_num
,
&
external_event_num
);
kfree
(
config_record
);
if
(
IS_OTHERS
(
internal_event_num
))
goto
do_fail
;
if
(
ret
!=
6
)
{
do_fail:
kfree
(
bus_handle
);
kfree
(
bus_method
);
kfree
(
action_handle
);
kfree
(
method
);
printk
(
KERN_ERR
PREFIX
"Invalid data format ret=%d
\n
"
,
ret
);
return
-
EINVAL
;
}
key
=
kmalloc
(
sizeof
(
union
acpi_hotkey
),
GFP_KERNEL
);
if
(
!
key
)
goto
do_fail
;
memset
(
key
,
0
,
sizeof
(
union
acpi_hotkey
));
if
(
cmd
==
1
)
{
union
acpi_hotkey
*
tmp
=
NULL
;
tmp
=
get_hotkey_by_event
(
&
global_hotkey_list
,
...
...
@@ -791,34 +752,19 @@ static ssize_t hotkey_write_config(struct file *file,
goto
cont_cmd
;
}
if
(
IS_EVENT
(
internal_event_num
))
{
kfree
(
bus_method
);
ret
=
init_hotkey_device
(
key
,
bus_handle
,
action_handle
,
method
,
internal_event_num
,
external_event_num
);
}
else
ret
=
init_poll_hotkey_device
(
key
,
bus_handle
,
bus_method
,
action_handle
,
method
,
internal_event_num
);
if
(
ret
)
{
kfree
(
bus_handle
);
kfree
(
action_handle
);
if
(
IS_EVENT
(
internal_event_num
))
free_hotkey_buffer
(
key
);
else
free_poll_hotkey_buffer
(
key
);
kfree
(
key
);
printk
(
KERN_ERR
PREFIX
"Invalid hotkey
\n
"
);
return
-
EINVAL
;
if
(
init_hotkey_device
(
key
,
config_entry
,
internal_event_num
,
external_event_num
))
goto
init_hotkey_fail
;
}
else
{
if
(
init_poll_hotkey_device
(
key
,
config_entry
,
internal_event_num
))
goto
init_poll_hotkey_fail
;
}
cont_cmd:
kfree
(
bus_handle
);
kfree
(
action_handle
);
cont_cmd:
switch
(
cmd
)
{
case
0
:
if
(
get_hotkey_by_event
(
&
global_hotkey_list
,
key
->
link
.
hotkey_standard_num
))
if
(
get_hotkey_by_event
(
&
global_hotkey_list
,
key
->
link
.
hotkey_standard_num
))
goto
fail_out
;
else
hotkey_add
(
key
);
...
...
@@ -827,6 +773,7 @@ static ssize_t hotkey_write_config(struct file *file,
hotkey_remove
(
key
);
break
;
case
2
:
/* key is kfree()ed if matched*/
if
(
hotkey_update
(
key
))
goto
fail_out
;
break
;
...
...
@@ -835,11 +782,22 @@ static ssize_t hotkey_write_config(struct file *file,
break
;
}
return
count
;
fail_out:
if
(
IS_EVENT
(
internal_event_num
))
free_hotkey_buffer
(
key
);
else
free_poll_hotkey_buffer
(
key
);
init_poll_hotkey_fail:
/* failed init_poll_hotkey_device */
kfree
(
config_entry
[
bus_method
]);
config_entry
[
bus_method
]
=
NULL
;
init_hotkey_fail:
/* failed init_hotkey_device */
kfree
(
config_entry
[
method
]);
fail_out:
kfree
(
config_entry
[
bus_handle
]);
kfree
(
config_entry
[
action_handle
]);
/* No double free since elements =NULL for error cases */
if
(
IS_EVENT
(
internal_event_num
))
{
if
(
config_entry
[
bus_method
])
kfree
(
config_entry
[
bus_method
]);
free_hotkey_buffer
(
key
);
/* frees [method] */
}
else
free_poll_hotkey_buffer
(
key
);
/* frees [bus_method]+[method] */
kfree
(
key
);
printk
(
KERN_ERR
PREFIX
"invalid key
\n
"
);
return
-
EINVAL
;
...
...
@@ -923,10 +881,9 @@ static ssize_t hotkey_execute_aml_method(struct file *file,
union
acpi_hotkey
*
key
;
arg
=
(
char
*
)
km
alloc
(
count
+
1
,
GFP_KERNEL
);
arg
=
kz
alloc
(
count
+
1
,
GFP_KERNEL
);
if
(
!
arg
)
return
-
ENOMEM
;
arg
[
count
]
=
0
;
if
(
copy_from_user
(
arg
,
buffer
,
count
))
{
kfree
(
arg
);
...
...
drivers/acpi/i2c_ec.c
View file @
da547d77
...
...
@@ -330,7 +330,7 @@ static int acpi_ec_hc_add(struct acpi_device *device)
status
=
acpi_evaluate_integer
(
ec_hc
->
handle
,
"_EC"
,
NULL
,
&
val
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Error obtaining _EC
\n
"
));
kfree
(
ec_hc
->
smbus
);
kfree
(
ec_hc
);
kfree
(
smbus
);
return
-
EIO
;
}
...
...
drivers/acpi/osl.c
View file @
da547d77
...
...
@@ -746,6 +746,16 @@ acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
ACPI_DEBUG_PRINT
((
ACPI_DB_MUTEX
,
"Waiting for semaphore[%p|%d|%d]
\n
"
,
handle
,
units
,
timeout
));
/*
* This can be called during resume with interrupts off.
* Like boot-time, we should be single threaded and will
* always get the lock if we try -- timeout or not.
* If this doesn't succeed, then we will oops courtesy of
* might_sleep() in down().
*/
if
(
!
down_trylock
(
sem
))
return
AE_OK
;
switch
(
timeout
)
{
/*
* No Wait:
...
...
drivers/acpi/sbs.c
View file @
da547d77
...
...
@@ -1714,6 +1714,9 @@ static int __init acpi_sbs_init(void)
{
int
result
=
0
;
if
(
acpi_disabled
)
return
-
ENODEV
;
init_MUTEX
(
&
sbs_sem
);
if
(
capacity_mode
!=
DEF_CAPACITY_UNIT
...
...
drivers/acpi/scan.c
View file @
da547d77
...
...
@@ -4,6 +4,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/acpi.h>
#include <acpi/acpi_drivers.h>
...
...
@@ -113,6 +114,8 @@ static struct kset acpi_namespace_kset = {
static
void
acpi_device_register
(
struct
acpi_device
*
device
,
struct
acpi_device
*
parent
)
{
int
err
;
/*
* Linkage
* -------
...
...
@@ -138,7 +141,10 @@ static void acpi_device_register(struct acpi_device *device,
device
->
kobj
.
parent
=
&
parent
->
kobj
;
device
->
kobj
.
ktype
=
&
ktype_acpi_ns
;
device
->
kobj
.
kset
=
&
acpi_namespace_kset
;
kobject_register
(
&
device
->
kobj
);
err
=
kobject_register
(
&
device
->
kobj
);
if
(
err
<
0
)
printk
(
KERN_WARNING
"%s: kobject_register error: %d
\n
"
,
__FUNCTION__
,
err
);
create_sysfs_device_files
(
device
);
}
...
...
@@ -1450,7 +1456,9 @@ static int __init acpi_scan_init(void)
if
(
acpi_disabled
)
return
0
;
kset_register
(
&
acpi_namespace_kset
);
result
=
kset_register
(
&
acpi_namespace_kset
);
if
(
result
<
0
)
printk
(
KERN_ERR
PREFIX
"kset_register error: %d
\n
"
,
result
);
result
=
bus_register
(
&
acpi_bus_type
);
if
(
result
)
{
...
...
drivers/acpi/utils.c
View file @
da547d77
...
...
@@ -262,7 +262,7 @@ acpi_evaluate_integer(acpi_handle handle,
if
(
!
data
)
return
AE_BAD_PARAMETER
;
element
=
kmalloc
(
sizeof
(
union
acpi_object
),
GFP_KERNEL
);
element
=
kmalloc
(
sizeof
(
union
acpi_object
),
irqs_disabled
()
?
GFP_ATOMIC
:
GFP_KERNEL
);
if
(
!
element
)
return
AE_NO_MEMORY
;
...
...
drivers/pci/hotplug/Kconfig
View file @
da547d77
...
...
@@ -76,7 +76,7 @@ config HOTPLUG_PCI_IBM
config HOTPLUG_PCI_ACPI
tristate "ACPI PCI Hotplug driver"
depends on
ACPI_DOCK && HOTPLUG_PCI
depends on
(!ACPI_DOCK && ACPI && HOTPLUG_PCI) || (ACPI_DOCK && HOTPLUG_PCI)
help
Say Y here if you have a system that supports PCI Hotplug using
ACPI.
...
...
drivers/pci/quirks.c
View file @
da547d77
...
...
@@ -1518,6 +1518,63 @@ static void __devinit quirk_netmos(struct pci_dev *dev)
}
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_NETMOS
,
PCI_ANY_ID
,
quirk_netmos
);
static
void
__devinit
quirk_e100_interrupt
(
struct
pci_dev
*
dev
)
{
u16
command
;
u32
bar
;
u8
__iomem
*
csr
;
u8
cmd_hi
;
switch
(
dev
->
device
)
{
/* PCI IDs taken from drivers/net/e100.c */
case
0x1029
:
case
0x1030
...
0x1034
:
case
0x1038
...
0x103E
:
case
0x1050
...
0x1057
:
case
0x1059
:
case
0x1064
...
0x106B
:
case
0x1091
...
0x1095
:
case
0x1209
:
case
0x1229
:
case
0x2449
:
case
0x2459
:
case
0x245D
:
case
0x27DC
:
break
;
default:
return
;
}
/*
* Some firmware hands off the e100 with interrupts enabled,
* which can cause a flood of interrupts if packets are
* received before the driver attaches to the device. So
* disable all e100 interrupts here. The driver will
* re-enable them when it's ready.
*/
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
command
);
pci_read_config_dword
(
dev
,
PCI_BASE_ADDRESS_0
,
&
bar
);
if
(
!
(
command
&
PCI_COMMAND_MEMORY
)
||
!
bar
)
return
;
csr
=
ioremap
(
bar
,
8
);
if
(
!
csr
)
{
printk
(
KERN_WARNING
"PCI: Can't map %s e100 registers
\n
"
,
pci_name
(
dev
));
return
;
}
cmd_hi
=
readb
(
csr
+
3
);
if
(
cmd_hi
==
0
)
{
printk
(
KERN_WARNING
"PCI: Firmware left %s e100 interrupts "
"enabled, disabling
\n
"
,
pci_name
(
dev
));
writeb
(
1
,
csr
+
3
);
}
iounmap
(
csr
);
}
DECLARE_PCI_FIXUP_EARLY
(
PCI_VENDOR_ID_INTEL
,
PCI_ANY_ID
,
quirk_e100_interrupt
);
static
void
__devinit
fixup_rev1_53c810
(
struct
pci_dev
*
dev
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment