diff options
Diffstat (limited to 'drivers/acpi/resource.c')
| -rw-r--r-- | drivers/acpi/resource.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c index b7201fc6f1e..2ba8f02ced3 100644 --- a/drivers/acpi/resource.c +++ b/drivers/acpi/resource.c @@ -77,18 +77,24 @@ bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res)  	switch (ares->type) {  	case ACPI_RESOURCE_TYPE_MEMORY24:  		memory24 = &ares->data.memory24; +		if (!memory24->minimum && !memory24->address_length) +			return false;  		acpi_dev_get_memresource(res, memory24->minimum,  					 memory24->address_length,  					 memory24->write_protect);  		break;  	case ACPI_RESOURCE_TYPE_MEMORY32:  		memory32 = &ares->data.memory32; +		if (!memory32->minimum && !memory32->address_length) +			return false;  		acpi_dev_get_memresource(res, memory32->minimum,  					 memory32->address_length,  					 memory32->write_protect);  		break;  	case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:  		fixed_memory32 = &ares->data.fixed_memory32; +		if (!fixed_memory32->address && !fixed_memory32->address_length) +			return false;  		acpi_dev_get_memresource(res, fixed_memory32->address,  					 fixed_memory32->address_length,  					 fixed_memory32->write_protect); @@ -144,12 +150,16 @@ bool acpi_dev_resource_io(struct acpi_resource *ares, struct resource *res)  	switch (ares->type) {  	case ACPI_RESOURCE_TYPE_IO:  		io = &ares->data.io; +		if (!io->minimum && !io->address_length) +			return false;  		acpi_dev_get_ioresource(res, io->minimum,  					io->address_length,  					io->io_decode);  		break;  	case ACPI_RESOURCE_TYPE_FIXED_IO:  		fixed_io = &ares->data.fixed_io; +		if (!fixed_io->address && !fixed_io->address_length) +			return false;  		acpi_dev_get_ioresource(res, fixed_io->address,  					fixed_io->address_length,  					ACPI_DECODE_10);  | 
