mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 6.1 01/25] x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM
@ 2023-11-28 21:07 Sasha Levin
  2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 02/25] usb: aqc111: check packet for fixup for true limit Sasha Levin
                   ` (23 more replies)
  0 siblings, 24 replies; 25+ messages in thread
From: Sasha Levin @ 2023-11-28 21:07 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Saurabh Sengar, Dexuan Cui, Wei Liu, Sasha Levin, kys, haiyangz,
	tglx, mingo, bp, dave.hansen, x86, linux-hyperv

From: Saurabh Sengar <ssengar@linux.microsoft.com>

[ Upstream commit 7e8037b099c0bbe8f2109dc452dbcab8d400fc53 ]

A Gen2 VM doesn't support legacy PCI/PCIe, so both raw_pci_ops and
raw_pci_ext_ops are NULL, and pci_subsys_init() -> pcibios_init()
doesn't call pcibios_resource_survey() -> e820__reserve_resources_late();
as a result, any emulated persistent memory of E820_TYPE_PRAM (12) via
the kernel parameter memmap=nn[KMG]!ss is not added into iomem_resource
and hence can't be detected by register_e820_pmem().

Fix this by directly calling e820__reserve_resources_late() in
hv_pci_init(), which is called from arch_initcall(pci_arch_init).

It's ok to move a Gen2 VM's e820__reserve_resources_late() from
subsys_initcall(pci_subsys_init) to arch_initcall(pci_arch_init) because
the code in-between doesn't depend on the E820 resources.
e820__reserve_resources_late() depends on e820__reserve_resources(),
which has been called earlier from setup_arch().

For a Gen-2 VM, the new hv_pci_init() also adds any memory of
E820_TYPE_PMEM (7) into iomem_resource, and acpi_nfit_register_region() ->
acpi_nfit_insert_resource() -> region_intersects() returns
REGION_INTERSECTS, so the memory of E820_TYPE_PMEM won't get added twice.

Changed the local variable "int gen2vm" to "bool gen2vm".

Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
Message-ID: <1699691867-9827-1-git-send-email-ssengar@linux.microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 arch/x86/hyperv/hv_init.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 189ae92de4d06..c18e5c764643b 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -13,6 +13,7 @@
 #include <linux/io.h>
 #include <asm/apic.h>
 #include <asm/desc.h>
+#include <asm/e820/api.h>
 #include <asm/sev.h>
 #include <asm/ibt.h>
 #include <asm/hypervisor.h>
@@ -267,15 +268,31 @@ static int hv_cpu_die(unsigned int cpu)
 
 static int __init hv_pci_init(void)
 {
-	int gen2vm = efi_enabled(EFI_BOOT);
+	bool gen2vm = efi_enabled(EFI_BOOT);
 
 	/*
-	 * For Generation-2 VM, we exit from pci_arch_init() by returning 0.
-	 * The purpose is to suppress the harmless warning:
+	 * A Generation-2 VM doesn't support legacy PCI/PCIe, so both
+	 * raw_pci_ops and raw_pci_ext_ops are NULL, and pci_subsys_init() ->
+	 * pcibios_init() doesn't call pcibios_resource_survey() ->
+	 * e820__reserve_resources_late(); as a result, any emulated persistent
+	 * memory of E820_TYPE_PRAM (12) via the kernel parameter
+	 * memmap=nn[KMG]!ss is not added into iomem_resource and hence can't be
+	 * detected by register_e820_pmem(). Fix this by directly calling
+	 * e820__reserve_resources_late() here: e820__reserve_resources_late()
+	 * depends on e820__reserve_resources(), which has been called earlier
+	 * from setup_arch(). Note: e820__reserve_resources_late() also adds
+	 * any memory of E820_TYPE_PMEM (7) into iomem_resource, and
+	 * acpi_nfit_register_region() -> acpi_nfit_insert_resource() ->
+	 * region_intersects() returns REGION_INTERSECTS, so the memory of
+	 * E820_TYPE_PMEM won't get added twice.
+	 *
+	 * We return 0 here so that pci_arch_init() won't print the warning:
 	 * "PCI: Fatal: No config space access function found"
 	 */
-	if (gen2vm)
+	if (gen2vm) {
+		e820__reserve_resources_late();
 		return 0;
+	}
 
 	/* For Generation-1 VM, we'll proceed in pci_arch_init().  */
 	return 1;
-- 
2.42.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2023-11-28 22:34 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-28 21:07 [PATCH AUTOSEL 6.1 01/25] x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 02/25] usb: aqc111: check packet for fixup for true limit Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 03/25] stmmac: dwmac-loongson: Add architecture dependency Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 04/25] blk-throttle: fix lockdep warning of "cgroup_mutex or RCU read lock required!" Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 05/25] blk-cgroup: bypass blkcg_deactivate_policy after destroying Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 06/25] bcache: avoid oversize memory allocation by small stripe_size Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 07/25] bcache: remove redundant assignment to variable cur_idx Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 08/25] bcache: add code comments for bch_btree_node_get() and __bch_btree_node_alloc() Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 09/25] bcache: avoid NULL checking to c->root in run_cache_set() Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 10/25] nbd: fold nbd config initialization into nbd_alloc_config() Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 11/25] nvme-auth: unlock mutex in one place only Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 12/25] nvme-auth: set explanation code for failure2 msgs Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 13/25] nvme: catch errors from nvme_configure_metadata() Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 14/25] selftests/bpf: fix bpf_loop_bench for new callback verification scheme Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 15/25] LoongArch: Add dependency between vmlinuz.efi and vmlinux.efi Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 16/25] LoongArch: Implement constant timer shutdown interface Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 17/25] platform/x86: intel_telemetry: Fix kernel doc descriptions Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 18/25] HID: glorious: fix Glorious Model I HID report Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 19/25] HID: add ALWAYS_POLL quirk for Apple kb Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 20/25] nbd: pass nbd_sock to nbd_read_reply() instead of index Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 21/25] HID: hid-asus: reset the backlight brightness level on resume Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 22/25] HID: multitouch: Add quirk for HONOR GLO-GXXX touchpad Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 23/25] asm-generic: qspinlock: fix queued_spin_value_unlocked() implementation Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 24/25] net: usb: qmi_wwan: claim interface 4 for ZTE MF290 Sasha Levin
2023-11-28 21:07 ` [PATCH AUTOSEL 6.1 25/25] arm64: add dependency between vmlinuz.efi and Image Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®