From: Alexey Neyman <stilor@att.net>
To: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
Feng Tang <feng.tang@intel.com>,
Yijing Wang <wangyijing@huawei.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] Fix coalescing host bridge windows in arch/x86/pci/acpi.c
Date: Sun, 22 Sep 2013 23:15:46 -0700 [thread overview]
Message-ID: <6362938.J7ZtNEOFpc@mistral> (raw)
[-- Attachment #1: Type: text/plain, Size: 1437 bytes --]
[Resending due to no response to the original message in a week]
Hi all,
I have a board with a BIOS bug that reports the following I/O port regions in
_CRS on one of the host bridges:
0x0000-0x03af // #0
0x03e0-0x0cf7 // #1
0x03b0-0x03bb // #2
0x03c0-0x03df // #3
0x0000-0xdfff // #4
0xf000-0xffff // #5
Obviously, region number #4 is erroneous as it overlaps with regions #0..3.
The code in coalesce_windows() in arch/x86/pci/acpi.c attempts to recover from
such kind of BIOS bugs by merging the overlapping regions. Current code
expands region #0 to 0x0000-0xdffff and makes region #4 ignored. As a result,
overlap of the expanded region #0 with regions #1..3 remains undetected (as
the inner loop already compared them with region #0). As a result, regions
#1..3 are inserted into the resource tree even though they overlap with
adjusted region #0 - which later results in resource conflicts for PCI devices
with IO ports in one of those regions (e.g., for an PCI IDE controller in
legacy mode - which has port 0x3f6). The kernel then refuses to initialize
these devices.
The fix: instead of expanding res1 and ignoring res2, do the opposite. The
res2 window is yet to be compared against all windows between res1 and res2
(regions #1..3 in the above example), so the resulting resource map will
include just the expanded region - and will ignore any overlapping ones.
Signed-off-by: Alexey Neyman <stilor@att.net>
[-- Attachment #2: acpi.c.diff --]
[-- Type: text/x-patch, Size: 722 bytes --]
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index b30e937..7fb24e5 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -354,12 +354,12 @@ static void coalesce_windows(struct pci_root_info *info, unsigned long type)
* the kernel resource tree doesn't allow overlaps.
*/
if (resource_overlaps(res1, res2)) {
- res1->start = min(res1->start, res2->start);
- res1->end = max(res1->end, res2->end);
+ res2->start = min(res1->start, res2->start);
+ res2->end = max(res1->end, res2->end);
dev_info(&info->bridge->dev,
"host bridge window expanded to %pR; %pR ignored\n",
- res1, res2);
- res2->flags = 0;
+ res2, res1);
+ res1->flags = 0;
}
}
}
next reply other threads:[~2013-09-23 6:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-23 6:15 Alexey Neyman [this message]
2013-09-24 3:47 ` [PATCH] Fix coalescing host bridge windows in arch/x86/pci/acpi.c Yijing Wang
2013-09-28 7:12 ` Alexey Neyman
2013-10-03 18:44 ` Alexey Neyman
2013-10-03 19:14 ` Bjorn Helgaas
2013-10-03 23:16 ` Alexey Neyman
2013-10-09 19:30 ` Alexey Neyman
2013-10-09 23:25 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6362938.J7ZtNEOFpc@mistral \
--to=stilor@att.net \
--cc=bhelgaas@google.com \
--cc=feng.tang@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rafael.j.wysocki@intel.com \
--cc=tglx@linutronix.de \
--cc=wangyijing@huawei.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.