From: Christoph Egger <Christoph.Egger@amd.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH][SVM] cleanup
Date: Tue, 29 Sep 2009 11:27:42 +0200 [thread overview]
Message-ID: <200909291127.42865.Christoph.Egger@amd.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 436 bytes --]
Hi!
Attached patch does some cleanups in svm
which make svm code more consistent.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
--
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
[-- Attachment #2: xen_svm.diff --]
[-- Type: text/x-diff, Size: 7093 bytes --]
diff -r 623aa5c2eaa4 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Fri Sep 25 15:20:58 2009 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c Tue Sep 29 11:16:48 2009 +0200
@@ -57,23 +57,12 @@ u32 svm_feature_flags;
#define set_segment_register(name, value) \
asm volatile ( "movw %%ax ,%%" STR(name) "" : : "a" (value) )
+static struct hvm_function_table svm_function_table;
+
enum handler_return { HNDL_done, HNDL_unhandled, HNDL_exception_raised };
asmlinkage void do_IRQ(struct cpu_user_regs *);
-static void svm_update_guest_cr(struct vcpu *v, unsigned int cr);
-static void svm_update_guest_efer(struct vcpu *v);
-static void svm_inject_exception(
- unsigned int trapnr, int errcode, unsigned long cr2);
-static void svm_cpuid_intercept(
- unsigned int *eax, unsigned int *ebx,
- unsigned int *ecx, unsigned int *edx);
-static void svm_wbinvd_intercept(void);
-static void svm_fpu_dirty_intercept(void);
-static int svm_msr_read_intercept(struct cpu_user_regs *regs);
-static int svm_msr_write_intercept(struct cpu_user_regs *regs);
-static void svm_invlpg_intercept(unsigned long vaddr);
-
/* va of hardware host save area */
static void *hsa[NR_CPUS] __read_mostly;
@@ -103,7 +92,7 @@ static void inline __update_guest_eip(
curr->arch.hvm_svm.vmcb->interrupt_shadow = 0;
if ( regs->eflags & X86_EFLAGS_TF )
- svm_inject_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE, 0);
+ hvm_inject_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE, 0);
}
static void svm_cpu_down(void)
@@ -255,9 +244,9 @@ static int svm_vmcb_restore(struct vcpu
v->arch.hvm_vcpu.guest_cr[2] = c->cr2;
v->arch.hvm_vcpu.guest_cr[3] = c->cr3;
v->arch.hvm_vcpu.guest_cr[4] = c->cr4;
- svm_update_guest_cr(v, 0);
- svm_update_guest_cr(v, 2);
- svm_update_guest_cr(v, 4);
+ hvm_update_guest_cr(v, 0);
+ hvm_update_guest_cr(v, 2);
+ hvm_update_guest_cr(v, 4);
v->arch.hvm_svm.guest_sysenter_cs = c->sysenter_cs;
v->arch.hvm_svm.guest_sysenter_esp = c->sysenter_esp;
@@ -314,7 +303,7 @@ static void svm_load_cpu_state(struct vc
vmcb->cstar = data->msr_cstar;
vmcb->sfmask = data->msr_syscall_mask;
v->arch.hvm_vcpu.guest_efer = data->msr_efer;
- svm_update_guest_efer(v);
+ hvm_update_guest_efer(v);
hvm_set_guest_tsc(v, data->tsc);
}
@@ -817,37 +806,6 @@ static int svm_do_pmu_interrupt(struct c
return 0;
}
-static struct hvm_function_table svm_function_table = {
- .name = "SVM",
- .cpu_down = svm_cpu_down,
- .domain_initialise = svm_domain_initialise,
- .domain_destroy = svm_domain_destroy,
- .vcpu_initialise = svm_vcpu_initialise,
- .vcpu_destroy = svm_vcpu_destroy,
- .save_cpu_ctxt = svm_save_vmcb_ctxt,
- .load_cpu_ctxt = svm_load_vmcb_ctxt,
- .get_interrupt_shadow = svm_get_interrupt_shadow,
- .set_interrupt_shadow = svm_set_interrupt_shadow,
- .guest_x86_mode = svm_guest_x86_mode,
- .get_segment_register = svm_get_segment_register,
- .set_segment_register = svm_set_segment_register,
- .update_host_cr3 = svm_update_host_cr3,
- .update_guest_cr = svm_update_guest_cr,
- .update_guest_efer = svm_update_guest_efer,
- .flush_guest_tlbs = svm_flush_guest_tlbs,
- .set_tsc_offset = svm_set_tsc_offset,
- .inject_exception = svm_inject_exception,
- .init_hypercall_page = svm_init_hypercall_page,
- .event_pending = svm_event_pending,
- .do_pmu_interrupt = svm_do_pmu_interrupt,
- .cpuid_intercept = svm_cpuid_intercept,
- .wbinvd_intercept = svm_wbinvd_intercept,
- .fpu_dirty_intercept = svm_fpu_dirty_intercept,
- .msr_read_intercept = svm_msr_read_intercept,
- .msr_write_intercept = svm_msr_write_intercept,
- .invlpg_intercept = svm_invlpg_intercept
-};
-
static int svm_cpu_up(struct cpuinfo_x86 *c)
{
u32 eax, edx, phys_hsa_lo, phys_hsa_hi;
@@ -1108,7 +1066,7 @@ static int svm_msr_read_intercept(struct
return X86EMUL_OKAY;
gpf:
- svm_inject_exception(TRAP_gp_fault, 0, 0);
+ hvm_inject_exception(TRAP_gp_fault, 0, 0);
return X86EMUL_EXCEPTION;
}
@@ -1186,7 +1144,7 @@ static int svm_msr_write_intercept(struc
return X86EMUL_OKAY;
gpf:
- svm_inject_exception(TRAP_gp_fault, 0, 0);
+ hvm_inject_exception(TRAP_gp_fault, 0, 0);
return X86EMUL_EXCEPTION;
}
@@ -1248,7 +1206,7 @@ static void svm_vmexit_ud_intercept(stru
switch ( rc )
{
case X86EMUL_UNHANDLEABLE:
- svm_inject_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE, 0);
+ hvm_inject_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE, 0);
break;
case X86EMUL_EXCEPTION:
if ( ctxt.exn_pending )
@@ -1294,6 +1252,37 @@ static void svm_invlpg_intercept(unsigne
svm_asid_g_invlpg(curr, vaddr);
}
+static struct hvm_function_table svm_function_table = {
+ .name = "SVM",
+ .cpu_down = svm_cpu_down,
+ .domain_initialise = svm_domain_initialise,
+ .domain_destroy = svm_domain_destroy,
+ .vcpu_initialise = svm_vcpu_initialise,
+ .vcpu_destroy = svm_vcpu_destroy,
+ .save_cpu_ctxt = svm_save_vmcb_ctxt,
+ .load_cpu_ctxt = svm_load_vmcb_ctxt,
+ .get_interrupt_shadow = svm_get_interrupt_shadow,
+ .set_interrupt_shadow = svm_set_interrupt_shadow,
+ .guest_x86_mode = svm_guest_x86_mode,
+ .get_segment_register = svm_get_segment_register,
+ .set_segment_register = svm_set_segment_register,
+ .update_host_cr3 = svm_update_host_cr3,
+ .update_guest_cr = svm_update_guest_cr,
+ .update_guest_efer = svm_update_guest_efer,
+ .flush_guest_tlbs = svm_flush_guest_tlbs,
+ .set_tsc_offset = svm_set_tsc_offset,
+ .inject_exception = svm_inject_exception,
+ .init_hypercall_page = svm_init_hypercall_page,
+ .event_pending = svm_event_pending,
+ .do_pmu_interrupt = svm_do_pmu_interrupt,
+ .cpuid_intercept = svm_cpuid_intercept,
+ .wbinvd_intercept = svm_wbinvd_intercept,
+ .fpu_dirty_intercept = svm_fpu_dirty_intercept,
+ .msr_read_intercept = svm_msr_read_intercept,
+ .msr_write_intercept = svm_msr_write_intercept,
+ .invlpg_intercept = svm_invlpg_intercept
+};
+
asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs)
{
unsigned int exit_reason;
@@ -1402,7 +1391,7 @@ asmlinkage void svm_vmexit_handler(struc
break;
}
- svm_inject_exception(TRAP_page_fault, regs->error_code, va);
+ hvm_inject_exception(TRAP_page_fault, regs->error_code, va);
break;
}
@@ -1505,7 +1494,7 @@ asmlinkage void svm_vmexit_handler(struc
case VMEXIT_STGI:
case VMEXIT_CLGI:
case VMEXIT_SKINIT:
- svm_inject_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE, 0);
+ hvm_inject_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE, 0);
break;
case VMEXIT_NPF:
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
reply other threads:[~2009-09-29 9:27 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=200909291127.42865.Christoph.Egger@amd.com \
--to=christoph.egger@amd.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.