x86/PCI: Ignore CPU non-addressable _CRS reserved memory resources
PATCH 1/1 x86/PCI: Ignore CPU non-addressable _CRS reserved memory resources
From: Gary Hade <[email protected]>
This assures that a _CRS reserved host bridge window or window region is not used if it is not addressable by the CPU. The new code either trims the window to exclude the non-addressable portion or totally ignores the window if the entire window is non-addressable.
The current code has been shown to be problematic with 32-bit non-PAE kernels on systems where _CRS reserves resources above 4GB.
---
arch/x86/pci/acpi.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-)
arch/x86/pci/acpi.c +16 -2
@@ -149,7 +149,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data)struct acpi_resource_address64 addr;acpi_status status;unsigned long flags; -u64 start, end; +u64 start, orig_end, end; status =resource_to_addr (acpi_res, &addr);if (!ACPI_SUCCESS (status))
@@ -165,7 +165,21 @@ setup_resource(struct acpi_resource *acpi_res, void *data)return AE_OK ; start = addr.minimum + addr.translation_offset; - end = addr.maximum + addr.translation_offset; + orig_end = end = addr.maximum + addr.translation_offset; + +/* Exclude non-addressable range or non-addressable portion of range */ + end =min (end, (u64 )iomem_resource.end); +if (end <= start) { +dev_info (&info->bridge->dev, +"host bridge window [%#llx-%#llx] " +"(ignored, not CPU addressable)\n" , start, orig_end); +return AE_OK ; + }else if (orig_end != end) { +dev_info (&info->bridge->dev, +"host bridge window [%#llx-%#llx] " +"([%#llx-%#llx] ignored, not CPU addressable)\n" , + start, orig_end, end +1 , orig_end); + } res = &info->res[info->res_num]; res->name = info->name;
Jesse Barnes
AppliedQuoted 13 lines · On Mon, 14 Nov 2011 15:42:16 -0800 Gary Hade <[email protected]> wrote:
From: Gary Hade <[email protected]>
This assures that a
_CRSreserved host bridge window or window region is not used if it is not addressable by the CPU. The new code either trims the window to exclude the non-addressable portion or totally ignores the window if the entire window is non-addressable.The current code has been shown to be problematic with 32-bit non-PAE kernels on systems where
_CRSreserves resources above 4GB.
Quoted 8 lines
Signed-off-by Gary Hade <[email protected]>Reviewed-by Bjorn Helgaas <[email protected]>Cc Jesse Barnes <[email protected]>Cc Bjorn Helgaas <[email protected]>Cc Thomas Renninger <[email protected]>---
Applied to linux-next (don't want to send something this fundamental to Linus at this late stage). It can land in stable if it turns out ok in -rc1.
Thanks,
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center