[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

AW: Kernel requires x86-64 CPU, after modifying arch_shared_info struct


  • To: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • From: Jan Ruh <jan.ruh@xxxxxxxxxx>
  • Date: Mon, 29 Jun 2020 09:56:43 +0000
  • Accept-language: de-DE, en-GB, en-US
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 29 Jun 2020 09:56:53 +0000
  • Ironport-sdr: 8jW9NScFxqx3q9NYF46JfkCa2W12ZRogXHWjHoTGxN5/f0RUMbst2Gq2dMf2PF5lTNuW07dpSV 6+J201Dp43Kz1ij9SwR4YpNztK883DnFNzC8UMEz+snGrrfpNM/ohTBrT3vhFbM3f9HOrB9+Zb 5PYdRNQWkXyyICn/ldWr0+4iR6m7eNyuQUDlCkoC50pdULKEYiPl4AC8/phASsxYmYQw9YbeJ+ ED/BIqGT5sge/UTxtUR/cx50PQPkAQOCdUevW2xeEFHIHde0FKLUmVOkImopVznGLY8LClqvqg 9go=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Sensitivity: personal
  • Thread-index: AQHWTehUS5L/6eMJQEyE2773H88H5KjvLyGAgAAjyHY=
  • Thread-topic: 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.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.