Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
d1badf8d
Commit
d1badf8d
authored
Dec 31, 2013
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'acpi-pci-hotplug' into acpi-hotplug
Conflicts: include/acpi/acpi_bus.h
parents
caa73ea1
f244d8b6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
64 additions
and
8 deletions
+64
-8
drivers/acpi/bus.c
drivers/acpi/bus.c
+10
-0
drivers/gpu/drm/nouveau/nouveau_acpi.c
drivers/gpu/drm/nouveau/nouveau_acpi.c
+14
-2
drivers/gpu/drm/radeon/radeon_atpx_handler.c
drivers/gpu/drm/radeon/radeon_atpx_handler.c
+14
-2
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/acpiphp_glue.c
+23
-3
include/acpi/acpi_bus.h
include/acpi/acpi_bus.h
+3
-1
No files found.
drivers/acpi/bus.c
View file @
d1badf8d
...
...
@@ -149,6 +149,16 @@ int acpi_bus_get_private_data(acpi_handle handle, void **data)
}
EXPORT_SYMBOL
(
acpi_bus_get_private_data
);
void
acpi_bus_no_hotplug
(
acpi_handle
handle
)
{
struct
acpi_device
*
adev
=
NULL
;
acpi_bus_get_device
(
handle
,
&
adev
);
if
(
adev
)
adev
->
flags
.
no_hotplug
=
true
;
}
EXPORT_SYMBOL_GPL
(
acpi_bus_no_hotplug
);
static
void
acpi_print_osc_error
(
acpi_handle
handle
,
struct
acpi_osc_context
*
context
,
char
*
error
)
{
...
...
drivers/gpu/drm/nouveau/nouveau_acpi.c
View file @
d1badf8d
...
...
@@ -46,6 +46,7 @@ static struct nouveau_dsm_priv {
bool
dsm_detected
;
bool
optimus_detected
;
acpi_handle
dhandle
;
acpi_handle
other_handle
;
acpi_handle
rom_handle
;
}
nouveau_dsm_priv
;
...
...
@@ -255,9 +256,10 @@ static int nouveau_dsm_pci_probe(struct pci_dev *pdev)
if
(
!
dhandle
)
return
false
;
if
(
!
acpi_has_method
(
dhandle
,
"_DSM"
))
if
(
!
acpi_has_method
(
dhandle
,
"_DSM"
))
{
nouveau_dsm_priv
.
other_handle
=
dhandle
;
return
false
;
}
if
(
nouveau_test_dsm
(
dhandle
,
nouveau_dsm
,
NOUVEAU_DSM_POWER
))
retval
|=
NOUVEAU_DSM_HAS_MUX
;
...
...
@@ -333,6 +335,16 @@ static bool nouveau_dsm_detect(void)
printk
(
KERN_INFO
"VGA switcheroo: detected DSM switching method %s handle
\n
"
,
acpi_method_name
);
nouveau_dsm_priv
.
dsm_detected
=
true
;
/*
* On some systems hotplug events are generated for the device
* being switched off when _DSM is executed. They cause ACPI
* hotplug to trigger and attempt to remove the device from
* the system, which causes it to break down. Prevent that from
* happening by setting the no_hotplug flag for the involved
* ACPI device objects.
*/
acpi_bus_no_hotplug
(
nouveau_dsm_priv
.
dhandle
);
acpi_bus_no_hotplug
(
nouveau_dsm_priv
.
other_handle
);
ret
=
true
;
}
...
...
drivers/gpu/drm/radeon/radeon_atpx_handler.c
View file @
d1badf8d
...
...
@@ -33,6 +33,7 @@ static struct radeon_atpx_priv {
bool
atpx_detected
;
/* handle for device - and atpx */
acpi_handle
dhandle
;
acpi_handle
other_handle
;
struct
radeon_atpx
atpx
;
}
radeon_atpx_priv
;
...
...
@@ -451,9 +452,10 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
return
false
;
status
=
acpi_get_handle
(
dhandle
,
"ATPX"
,
&
atpx_handle
);
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
{
radeon_atpx_priv
.
other_handle
=
dhandle
;
return
false
;
}
radeon_atpx_priv
.
dhandle
=
dhandle
;
radeon_atpx_priv
.
atpx
.
handle
=
atpx_handle
;
return
true
;
...
...
@@ -530,6 +532,16 @@ static bool radeon_atpx_detect(void)
printk
(
KERN_INFO
"VGA switcheroo: detected switching method %s handle
\n
"
,
acpi_method_name
);
radeon_atpx_priv
.
atpx_detected
=
true
;
/*
* On some systems hotplug events are generated for the device
* being switched off when ATPX is executed. They cause ACPI
* hotplug to trigger and attempt to remove the device from
* the system, which causes it to break down. Prevent that from
* happening by setting the no_hotplug flag for the involved
* ACPI device objects.
*/
acpi_bus_no_hotplug
(
radeon_atpx_priv
.
dhandle
);
acpi_bus_no_hotplug
(
radeon_atpx_priv
.
other_handle
);
return
true
;
}
return
false
;
...
...
drivers/pci/hotplug/acpiphp_glue.c
View file @
d1badf8d
...
...
@@ -645,6 +645,24 @@ static void disable_slot(struct acpiphp_slot *slot)
slot
->
flags
&=
(
~
SLOT_ENABLED
);
}
static
bool
acpiphp_no_hotplug
(
acpi_handle
handle
)
{
struct
acpi_device
*
adev
=
NULL
;
acpi_bus_get_device
(
handle
,
&
adev
);
return
adev
&&
adev
->
flags
.
no_hotplug
;
}
static
bool
slot_no_hotplug
(
struct
acpiphp_slot
*
slot
)
{
struct
acpiphp_func
*
func
;
list_for_each_entry
(
func
,
&
slot
->
funcs
,
sibling
)
if
(
acpiphp_no_hotplug
(
func_to_handle
(
func
)))
return
true
;
return
false
;
}
/**
* get_slot_status - get ACPI slot status
...
...
@@ -703,7 +721,8 @@ static void trim_stale_devices(struct pci_dev *dev)
unsigned
long
long
sta
;
status
=
acpi_evaluate_integer
(
handle
,
"_STA"
,
NULL
,
&
sta
);
alive
=
ACPI_SUCCESS
(
status
)
&&
sta
==
ACPI_STA_ALL
;
alive
=
(
ACPI_SUCCESS
(
status
)
&&
sta
==
ACPI_STA_ALL
)
||
acpiphp_no_hotplug
(
handle
);
}
if
(
!
alive
)
{
u32
v
;
...
...
@@ -743,8 +762,9 @@ static void acpiphp_check_bridge(struct acpiphp_bridge *bridge)
struct
pci_dev
*
dev
,
*
tmp
;
mutex_lock
(
&
slot
->
crit_sect
);
/* wake up all functions */
if
(
get_slot_status
(
slot
)
==
ACPI_STA_ALL
)
{
if
(
slot_no_hotplug
(
slot
))
{
;
/* do nothing */
}
else
if
(
get_slot_status
(
slot
)
==
ACPI_STA_ALL
)
{
/* remove stale devices if any */
list_for_each_entry_safe
(
dev
,
tmp
,
&
bus
->
devices
,
bus_list
)
...
...
include/acpi/acpi_bus.h
View file @
d1badf8d
...
...
@@ -163,7 +163,8 @@ struct acpi_device_flags {
u32
match_driver
:
1
;
u32
initialized
:
1
;
u32
visited
:
1
;
u32
reserved
:
25
;
u32
no_hotplug
:
1
;
u32
reserved
:
24
;
};
/* File System */
...
...
@@ -344,6 +345,7 @@ extern struct kobject *acpi_kobj;
extern
int
acpi_bus_generate_netlink_event
(
const
char
*
,
const
char
*
,
u8
,
int
);
void
acpi_bus_private_data_handler
(
acpi_handle
,
void
*
);
int
acpi_bus_get_private_data
(
acpi_handle
,
void
**
);
void
acpi_bus_no_hotplug
(
acpi_handle
handle
);
extern
int
acpi_notifier_call_chain
(
struct
acpi_device
*
,
u32
,
u32
);
extern
int
register_acpi_notifier
(
struct
notifier_block
*
);
extern
int
unregister_acpi_notifier
(
struct
notifier_block
*
);
...
...
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