Merge branches 'bugzilla-13121+', 'bugzilla-13233', 'redhat-bugzilla-500311', 'pci-bind-oops', 'misc-2.6.30' and 'i7300_idle' into release
此提交包含在:

@@ -116,9 +116,6 @@ int acpi_pci_bind(struct acpi_device *device)
|
||||
struct acpi_pci_data *pdata;
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
acpi_handle handle;
|
||||
struct pci_dev *dev;
|
||||
struct pci_bus *bus;
|
||||
|
||||
|
||||
if (!device || !device->parent)
|
||||
return -EINVAL;
|
||||
@@ -176,20 +173,9 @@ int acpi_pci_bind(struct acpi_device *device)
|
||||
* Locate matching device in PCI namespace. If it doesn't exist
|
||||
* this typically means that the device isn't currently inserted
|
||||
* (e.g. docking station, port replicator, etc.).
|
||||
* We cannot simply search the global pci device list, since
|
||||
* PCI devices are added to the global pci list when the root
|
||||
* bridge start ops are run, which may not have happened yet.
|
||||
*/
|
||||
bus = pci_find_bus(data->id.segment, data->id.bus);
|
||||
if (bus) {
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
if (dev->devfn == PCI_DEVFN(data->id.device,
|
||||
data->id.function)) {
|
||||
data->dev = dev;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->dev = pci_get_slot(pdata->bus,
|
||||
PCI_DEVFN(data->id.device, data->id.function));
|
||||
if (!data->dev) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Device %04x:%02x:%02x.%d not present in PCI namespace\n",
|
||||
@@ -259,9 +245,10 @@ int acpi_pci_bind(struct acpi_device *device)
|
||||
|
||||
end:
|
||||
kfree(buffer.pointer);
|
||||
if (result)
|
||||
if (result) {
|
||||
pci_dev_put(data->dev);
|
||||
kfree(data);
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -303,6 +290,7 @@ static int acpi_pci_unbind(struct acpi_device *device)
|
||||
if (data->dev->subordinate) {
|
||||
acpi_pci_irq_del_prt(data->id.segment, data->bus->number);
|
||||
}
|
||||
pci_dev_put(data->dev);
|
||||
kfree(data);
|
||||
|
||||
end:
|
||||
|
@@ -148,6 +148,9 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
|
||||
if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
|
||||
return;
|
||||
|
||||
if (boot_cpu_has(X86_FEATURE_AMDC1E))
|
||||
type = ACPI_STATE_C1;
|
||||
|
||||
/*
|
||||
* Check, if one of the previous states already marked the lapic
|
||||
* unstable
|
||||
@@ -611,6 +614,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
|
||||
switch (cx->type) {
|
||||
case ACPI_STATE_C1:
|
||||
cx->valid = 1;
|
||||
acpi_timer_check_state(i, pr, cx);
|
||||
break;
|
||||
|
||||
case ACPI_STATE_C2:
|
||||
@@ -830,11 +834,12 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
||||
|
||||
/* Do not access any ACPI IO ports in suspend path */
|
||||
if (acpi_idle_suspend) {
|
||||
acpi_safe_halt();
|
||||
local_irq_enable();
|
||||
cpu_relax();
|
||||
return 0;
|
||||
}
|
||||
|
||||
acpi_state_timer_broadcast(pr, cx, 1);
|
||||
kt1 = ktime_get_real();
|
||||
acpi_idle_do_entry(cx);
|
||||
kt2 = ktime_get_real();
|
||||
@@ -842,6 +847,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
||||
|
||||
local_irq_enable();
|
||||
cx->usage++;
|
||||
acpi_state_timer_broadcast(pr, cx, 0);
|
||||
|
||||
return idle_time;
|
||||
}
|
||||
|
@@ -309,9 +309,15 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
||||
(u32) px->bus_master_latency,
|
||||
(u32) px->control, (u32) px->status));
|
||||
|
||||
if (!px->core_frequency) {
|
||||
printk(KERN_ERR PREFIX
|
||||
"Invalid _PSS data: freq is zero\n");
|
||||
/*
|
||||
* Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq
|
||||
*/
|
||||
if (!px->core_frequency ||
|
||||
((u32)(px->core_frequency * 1000) !=
|
||||
(px->core_frequency * 1000))) {
|
||||
printk(KERN_ERR FW_BUG PREFIX
|
||||
"Invalid BIOS _PSS frequency: 0x%llx MHz\n",
|
||||
px->core_frequency);
|
||||
result = -EFAULT;
|
||||
kfree(pr->performance->states);
|
||||
goto end;
|
||||
|
@@ -840,7 +840,7 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
|
||||
state = acpi_get_throttling_state(pr, value);
|
||||
if (state == -1) {
|
||||
ACPI_WARNING((AE_INFO,
|
||||
"Invalid throttling state, reset\n"));
|
||||
"Invalid throttling state, reset"));
|
||||
state = 0;
|
||||
ret = acpi_processor_set_throttling(pr, state);
|
||||
if (ret)
|
||||
|
@@ -2350,7 +2350,7 @@ static int __init acpi_video_init(void)
|
||||
return acpi_video_register();
|
||||
}
|
||||
|
||||
void __exit acpi_video_exit(void)
|
||||
void acpi_video_exit(void)
|
||||
{
|
||||
|
||||
acpi_bus_unregister_driver(&acpi_video_bus);
|
||||
|
新增問題並參考
封鎖使用者