[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] AW: Kernel requires x86-64 CPU, after modifying arch_shared_info struct
> Did you try backing up your changes and seeing if the same happens? If backing up my changes everything works as expected. > Did you rebuild both the Xen hypervisor and the tools? Yes, I rebuild both Xen hypervisor and the tools. > Pasting your xl config file would be helpful in order to help debug. As requested my xl config: type="hvm"; extra="console=hvc0 earlyprintk=xen"; kernel="/usr/lib/kernel/vmlinuz-domu"; ramdisk="/usr/lib/kernel/initrd.img-domu"; root="/dev/xvda2 ro"; memory=1024; autoballoon="off"; xen_platform_pci=1; pae=1; acpi=1; apic=1; vcpus=1; name="vm1"; disk=["file:domu.img,hda,w"]; vif=["bridge=xenbr0"]; vfb=["type=vnc,keymap=de"]; vnclisten="192.168.2.4:0"; boot="c";' > Posting your changes might also help spot something wonky. diff --git a/xen/include/public/arch-x86/xen.h b/xen/include/public/arch-x86/xen.h index 629cb2ba40..61c46504a5 100644 --- a/xen/include/public/arch-x86/xen.h +++ b/xen/include/public/arch-x86/xen.h @@ -265,6 +265,14 @@ struct arch_shared_info { /* There's no room for this field in the generic structure. */ uint32_t wc_sec_hi; #endif + + uint32_t st_version; + uint64_t time_sec; + uint64_t time_nsec; + uint64_t cycle_last; + uint32_t mult; + uint32_t shift; + }; typedef struct arch_shared_info arch_shared_info_t; diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index c39fbe50a0..2782cb5127 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1254,15 +1254,15 @@ void update_domain_synctime(struct domain *d) { uint32_t *st_version; + st_version = &shared_info(d, arch.st_version); *st_version = version_update_begin(*st_version); smp_wmb(); + shared_info(d, arch.mult) = global_time.mult; + shared_info(d, arch.shift) = global_time.shift; + shared_info(d, arch.cycle_last) = global_time.cycle_last; + shared_info(d, arch.time_sec) = global_time.time_sec; + shared_info(d, arch.time_nsec) = global_time.time_nsec; smp_wmb(); *st_version = version_update_end(*st_version); diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 72e7d33708..4b9ad0261b 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -503,22 +503,22 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) } case XEN_SYSCTL_adjust_gtime: { + struct adjust_gtime *adjust_gtime = (struct adjust_gtime*) &op->u.adjust_gtime; + ret = do_adj_gtime(adjust_gtime); + copyback = 1; break; diff --git a/tools/include/xen-foreign/reference.size b/tools/include/xen-foreign/reference.size index bb2ada32fb..9afd11e5fa 100644 --- a/tools/include/xen-foreign/reference.size +++ b/tools/include/xen-foreign/reference.size @@ -9,6 +9,6 @@ vcpu_guest_context | 344 344 2800 5168 arch_vcpu_info | 0 0 24 16 vcpu_time_info | 32 32 32 32 vcpu_info | 48 48 64 64 -arch_shared_info | 0 0 28 48 +arch_shared_info | 0 0 64 88 global_time is a static struct in time.c, no existing Xen code is changed, just functions added that are being called from the sysctl adjust_gtime. Further tests show that in /tools/libxc/xc_dom_binloader.c: xc_dom_parse_bin_kernel xc sets the dom->guest_type to "xen-3.0-x86_32" instead of "xen-3.0-x86_64". I also cannot see though how it can be connected to my change to arch_shared_info. Sorry for the banner, I always forget that the mail client adds that thing, I hope it doesn't do it again. Jan CONFIDENTIALITY: The contents of this e-mail are confidential and intended only for the above addressee(s). If you are not the intended recipient, or the person responsible for delivering it to the intended recipient, copying or delivering it to anyone else or using it in any unauthorized manner is prohibited and may be unlawful. If you receive this e-mail by mistake, please notify the sender and the systems administrator at straymail@xxxxxxxxxx immediately.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |