Commit 70390501 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'x86-urgent-2026-05-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Ingo Molnar:

 - Fix memory map enumeration bug in the Xen e820 parsing code (Juergen
   Gross)

 - Re-enable e820 BIOS fallback if e820 table is empty (David Gow)

* tag 'x86-urgent-2026-05-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/boot/e820: Re-enable BIOS fallback if e820 table is empty
  x86/xen: Fix a potential problem in xen_e820_resolve_conflicts()
parents 6e1e5a33 5772f653
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -450,6 +450,10 @@ __init static int append_e820_table(struct boot_e820_entry *entries, u32 nr_entr
{
	struct boot_e820_entry *entry = entries;

	/* If there aren't any entries, we'll want to fall back to another source: */
	if (!nr_entries)
		return -ENOENT;

	while (nr_entries) {
		u64 start = entry->addr;
		u64 size  = entry->size;
@@ -458,7 +462,7 @@ __init static int append_e820_table(struct boot_e820_entry *entries, u32 nr_entr

		/* Ignore the remaining entries on 64-bit overflow: */
		if (start > end && likely(size))
			return -1;
			return -EINVAL;

		e820__range_add(start, size, type);

+9 −4
Original line number Diff line number Diff line
@@ -695,17 +695,22 @@ static void __init xen_e820_resolve_conflicts(phys_addr_t start,
		return;

	end = start + size;
	entry = xen_e820_table.entries;
	mapcnt = 0;

	for (mapcnt = 0; mapcnt < xen_e820_table.nr_entries; mapcnt++) {
	while (mapcnt < xen_e820_table.nr_entries) {
		entry = xen_e820_table.entries + mapcnt;
		if (entry->addr >= end)
			return;

		if (entry->addr + entry->size > start &&
		    entry->type == E820_TYPE_NVS)
		    entry->type == E820_TYPE_NVS) {
			xen_e820_swap_entry_with_ram(entry);
			/* E820 map has been changed, restart loop! */
			mapcnt = 0;
			continue;
		}

		entry++;
		mapcnt++;
	}
}