Message ID | 20220414182252.758742-3-helgaas@kernel.org (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | x86/PCI: Log E820 clipping | expand |
On Thu, Apr 14, 2022 at 8:23 PM Bjorn Helgaas <helgaas@kernel.org> wrote: > > From: Bjorn Helgaas <bhelgaas@google.com> > > When remove_e820_regions() clips a resource because an E820 region overlaps > it, log a note in dmesg to add in debugging. > > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > arch/x86/kernel/resource.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/x86/kernel/resource.c b/arch/x86/kernel/resource.c > index 8ffe68437744..30d524adb012 100644 > --- a/arch/x86/kernel/resource.c > +++ b/arch/x86/kernel/resource.c > @@ -1,5 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0 > #include <linux/ioport.h> > +#include <linux/printk.h> > #include <asm/e820/api.h> > > static void resource_clip(struct resource *res, resource_size_t start, > @@ -28,6 +29,7 @@ static void remove_e820_regions(struct resource *avail) > int i; > struct e820_entry *entry; > u64 e820_start, e820_end; > + struct resource orig = *avail; > > for (i = 0; i < e820_table->nr_entries; i++) { > entry = &e820_table->entries[i]; > @@ -35,6 +37,11 @@ static void remove_e820_regions(struct resource *avail) > e820_end = entry->addr + entry->size - 1; > > resource_clip(avail, e820_start, e820_end); > + if (orig.start != avail->start || orig.end != avail->end) { > + pr_info("clipped %pR to %pR for e820 entry [mem %#010Lx-%#010Lx]\n", > + &orig, avail, e820_start, e820_end); > + orig = *avail; > + } > } > } > > -- > 2.25.1 >
diff --git a/arch/x86/kernel/resource.c b/arch/x86/kernel/resource.c index 8ffe68437744..30d524adb012 100644 --- a/arch/x86/kernel/resource.c +++ b/arch/x86/kernel/resource.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 #include <linux/ioport.h> +#include <linux/printk.h> #include <asm/e820/api.h> static void resource_clip(struct resource *res, resource_size_t start, @@ -28,6 +29,7 @@ static void remove_e820_regions(struct resource *avail) int i; struct e820_entry *entry; u64 e820_start, e820_end; + struct resource orig = *avail; for (i = 0; i < e820_table->nr_entries; i++) { entry = &e820_table->entries[i]; @@ -35,6 +37,11 @@ static void remove_e820_regions(struct resource *avail) e820_end = entry->addr + entry->size - 1; resource_clip(avail, e820_start, e820_end); + if (orig.start != avail->start || orig.end != avail->end) { + pr_info("clipped %pR to %pR for e820 entry [mem %#010Lx-%#010Lx]\n", + &orig, avail, e820_start, e820_end); + orig = *avail; + } } }