--- /dev/null
+From 89935315f192abf7068d0044cefc84f162c3c81f Mon Sep 17 00:00:00 2001
+From: Zhang Rui <rui.zhang@intel.com>
+Date: Tue, 11 Mar 2014 22:40:27 +0800
+Subject: PNP / ACPI: proper handling of ACPI IO/Memory resource parsing failures
+
+From: Zhang Rui <rui.zhang@intel.com>
+
+commit 89935315f192abf7068d0044cefc84f162c3c81f upstream.
+
+Before commit b355cee88e3b (ACPI / resources: ignore invalid ACPI
+device resources), if acpi_dev_resource_memory()/acpi_dev_resource_io()
+returns false, it means the the resource is not a memeory/IO resource.
+
+But after commit b355cee88e3b, those functions return false if the
+given memory/IO resource entry is invalid (the length of the resource
+is zero).
+
+This breaks pnpacpi_allocated_resource(), because it now recognizes
+the invalid memory/io resources as resources of unknown type. Thus
+users see confusing warning messages on machines with zero length
+ACPI memory/IO resources.
+
+Fix the problem by rearranging pnpacpi_allocated_resource() so that
+it calls acpi_dev_resource_memory() for memory type and IO type
+resources only, respectively.
+
+Fixes: b355cee88e3b (ACPI / resources: ignore invalid ACPI device resources)
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Reported-and-tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
+Reported-and-tested-by: Julian Wollrath <jwollrath@web.de>
+Reported-and-tested-by: Paul Bolle <pebolle@tiscali.nl>
+[rjw: Changelog]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pnp/pnpacpi/rsparser.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+--- a/drivers/pnp/pnpacpi/rsparser.c
++++ b/drivers/pnp/pnpacpi/rsparser.c
+@@ -183,9 +183,7 @@ static acpi_status pnpacpi_allocated_res
+ struct resource r;
+ int i, flags;
+
+- if (acpi_dev_resource_memory(res, &r)
+- || acpi_dev_resource_io(res, &r)
+- || acpi_dev_resource_address_space(res, &r)
++ if (acpi_dev_resource_address_space(res, &r)
+ || acpi_dev_resource_ext_address_space(res, &r)) {
+ pnp_add_resource(dev, &r);
+ return AE_OK;
+@@ -217,6 +215,17 @@ static acpi_status pnpacpi_allocated_res
+ }
+
+ switch (res->type) {
++ case ACPI_RESOURCE_TYPE_MEMORY24:
++ case ACPI_RESOURCE_TYPE_MEMORY32:
++ case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
++ if (acpi_dev_resource_memory(res, &r))
++ pnp_add_resource(dev, &r);
++ break;
++ case ACPI_RESOURCE_TYPE_IO:
++ case ACPI_RESOURCE_TYPE_FIXED_IO:
++ if (acpi_dev_resource_io(res, &r))
++ pnp_add_resource(dev, &r);
++ break;
+ case ACPI_RESOURCE_TYPE_DMA:
+ dma = &res->data.dma;
+ if (dma->channel_count > 0 && dma->channels[0] != (u8) -1)