提交 4a225331 编写于 作者: L Linus Torvalds

Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI: sleep: init_set_sci_en_on_resume for Dell Studio 155x
  ACPI: fix acpi_hest_firmware_first_pci() caused oops
  sbshc: acpi_device_class "smbus_host_controller" too long
  power_meter: acpi_device_class "power_meter_resource" too long
  acpi_pad: "processor_aggregator" name too long
  PNP: don't check for conflicts with bridge windows
  ACPI: DMI init_set_sci_en_on_resume for multiple Lenovo ThinkPads
  PNPACPI: compute Address Space length rather than using _LEN
  ACPI: silence kmemcheck false positive
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h>
#define ACPI_PROCESSOR_AGGREGATOR_CLASS "processor_aggregator" #define ACPI_PROCESSOR_AGGREGATOR_CLASS "acpi_pad"
#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator" #define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"
#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80 #define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80
static DEFINE_MUTEX(isolated_cpus_lock); static DEFINE_MUTEX(isolated_cpus_lock);
......
...@@ -527,7 +527,7 @@ int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, ...@@ -527,7 +527,7 @@ int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id,
if (!event_is_open) if (!event_is_open)
return 0; return 0;
event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC); event = kzalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
if (!event) if (!event)
return -ENOMEM; return -ENOMEM;
......
...@@ -123,6 +123,10 @@ int acpi_hest_firmware_first_pci(struct pci_dev *pci) ...@@ -123,6 +123,10 @@ int acpi_hest_firmware_first_pci(struct pci_dev *pci)
{ {
acpi_status status = AE_NOT_FOUND; acpi_status status = AE_NOT_FOUND;
struct acpi_table_header *hest = NULL; struct acpi_table_header *hest = NULL;
if (acpi_disabled)
return 0;
status = acpi_get_table(ACPI_SIG_HEST, 1, &hest); status = acpi_get_table(ACPI_SIG_HEST, 1, &hest);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
#define ACPI_POWER_METER_NAME "power_meter" #define ACPI_POWER_METER_NAME "power_meter"
ACPI_MODULE_NAME(ACPI_POWER_METER_NAME); ACPI_MODULE_NAME(ACPI_POWER_METER_NAME);
#define ACPI_POWER_METER_DEVICE_NAME "Power Meter" #define ACPI_POWER_METER_DEVICE_NAME "Power Meter"
#define ACPI_POWER_METER_CLASS "power_meter_resource" #define ACPI_POWER_METER_CLASS "pwr_meter_resource"
#define NUM_SENSORS 17 #define NUM_SENSORS 17
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#define PREFIX "ACPI: " #define PREFIX "ACPI: "
#define ACPI_SMB_HC_CLASS "smbus_host_controller" #define ACPI_SMB_HC_CLASS "smbus_host_ctl"
#define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC" #define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC"
struct acpi_smb_hc { struct acpi_smb_hc {
......
...@@ -450,6 +450,126 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { ...@@ -450,6 +450,126 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
}, },
}, },
{ {
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T410",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad W510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T410",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad W510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T410",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad T510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad W510",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Lenovo ThinkPad X201",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
},
},
{
.callback = init_old_suspend_ordering, .callback = init_old_suspend_ordering,
.ident = "Panasonic CF51-2L", .ident = "Panasonic CF51-2L",
.matches = { .matches = {
...@@ -458,6 +578,30 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { ...@@ -458,6 +578,30 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
}, },
}, },
{
.callback = init_set_sci_en_on_resume,
.ident = "Dell Studio 1558",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1558"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Dell Studio 1557",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"),
},
},
{
.callback = init_set_sci_en_on_resume,
.ident = "Dell Studio 1555",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1555"),
},
},
{}, {},
}; };
#endif /* CONFIG_SUSPEND */ #endif /* CONFIG_SUSPEND */
......
...@@ -274,26 +274,6 @@ static void pnpacpi_parse_allocated_busresource(struct pnp_dev *dev, ...@@ -274,26 +274,6 @@ static void pnpacpi_parse_allocated_busresource(struct pnp_dev *dev,
pnp_add_bus_resource(dev, start, end); pnp_add_bus_resource(dev, start, end);
} }
static u64 addr_space_length(struct pnp_dev *dev, u64 min, u64 max, u64 len)
{
u64 max_len;
max_len = max - min + 1;
if (len <= max_len)
return len;
/*
* Per 6.4.3.5, _LEN cannot exceed _MAX - _MIN + 1, but some BIOSes
* don't do this correctly, e.g.,
* https://bugzilla.kernel.org/show_bug.cgi?id=15480
*/
dev_info(&dev->dev,
"resource length %#llx doesn't fit in %#llx-%#llx, trimming\n",
(unsigned long long) len, (unsigned long long) min,
(unsigned long long) max);
return max_len;
}
static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev, static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
struct acpi_resource *res) struct acpi_resource *res)
{ {
...@@ -309,7 +289,8 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev, ...@@ -309,7 +289,8 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
return; return;
} }
len = addr_space_length(dev, p->minimum, p->maximum, p->address_length); /* Windows apparently computes length rather than using _LEN */
len = p->maximum - p->minimum + 1;
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
if (p->resource_type == ACPI_MEMORY_RANGE) if (p->resource_type == ACPI_MEMORY_RANGE)
...@@ -330,7 +311,8 @@ static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev, ...@@ -330,7 +311,8 @@ static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev,
int window; int window;
u64 len; u64 len;
len = addr_space_length(dev, p->minimum, p->maximum, p->address_length); /* Windows apparently computes length rather than using _LEN */
len = p->maximum - p->minimum + 1;
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
if (p->resource_type == ACPI_MEMORY_RANGE) if (p->resource_type == ACPI_MEMORY_RANGE)
......
...@@ -211,6 +211,8 @@ int pnp_check_port(struct pnp_dev *dev, struct resource *res) ...@@ -211,6 +211,8 @@ int pnp_check_port(struct pnp_dev *dev, struct resource *res)
if (tres->flags & IORESOURCE_IO) { if (tres->flags & IORESOURCE_IO) {
if (cannot_compare(tres->flags)) if (cannot_compare(tres->flags))
continue; continue;
if (tres->flags & IORESOURCE_WINDOW)
continue;
tport = &tres->start; tport = &tres->start;
tend = &tres->end; tend = &tres->end;
if (ranged_conflict(port, end, tport, tend)) if (ranged_conflict(port, end, tport, tend))
...@@ -271,6 +273,8 @@ int pnp_check_mem(struct pnp_dev *dev, struct resource *res) ...@@ -271,6 +273,8 @@ int pnp_check_mem(struct pnp_dev *dev, struct resource *res)
if (tres->flags & IORESOURCE_MEM) { if (tres->flags & IORESOURCE_MEM) {
if (cannot_compare(tres->flags)) if (cannot_compare(tres->flags))
continue; continue;
if (tres->flags & IORESOURCE_WINDOW)
continue;
taddr = &tres->start; taddr = &tres->start;
tend = &tres->end; tend = &tres->end;
if (ranged_conflict(addr, end, taddr, tend)) if (ranged_conflict(addr, end, taddr, tend))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册