From: George Dunlap <george.dunlap@eu.citrix.com>
To: xen-devel@lists.xensource.com
Cc: george.dunlap@eu.citrix.com
Subject: [PATCH 2 of 2] xen: hvm_save: Add pre-3.4 compatibility for hvm_hw_cpu
Date: Thu, 31 Mar 2011 15:21:41 +0100 [thread overview]
Message-ID: <e2f2377fedef200932fd.1301581301@elijah> (raw)
In-Reply-To: <patchbomb.1301581299@elijah>
Xen 4.0 added "msr_tsc_aux" in the middle of the hvm_hw_cpu structure, making
it incompatible with pre-3.4 savefiles. This patch uses the recently introduced
backwards-compatibility infrastructure to convert the old to the new.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
diff -r ba5c95ba74d3 -r e2f2377fedef xen/include/public/arch-x86/hvm/save.h
--- a/xen/include/public/arch-x86/hvm/save.h Thu Mar 31 15:21:21 2011 +0100
+++ b/xen/include/public/arch-x86/hvm/save.h Thu Mar 31 15:21:21 2011 +0100
@@ -46,6 +46,8 @@
/*
* Processor
+ *
+ * Compat: Pre-3.4 didn't have msr_tsc_aux
*/
struct hvm_hw_cpu {
@@ -157,8 +159,131 @@
uint32_t error_code;
};
-DECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_cpu);
+struct hvm_hw_cpu_compat {
+ uint8_t fpu_regs[512];
+ uint64_t rax;
+ uint64_t rbx;
+ uint64_t rcx;
+ uint64_t rdx;
+ uint64_t rbp;
+ uint64_t rsi;
+ uint64_t rdi;
+ uint64_t rsp;
+ uint64_t r8;
+ uint64_t r9;
+ uint64_t r10;
+ uint64_t r11;
+ uint64_t r12;
+ uint64_t r13;
+ uint64_t r14;
+ uint64_t r15;
+
+ uint64_t rip;
+ uint64_t rflags;
+
+ uint64_t cr0;
+ uint64_t cr2;
+ uint64_t cr3;
+ uint64_t cr4;
+
+ uint64_t dr0;
+ uint64_t dr1;
+ uint64_t dr2;
+ uint64_t dr3;
+ uint64_t dr6;
+ uint64_t dr7;
+
+ uint32_t cs_sel;
+ uint32_t ds_sel;
+ uint32_t es_sel;
+ uint32_t fs_sel;
+ uint32_t gs_sel;
+ uint32_t ss_sel;
+ uint32_t tr_sel;
+ uint32_t ldtr_sel;
+
+ uint32_t cs_limit;
+ uint32_t ds_limit;
+ uint32_t es_limit;
+ uint32_t fs_limit;
+ uint32_t gs_limit;
+ uint32_t ss_limit;
+ uint32_t tr_limit;
+ uint32_t ldtr_limit;
+ uint32_t idtr_limit;
+ uint32_t gdtr_limit;
+
+ uint64_t cs_base;
+ uint64_t ds_base;
+ uint64_t es_base;
+ uint64_t fs_base;
+ uint64_t gs_base;
+ uint64_t ss_base;
+ uint64_t tr_base;
+ uint64_t ldtr_base;
+ uint64_t idtr_base;
+ uint64_t gdtr_base;
+
+ uint32_t cs_arbytes;
+ uint32_t ds_arbytes;
+ uint32_t es_arbytes;
+ uint32_t fs_arbytes;
+ uint32_t gs_arbytes;
+ uint32_t ss_arbytes;
+ uint32_t tr_arbytes;
+ uint32_t ldtr_arbytes;
+
+ uint64_t sysenter_cs;
+ uint64_t sysenter_esp;
+ uint64_t sysenter_eip;
+
+ /* msr for em64t */
+ uint64_t shadow_gs;
+
+ /* msr content saved/restored. */
+ uint64_t msr_flags;
+ uint64_t msr_lstar;
+ uint64_t msr_star;
+ uint64_t msr_cstar;
+ uint64_t msr_syscall_mask;
+ uint64_t msr_efer;
+ /*uint64_t msr_tsc_aux; COMPAT */
+
+ /* guest's idea of what rdtsc() would return */
+ uint64_t tsc;
+
+ /* pending event, if any */
+ union {
+ uint32_t pending_event;
+ struct {
+ uint8_t pending_vector:8;
+ uint8_t pending_type:3;
+ uint8_t pending_error_valid:1;
+ uint32_t pending_reserved:19;
+ uint8_t pending_valid:1;
+ };
+ };
+ /* error code for pending event */
+ uint32_t error_code;
+};
+
+static inline int _hvm_hw_fix_cpu(void *h) {
+ struct hvm_hw_cpu *new=h;
+ struct hvm_hw_cpu_compat *old=h;
+
+ /* If we copy from the end backwards, we should
+ * be able to do the modification in-place */
+ new->error_code=old->error_code;
+ new->pending_event=old->pending_event;
+ new->tsc=old->tsc;
+ new->msr_tsc_aux=0;
+
+ return 0;
+}
+
+DECLARE_HVM_SAVE_TYPE_COMPAT(CPU, 2, struct hvm_hw_cpu, \
+ struct hvm_hw_cpu_compat, _hvm_hw_fix_cpu);
/*
* PIC
next prev parent reply other threads:[~2011-03-31 14:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-31 14:21 [PATCH 0 of 2] RFC: hvm_save backwards compatibility George Dunlap
2011-03-31 14:21 ` [PATCH 1 of 2] xen: hvm_save: infrastructure for " George Dunlap
2011-03-31 14:21 ` George Dunlap [this message]
2011-04-01 10:49 ` [PATCH 2 of 2] xen: hvm_save: Add pre-3.4 compatibility for hvm_hw_cpu Ian Campbell
2011-04-01 11:13 ` George Dunlap
2011-04-06 10:54 ` Tim Deegan
2011-04-01 10:23 ` [PATCH 0 of 2] RFC: hvm_save backwards compatibility Keir Fraser
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e2f2377fedef200932fd.1301581301@elijah \
--to=george.dunlap@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.