[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 17/38] x86/hyperlaunch: move pvh_setup_cpus to domain builder
The function pvh_setup_cpus() is a very general function that is usable by all HVM domains, not just PVH. As such, renaming to hvm_setup_cpus during move. Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> --- xen/arch/x86/hvm/dom0_build.c | 45 +---------------------- xen/arch/x86/hvm/dom_build.c | 45 +++++++++++++++++++++++ xen/arch/x86/include/asm/domain-builder.h | 2 + 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index 2ed2d5fd7326..a3b6afc5318a 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -808,49 +808,6 @@ static int __init pvh_load_kernel( return 0; } -static int __init pvh_setup_cpus(struct domain *d, paddr_t entry, - paddr_t start_info) -{ - struct vcpu *v = d->vcpu[0]; - int rc; - /* - * This sets the vCPU state according to the state described in - * docs/misc/pvh.pandoc. - */ - vcpu_hvm_context_t cpu_ctx = { - .mode = VCPU_HVM_MODE_32B, - .cpu_regs.x86_32.ebx = start_info, - .cpu_regs.x86_32.eip = entry, - .cpu_regs.x86_32.cr0 = X86_CR0_PE | X86_CR0_ET, - .cpu_regs.x86_32.cs_limit = ~0u, - .cpu_regs.x86_32.ds_limit = ~0u, - .cpu_regs.x86_32.es_limit = ~0u, - .cpu_regs.x86_32.ss_limit = ~0u, - .cpu_regs.x86_32.tr_limit = 0x67, - .cpu_regs.x86_32.cs_ar = 0xc9b, - .cpu_regs.x86_32.ds_ar = 0xc93, - .cpu_regs.x86_32.es_ar = 0xc93, - .cpu_regs.x86_32.ss_ar = 0xc93, - .cpu_regs.x86_32.tr_ar = 0x8b, - }; - - alloc_dom_vcpus(d); - - rc = arch_set_info_hvm_guest(v, &cpu_ctx); - if ( rc ) - { - printk("Unable to setup Dom0 BSP context: %d\n", rc); - return rc; - } - - update_domain_wallclock_time(d); - - v->is_initialised = 1; - clear_bit(_VPF_down, &v->pause_flags); - - return 0; -} - static int __init cf_check acpi_count_intr_ovr( struct acpi_subtable_header *header, const unsigned long end) { @@ -1319,7 +1276,7 @@ int __init dom0_construct_pvh(struct boot_domain *bd) return rc; } - rc = pvh_setup_cpus(d, entry, start_info); + rc = hvm_setup_cpus(bd->d, entry, start_info); if ( rc ) { printk("Failed to setup Dom0 CPUs: %d\n", rc); diff --git a/xen/arch/x86/hvm/dom_build.c b/xen/arch/x86/hvm/dom_build.c index 7fa007a6926d..078e42447b0a 100644 --- a/xen/arch/x86/hvm/dom_build.c +++ b/xen/arch/x86/hvm/dom_build.c @@ -16,6 +16,8 @@ #include <acpi/actables.h> +#include <public/hvm/hvm_vcpu.h> + #include <asm/bootinfo.h> #include <asm/dom0_build.h> #include <asm/domain-builder.h> @@ -55,6 +57,49 @@ static void __init pvh_init_p2m(struct boot_domain *bd) } while ( preempted ); } +int __init hvm_setup_cpus( + struct domain *d, paddr_t entry, paddr_t start_info) +{ + struct vcpu *v = d->vcpu[0]; + int rc; + /* + * This sets the vCPU state according to the state described in + * docs/misc/pvh.pandoc. + */ + vcpu_hvm_context_t cpu_ctx = { + .mode = VCPU_HVM_MODE_32B, + .cpu_regs.x86_32.ebx = start_info, + .cpu_regs.x86_32.eip = entry, + .cpu_regs.x86_32.cr0 = X86_CR0_PE | X86_CR0_ET, + .cpu_regs.x86_32.cs_limit = ~0u, + .cpu_regs.x86_32.ds_limit = ~0u, + .cpu_regs.x86_32.es_limit = ~0u, + .cpu_regs.x86_32.ss_limit = ~0u, + .cpu_regs.x86_32.tr_limit = 0x67, + .cpu_regs.x86_32.cs_ar = 0xc9b, + .cpu_regs.x86_32.ds_ar = 0xc93, + .cpu_regs.x86_32.es_ar = 0xc93, + .cpu_regs.x86_32.ss_ar = 0xc93, + .cpu_regs.x86_32.tr_ar = 0x8b, + }; + + alloc_dom_vcpus(d); + + rc = arch_set_info_hvm_guest(v, &cpu_ctx); + if ( rc ) + { + printk("Unable to setup %pd BSP context: %d\n", d, rc); + return rc; + } + + update_domain_wallclock_time(d); + + v->is_initialised = 1; + clear_bit(_VPF_down, &v->pause_flags); + + return 0; +} + int __init dom_construct_pvh(struct boot_domain *bd) { int rc; diff --git a/xen/arch/x86/include/asm/domain-builder.h b/xen/arch/x86/include/asm/domain-builder.h index af0a24b4edf5..7bc2fbe66bc2 100644 --- a/xen/arch/x86/include/asm/domain-builder.h +++ b/xen/arch/x86/include/asm/domain-builder.h @@ -9,6 +9,8 @@ int __init builder_get_cmdline( void builder_init(struct boot_info *bi); +int hvm_setup_cpus(struct domain *d, paddr_t entry, paddr_t start_info); + unsigned long dom_paging_pages( const struct boot_domain *d, unsigned long nr_pages); -- 2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |