diff options
| -rw-r--r-- | drivers/acpi/acpi_pad.c | 2 | ||||
| -rw-r--r-- | drivers/acpi/bus.c | 2 | ||||
| -rw-r--r-- | drivers/acpi/hest.c | 4 | ||||
| -rw-r--r-- | drivers/acpi/power_meter.c | 2 | ||||
| -rw-r--r-- | drivers/acpi/sbshc.c | 2 | ||||
| -rw-r--r-- | drivers/acpi/sleep.c | 144 | ||||
| -rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 26 | ||||
| -rw-r--r-- | drivers/pnp/resource.c | 4 |
8 files changed, 160 insertions, 26 deletions
diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c index 19dacfd43163..62122134693b 100644 --- a/drivers/acpi/acpi_pad.c +++ b/drivers/acpi/acpi_pad.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #include <acpi/acpi_bus.h> | 31 | #include <acpi/acpi_bus.h> |
| 32 | #include <acpi/acpi_drivers.h> | 32 | #include <acpi/acpi_drivers.h> |
| 33 | 33 | ||
| 34 | #define ACPI_PROCESSOR_AGGREGATOR_CLASS "processor_aggregator" | 34 | #define ACPI_PROCESSOR_AGGREGATOR_CLASS "acpi_pad" |
| 35 | #define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator" | 35 | #define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator" |
| 36 | #define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80 | 36 | #define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80 |
| 37 | static DEFINE_MUTEX(isolated_cpus_lock); | 37 | static DEFINE_MUTEX(isolated_cpus_lock); |
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 37132dc2da03..743576bf1bd7 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
| @@ -527,7 +527,7 @@ int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, | |||
| 527 | if (!event_is_open) | 527 | if (!event_is_open) |
| 528 | return 0; | 528 | return 0; |
| 529 | 529 | ||
| 530 | event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC); | 530 | event = kzalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC); |
| 531 | if (!event) | 531 | if (!event) |
| 532 | return -ENOMEM; | 532 | return -ENOMEM; |
| 533 | 533 | ||
diff --git a/drivers/acpi/hest.c b/drivers/acpi/hest.c index 4bb18c980ac6..1c527a192872 100644 --- a/drivers/acpi/hest.c +++ b/drivers/acpi/hest.c | |||
| @@ -123,6 +123,10 @@ int acpi_hest_firmware_first_pci(struct pci_dev *pci) | |||
| 123 | { | 123 | { |
| 124 | acpi_status status = AE_NOT_FOUND; | 124 | acpi_status status = AE_NOT_FOUND; |
| 125 | struct acpi_table_header *hest = NULL; | 125 | struct acpi_table_header *hest = NULL; |
| 126 | |||
| 127 | if (acpi_disabled) | ||
| 128 | return 0; | ||
| 129 | |||
| 126 | status = acpi_get_table(ACPI_SIG_HEST, 1, &hest); | 130 | status = acpi_get_table(ACPI_SIG_HEST, 1, &hest); |
| 127 | 131 | ||
| 128 | if (ACPI_SUCCESS(status)) { | 132 | if (ACPI_SUCCESS(status)) { |
diff --git a/drivers/acpi/power_meter.c b/drivers/acpi/power_meter.c index e8c32a49f14e..66f67293341e 100644 --- a/drivers/acpi/power_meter.c +++ b/drivers/acpi/power_meter.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #define ACPI_POWER_METER_NAME "power_meter" | 35 | #define ACPI_POWER_METER_NAME "power_meter" |
| 36 | ACPI_MODULE_NAME(ACPI_POWER_METER_NAME); | 36 | ACPI_MODULE_NAME(ACPI_POWER_METER_NAME); |
| 37 | #define ACPI_POWER_METER_DEVICE_NAME "Power Meter" | 37 | #define ACPI_POWER_METER_DEVICE_NAME "Power Meter" |
| 38 | #define ACPI_POWER_METER_CLASS "power_meter_resource" | 38 | #define ACPI_POWER_METER_CLASS "pwr_meter_resource" |
| 39 | 39 | ||
| 40 | #define NUM_SENSORS 17 | 40 | #define NUM_SENSORS 17 |
| 41 | 41 | ||
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c index 36704b887ccf..f8be23b6c129 100644 --- a/drivers/acpi/sbshc.c +++ b/drivers/acpi/sbshc.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #define PREFIX "ACPI: " | 19 | #define PREFIX "ACPI: " |
| 20 | 20 | ||
| 21 | #define ACPI_SMB_HC_CLASS "smbus_host_controller" | 21 | #define ACPI_SMB_HC_CLASS "smbus_host_ctl" |
| 22 | #define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC" | 22 | #define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC" |
| 23 | 23 | ||
| 24 | struct acpi_smb_hc { | 24 | struct acpi_smb_hc { |
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index f74834a544fd..e2e992599e68 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
| @@ -450,6 +450,126 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | |||
| 450 | }, | 450 | }, |
| 451 | }, | 451 | }, |
| 452 | { | 452 | { |
| 453 | .callback = init_set_sci_en_on_resume, | ||
| 454 | .ident = "Lenovo ThinkPad T410", | ||
| 455 | .matches = { | ||
| 456 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 457 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"), | ||
| 458 | }, | ||
| 459 | }, | ||
| 460 | { | ||
| 461 | .callback = init_set_sci_en_on_resume, | ||
| 462 | .ident = "Lenovo ThinkPad T510", | ||
| 463 | .matches = { | ||
| 464 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 465 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"), | ||
| 466 | }, | ||
| 467 | }, | ||
| 468 | { | ||
| 469 | .callback = init_set_sci_en_on_resume, | ||
| 470 | .ident = "Lenovo ThinkPad W510", | ||
| 471 | .matches = { | ||
| 472 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 473 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"), | ||
| 474 | }, | ||
| 475 | }, | ||
| 476 | { | ||
| 477 | .callback = init_set_sci_en_on_resume, | ||
| 478 | .ident = "Lenovo ThinkPad X201", | ||
| 479 | .matches = { | ||
| 480 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 481 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"), | ||
| 482 | }, | ||
| 483 | }, | ||
| 484 | { | ||
| 485 | .callback = init_set_sci_en_on_resume, | ||
| 486 | .ident = "Lenovo ThinkPad X201", | ||
| 487 | .matches = { | ||
| 488 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 489 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"), | ||
| 490 | }, | ||
| 491 | }, | ||
| 492 | { | ||
| 493 | .callback = init_set_sci_en_on_resume, | ||
| 494 | .ident = "Lenovo ThinkPad T410", | ||
| 495 | .matches = { | ||
| 496 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 497 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"), | ||
| 498 | }, | ||
| 499 | }, | ||
| 500 | { | ||
| 501 | .callback = init_set_sci_en_on_resume, | ||
| 502 | .ident = "Lenovo ThinkPad T510", | ||
| 503 | .matches = { | ||
| 504 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 505 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"), | ||
| 506 | }, | ||
| 507 | }, | ||
| 508 | { | ||
| 509 | .callback = init_set_sci_en_on_resume, | ||
| 510 | .ident = "Lenovo ThinkPad W510", | ||
| 511 | .matches = { | ||
| 512 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 513 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"), | ||
| 514 | }, | ||
| 515 | }, | ||
| 516 | { | ||
| 517 | .callback = init_set_sci_en_on_resume, | ||
| 518 | .ident = "Lenovo ThinkPad X201", | ||
| 519 | .matches = { | ||
| 520 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 521 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"), | ||
| 522 | }, | ||
| 523 | }, | ||
| 524 | { | ||
| 525 | .callback = init_set_sci_en_on_resume, | ||
| 526 | .ident = "Lenovo ThinkPad X201", | ||
| 527 | .matches = { | ||
| 528 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 529 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"), | ||
| 530 | }, | ||
| 531 | }, | ||
| 532 | { | ||
| 533 | .callback = init_set_sci_en_on_resume, | ||
| 534 | .ident = "Lenovo ThinkPad T410", | ||
| 535 | .matches = { | ||
| 536 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 537 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"), | ||
| 538 | }, | ||
| 539 | }, | ||
| 540 | { | ||
| 541 | .callback = init_set_sci_en_on_resume, | ||
| 542 | .ident = "Lenovo ThinkPad T510", | ||
| 543 | .matches = { | ||
| 544 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 545 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"), | ||
| 546 | }, | ||
| 547 | }, | ||
| 548 | { | ||
| 549 | .callback = init_set_sci_en_on_resume, | ||
| 550 | .ident = "Lenovo ThinkPad W510", | ||
| 551 | .matches = { | ||
| 552 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 553 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"), | ||
| 554 | }, | ||
| 555 | }, | ||
| 556 | { | ||
| 557 | .callback = init_set_sci_en_on_resume, | ||
| 558 | .ident = "Lenovo ThinkPad X201", | ||
| 559 | .matches = { | ||
| 560 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 561 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"), | ||
| 562 | }, | ||
| 563 | }, | ||
| 564 | { | ||
| 565 | .callback = init_set_sci_en_on_resume, | ||
| 566 | .ident = "Lenovo ThinkPad X201", | ||
| 567 | .matches = { | ||
| 568 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 569 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"), | ||
| 570 | }, | ||
| 571 | }, | ||
| 572 | { | ||
| 453 | .callback = init_old_suspend_ordering, | 573 | .callback = init_old_suspend_ordering, |
| 454 | .ident = "Panasonic CF51-2L", | 574 | .ident = "Panasonic CF51-2L", |
| 455 | .matches = { | 575 | .matches = { |
| @@ -458,6 +578,30 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | |||
| 458 | DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), | 578 | DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), |
| 459 | }, | 579 | }, |
| 460 | }, | 580 | }, |
| 581 | { | ||
| 582 | .callback = init_set_sci_en_on_resume, | ||
| 583 | .ident = "Dell Studio 1558", | ||
| 584 | .matches = { | ||
| 585 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
| 586 | DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1558"), | ||
| 587 | }, | ||
| 588 | }, | ||
| 589 | { | ||
| 590 | .callback = init_set_sci_en_on_resume, | ||
| 591 | .ident = "Dell Studio 1557", | ||
| 592 | .matches = { | ||
| 593 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
| 594 | DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"), | ||
| 595 | }, | ||
| 596 | }, | ||
| 597 | { | ||
| 598 | .callback = init_set_sci_en_on_resume, | ||
| 599 | .ident = "Dell Studio 1555", | ||
| 600 | .matches = { | ||
| 601 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
| 602 | DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1555"), | ||
| 603 | }, | ||
| 604 | }, | ||
| 461 | {}, | 605 | {}, |
| 462 | }; | 606 | }; |
| 463 | #endif /* CONFIG_SUSPEND */ | 607 | #endif /* CONFIG_SUSPEND */ |
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index 35bb44af49b3..100e4d9372f1 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c | |||
| @@ -274,26 +274,6 @@ static void pnpacpi_parse_allocated_busresource(struct pnp_dev *dev, | |||
| 274 | pnp_add_bus_resource(dev, start, end); | 274 | pnp_add_bus_resource(dev, start, end); |
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | static u64 addr_space_length(struct pnp_dev *dev, u64 min, u64 max, u64 len) | ||
| 278 | { | ||
| 279 | u64 max_len; | ||
| 280 | |||
| 281 | max_len = max - min + 1; | ||
| 282 | if (len <= max_len) | ||
| 283 | return len; | ||
| 284 | |||
| 285 | /* | ||
| 286 | * Per 6.4.3.5, _LEN cannot exceed _MAX - _MIN + 1, but some BIOSes | ||
| 287 | * don't do this correctly, e.g., | ||
| 288 | * https://bugzilla.kernel.org/show_bug.cgi?id=15480 | ||
| 289 | */ | ||
| 290 | dev_info(&dev->dev, | ||
| 291 | "resource length %#llx doesn't fit in %#llx-%#llx, trimming\n", | ||
| 292 | (unsigned long long) len, (unsigned long long) min, | ||
| 293 | (unsigned long long) max); | ||
| 294 | return max_len; | ||
| 295 | } | ||
| 296 | |||
| 297 | static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev, | 277 | static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev, |
| 298 | struct acpi_resource *res) | 278 | struct acpi_resource *res) |
| 299 | { | 279 | { |
| @@ -309,7 +289,8 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev, | |||
| 309 | return; | 289 | return; |
| 310 | } | 290 | } |
| 311 | 291 | ||
| 312 | len = addr_space_length(dev, p->minimum, p->maximum, p->address_length); | 292 | /* Windows apparently computes length rather than using _LEN */ |
| 293 | len = p->maximum - p->minimum + 1; | ||
| 313 | window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; | 294 | window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; |
| 314 | 295 | ||
| 315 | if (p->resource_type == ACPI_MEMORY_RANGE) | 296 | if (p->resource_type == ACPI_MEMORY_RANGE) |
| @@ -330,7 +311,8 @@ static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev, | |||
| 330 | int window; | 311 | int window; |
| 331 | u64 len; | 312 | u64 len; |
| 332 | 313 | ||
| 333 | len = addr_space_length(dev, p->minimum, p->maximum, p->address_length); | 314 | /* Windows apparently computes length rather than using _LEN */ |
| 315 | len = p->maximum - p->minimum + 1; | ||
| 334 | window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; | 316 | window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0; |
| 335 | 317 | ||
| 336 | if (p->resource_type == ACPI_MEMORY_RANGE) | 318 | if (p->resource_type == ACPI_MEMORY_RANGE) |
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 2e54e6a23c72..e3446ab8b563 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
| @@ -211,6 +211,8 @@ int pnp_check_port(struct pnp_dev *dev, struct resource *res) | |||
| 211 | if (tres->flags & IORESOURCE_IO) { | 211 | if (tres->flags & IORESOURCE_IO) { |
| 212 | if (cannot_compare(tres->flags)) | 212 | if (cannot_compare(tres->flags)) |
| 213 | continue; | 213 | continue; |
| 214 | if (tres->flags & IORESOURCE_WINDOW) | ||
| 215 | continue; | ||
| 214 | tport = &tres->start; | 216 | tport = &tres->start; |
| 215 | tend = &tres->end; | 217 | tend = &tres->end; |
| 216 | if (ranged_conflict(port, end, tport, tend)) | 218 | if (ranged_conflict(port, end, tport, tend)) |
| @@ -271,6 +273,8 @@ int pnp_check_mem(struct pnp_dev *dev, struct resource *res) | |||
| 271 | if (tres->flags & IORESOURCE_MEM) { | 273 | if (tres->flags & IORESOURCE_MEM) { |
| 272 | if (cannot_compare(tres->flags)) | 274 | if (cannot_compare(tres->flags)) |
| 273 | continue; | 275 | continue; |
| 276 | if (tres->flags & IORESOURCE_WINDOW) | ||
| 277 | continue; | ||
| 274 | taddr = &tres->start; | 278 | taddr = &tres->start; |
| 275 | tend = &tres->end; | 279 | tend = &tres->end; |
| 276 | if (ranged_conflict(addr, end, taddr, tend)) | 280 | if (ranged_conflict(addr, end, taddr, tend)) |
