[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Kernel requires x86-64 CPU, after modifying arch_shared_info struct
On Mon, Jun 29, 2020 at 09:56:43AM +0000, Jan Ruh wrote: > > 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: xl parser will just ignore the ';', you can remove them. > 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"; autoballoon is not a xl.cfg option. > xen_platform_pci=1; > pae=1; acpi=1; apic=1; All those are already enabled by default, no need to specify them here. > 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) This doesn't seem to exist in current Xen code, so I guess there are further changes applied here? > { > 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); Same with do_adj_gtime, I cannot find it in the current code, hence I'm afraid it's impossible to tell what it's actually doing. > + > 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 Aren't you missing a line below that contains the shared_info size, and that also need to be updated (since arch_shared_info is contained in shared_info)? > > > 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. Hm, I think guest type should be hvm-3.0-x86_32, as xen-* are PV guest types, and you are trying to boot a HVM guest. Anyway I'm not familiar with HVM direct kernel boot, so this might have no effect here. Are you sure the type is set to "xen-3.0-x86_64" prior to your changes? Maybe it would be worth to also paste the output of 'xl -vvv create ...'. > Sorry for the banner, I always forget that the mail client adds that thing, I > hope it doesn't do it again. I'm afraid it's still appended to this email, see below. Roger. > 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 |