[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 08/38] x86/hyperlaunch: move initial hwdom setup to dom_construct_pvh
Relocate the initial block of hwdom setup code from dom0_construct_pvh() over to dom_construct_pvh(). No functional change. Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> --- xen/arch/x86/hvm/dom0_build.c | 44 ------------------------------ xen/arch/x86/hvm/dom_build.c | 50 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index 176b253d3c61..b4ffebdde00e 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -1312,56 +1312,12 @@ static int __init pvh_setup_acpi(struct domain *d, paddr_t start_info) return 0; } -static void __hwdom_init pvh_setup_mmcfg(struct domain *d) -{ - unsigned int i; - int rc; - - for ( i = 0; i < pci_mmcfg_config_num; i++ ) - { - rc = register_vpci_mmcfg_handler(d, pci_mmcfg_config[i].address, - pci_mmcfg_config[i].start_bus_number, - pci_mmcfg_config[i].end_bus_number, - pci_mmcfg_config[i].pci_segment); - if ( rc ) - printk("Unable to setup MMCFG handler at %#lx for segment %u\n", - pci_mmcfg_config[i].address, - pci_mmcfg_config[i].pci_segment); - } -} - int __init dom0_construct_pvh(const struct boot_domain *bd) { paddr_t entry, start_info; struct domain *d = bd->d; int rc; - printk(XENLOG_INFO "*** Building a PVH Dom%d ***\n", d->domain_id); - - if ( bd->kernel == NULL ) - panic("Missing kernel boot module for %pd construction\n", d); - - if ( is_hardware_domain(d) ) - { - /* - * MMCFG initialization must be performed before setting domain - * permissions, as the MCFG areas must not be part of the domain IOMEM - * accessible regions. - */ - pvh_setup_mmcfg(d); - - /* - * Setup permissions early so that calls to add MMIO regions to the - * p2m as part of vPCI setup don't fail due to permission checks. - */ - rc = dom0_setup_permissions(d); - if ( rc ) - { - printk("%pd unable to setup permissions: %d\n", d, rc); - return rc; - } - } - /* * Craft dom0 physical memory map and set the paging allocation. This must * be done before the iommu initializion, since iommu initialization code diff --git a/xen/arch/x86/hvm/dom_build.c b/xen/arch/x86/hvm/dom_build.c index 7206815d64a9..b6e534226434 100644 --- a/xen/arch/x86/hvm/dom_build.c +++ b/xen/arch/x86/hvm/dom_build.c @@ -8,15 +8,65 @@ * Copyright (C) 2024 Apertus Solutions, LLC */ +#include <xen/acpi.h> #include <xen/init.h> +#include <xen/types.h> + +#include <acpi/actables.h> #include <asm/bootinfo.h> #include <asm/dom0_build.h> +#include <asm/hvm/io.h> +#include <asm/pci.h> + +static void __hwdom_init pvh_setup_mmcfg(struct domain *d) +{ + unsigned int i; + int rc; + + for ( i = 0; i < pci_mmcfg_config_num; i++ ) + { + rc = register_vpci_mmcfg_handler(d, pci_mmcfg_config[i].address, + pci_mmcfg_config[i].start_bus_number, + pci_mmcfg_config[i].end_bus_number, + pci_mmcfg_config[i].pci_segment); + if ( rc ) + printk("Unable to setup MMCFG handler at %#lx for segment %u\n", + pci_mmcfg_config[i].address, + pci_mmcfg_config[i].pci_segment); + } +} int __init dom_construct_pvh(struct boot_domain *bd) { + int rc; + printk(XENLOG_INFO "*** Building a PVH Dom%d ***\n", bd->domid); + if ( bd->kernel == NULL ) + panic("Missing kernel boot module for %pd construction\n", bd->d); + + if ( is_hardware_domain(bd->d) ) + { + /* + * MMCFG initialization must be performed before setting domain + * permissions, as the MCFG areas must not be part of the domain IOMEM + * accessible regions. + */ + pvh_setup_mmcfg(bd->d); + + /* + * Setup permissions early so that calls to add MMIO regions to the + * p2m as part of vPCI setup don't fail due to permission checks. + */ + rc = dom0_setup_permissions(bd->d); + if ( rc ) + { + printk("%pd unable to setup permissions: %d\n", bd->d, rc); + return rc; + } + } + return dom0_construct_pvh(bd); } -- 2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |