mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/svm: Add virtual GIF support
This patch detects and enables Virtual GIF if available. This allows a nested hypervisor to perform STGIs and CLGIs without having to be intercepted by host hypervisor. Signed-off-by: Brian Woods <brian.woods@amd.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
8c7109242a
commit
4cd0fad645
3 files changed
+16
-1
No files matched your search
@@ -1597,8 +1597,13 @@ bool_t
|
||||
nestedsvm_gif_isset(struct vcpu *v)
|
||||
{
|
||||
struct nestedsvm *svm = &vcpu_nestedsvm(v);
|
||||
struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb;
|
||||
|
||||
return (!!svm->ns_gif);
|
||||
/* get the vmcb gif value if using vgif */
|
||||
if ( vmcb->_vintr.fields.vgif_enable )
|
||||
return vmcb->_vintr.fields.vgif;
|
||||
else
|
||||
return svm->ns_gif;
|
||||
}
|
||||
|
||||
void svm_vmexit_do_stgi(struct cpu_user_regs *regs, struct vcpu *v)
|
||||
|
||||
@@ -1670,6 +1670,7 @@ const struct hvm_function_table * __init start_svm(void)
|
||||
P(cpu_has_svm_cleanbits, "VMCB Clean Bits");
|
||||
P(cpu_has_svm_decode, "DecodeAssists");
|
||||
P(cpu_has_svm_vloadsave, "Virtual VMLOAD/VMSAVE");
|
||||
P(cpu_has_svm_vgif, "Virtual GIF");
|
||||
P(cpu_has_pause_filter, "Pause-Intercept Filter");
|
||||
P(cpu_has_tsc_ratio, "TSC Rate MSR");
|
||||
#undef P
|
||||
|
||||
@@ -214,6 +214,15 @@ static int construct_vmcb(struct vcpu *v)
|
||||
vmcb->_exception_intercepts |= (1U << TRAP_page_fault);
|
||||
}
|
||||
|
||||
/* if available, enable and configure virtual gif */
|
||||
if ( cpu_has_svm_vgif )
|
||||
{
|
||||
vmcb->_vintr.fields.vgif = 1;
|
||||
vmcb->_vintr.fields.vgif_enable = 1;
|
||||
vmcb->_general2_intercepts &= ~GENERAL2_INTERCEPT_STGI;
|
||||
vmcb->_general2_intercepts &= ~GENERAL2_INTERCEPT_CLGI;
|
||||
}
|
||||
|
||||
if ( cpu_has_pause_filter )
|
||||
{
|
||||
vmcb->_pause_filter_count = SVM_PAUSEFILTER_INIT;
|
||||
|
||||