From: Wei Liu <wei.liu@kernel.org>
To: Saurabh Singh Sengar <ssengar@linux.microsoft.com>
Cc: Dexuan Cui <decui@microsoft.com>,
kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, linux-hyperv@vger.kernel.org,
hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM
Date: Fri, 10 Nov 2023 23:38:42 +0000 [thread overview]
Message-ID: <ZU6_ArCG2Si3ZuLZ@liuwe-devbox-debian-v2> (raw)
In-Reply-To: <20230919053647.GA23290@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net>
On Mon, Sep 18, 2023 at 10:36:47PM -0700, Saurabh Singh Sengar wrote:
> On Thu, Aug 10, 2023 at 10:31:37PM -0700, Dexuan Cui wrote:
> > 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>
> > ---
> > 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 b004370d3b01..6b22d49aee7b 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/hypervisor.h>
> > #include <asm/hyperv-tlfs.h>
> > @@ -282,15 +283,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;
> > + }
>
>
> Kind reminder to review this.
>
I tried to applied this patch to hyperv-fixes, but it doesn't apply
cleanly.
Please resend.
Thanks,
Wei.
prev parent reply other threads:[~2023-11-10 23:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-11 5:31 [PATCH] x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM Dexuan Cui
2023-09-19 5:36 ` Saurabh Singh Sengar
2023-11-10 23:38 ` Wei Liu [this message]
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=ZU6_ArCG2Si3ZuLZ@liuwe-devbox-debian-v2 \
--to=wei.liu@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=ssengar@linux.microsoft.com \
--cc=tglx@linutronix.de \
--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.