From nobody Mon Feb 9 16:19:44 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1575452669; cv=none; d=zohomail.com; s=zohoarc; b=j4QP0C7pCnZMnq+36/eE/ZgcjQ5OpGVJGt2tq3Eu8MVIoWueRft0pxipKNXBdoOkHRzCwtSzLSiDe+GiQrzfoae6HhCC5+1Ul8VJesLClswwjiWk+xnTUCsa7w62oCa/l8BIvqewYWQyflmVR/rbiP9Ms7W2+8qMLSiXx+ocL5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575452669; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LYiLhDobDdo5L47WYespSEw+itppl95RYG3tDkjgYt0=; b=YgDBedA6PUMwbjlGbAn095+BhjKTpx58CsgrJCTL/muddagPzuwopnxfRn20acJaSuaLTEVKI/3bammy7NzTOpuC4dmBpInbdVdzNu56GTV5QkKHKA5tDxVeKzq2zy2X5WMecOqXqCnos0y24OVPYRc3SVVrOLFiS0OU92//zdU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1575452669659514.364204539674; Wed, 4 Dec 2019 01:44:29 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1icRCJ-0003z9-QP; Wed, 04 Dec 2019 09:43:51 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1icRCI-0003yv-Ep for xen-devel@lists.xenproject.org; Wed, 04 Dec 2019 09:43:50 +0000 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 90e86e00-167a-11ea-81ff-12813bfff9fa; Wed, 04 Dec 2019 09:43:46 +0000 (UTC) X-Inumbo-ID: 90e86e00-167a-11ea-81ff-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1575452626; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tqpg6v0Efcyq1QabKyWhr0tUiGxtLe5uGOjl8mJOAiA=; b=KaiU7xS81PgdZ1Q6Fbj2+mZ4Lty+gR7Pc/FwMdoY2UyVL3HxeC7Dgiy2 u/gaDtDbmJ0c9Zeio01CZXgpkz5kLVoORqLIfwqfERq6LQ4ZeFBlYufkl t6yU3kdEsGQseo6X+yXUxYAQ9R23wGqmtgtF2QNsLOdRCJsnIfIHLiM6T 8=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of Andrew.Cooper3@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 4yr2zl0RMTeBrFHppIU4RsfaWlKhNXgorF5ZjFU7DPhCaiD7aqo4U1hvaAZihYGMwnEw8eLB0S SLdx9wOspiiM9I+p52A9TgSCMBge7duJzSPBUuziHq1/MPp/31a3W8uBlT8OY1oxB5hnxeQ9jC IebMq7XKtCaacUmsgiK/WMgCtrIV37JnPJbLWLXMbRtatPssVqpngZCLlr95DG57myK4SJVcq9 IK1Gx5o/Z4Hhf0R71/+QYj4EzU00Mp0Y584MUEIf8vcC/Vr0os3V/aCt9s/fGZ2yVFllMbJJ0z h+Y= X-SBRS: 2.7 X-MesageID: 9585455 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.69,277,1571716800"; d="scan'208";a="9585455" From: Andrew Cooper To: Xen-devel Date: Wed, 4 Dec 2019 09:43:34 +0000 Message-ID: <20191204094335.24603-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20191204094335.24603-1-andrew.cooper3@citrix.com> References: <20191204094335.24603-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 3/4] x86/svm: Clean up intinfo_t variables X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) The type name is poor because the type is also used for the IDT vectoring field, not just for the event injection field. Rename it to intinfo_t which is how the APM refers to the data. Rearrange the union to drop the .fields infix, and rename bytes to the more common raw. While adjusting all call sites, fix up style issues and make use of structu= re assignments where applicable. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Wei Liu CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/hvm/svm/intr.c | 32 ++++++++---------- xen/arch/x86/hvm/svm/nestedsvm.c | 28 +++++++--------- xen/arch/x86/hvm/svm/svm.c | 68 ++++++++++++++++++----------------= ---- xen/arch/x86/hvm/svm/svmdebug.c | 12 +++---- xen/include/asm-x86/hvm/svm/vmcb.h | 22 ++++++------ 5 files changed, 75 insertions(+), 87 deletions(-) diff --git a/xen/arch/x86/hvm/svm/intr.c b/xen/arch/x86/hvm/svm/intr.c index ff755165cd..4eede5cc23 100644 --- a/xen/arch/x86/hvm/svm/intr.c +++ b/xen/arch/x86/hvm/svm/intr.c @@ -43,15 +43,13 @@ static void svm_inject_nmi(struct vcpu *v) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; u32 general1_intercepts =3D vmcb_get_general1_intercepts(vmcb); - eventinj_t event; =20 - event.bytes =3D 0; - event.fields.v =3D 1; - event.fields.type =3D X86_EVENTTYPE_NMI; - event.fields.vector =3D 2; - - ASSERT(vmcb->eventinj.fields.v =3D=3D 0); - vmcb->eventinj =3D event; + ASSERT(!vmcb->eventinj.v); + vmcb->eventinj =3D (intinfo_t){ + .vector =3D 2, + .type =3D X86_EVENTTYPE_NMI, + .v =3D true, + }; =20 /* * SVM does not virtualise the NMI mask, so we emulate it by intercept= ing @@ -64,15 +62,13 @@ static void svm_inject_nmi(struct vcpu *v) static void svm_inject_extint(struct vcpu *v, int vector) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; - eventinj_t event; - - event.bytes =3D 0; - event.fields.v =3D 1; - event.fields.type =3D X86_EVENTTYPE_EXT_INTR; - event.fields.vector =3D vector; =20 - ASSERT(vmcb->eventinj.fields.v =3D=3D 0); - vmcb->eventinj =3D event; + ASSERT(!vmcb->eventinj.v); + vmcb->eventinj =3D (intinfo_t){ + .vector =3D vector, + .type =3D X86_EVENTTYPE_EXT_INTR, + .v =3D true, + }; } =20 static void svm_enable_intr_window(struct vcpu *v, struct hvm_intack intac= k) @@ -99,7 +95,7 @@ static void svm_enable_intr_window(struct vcpu *v, struct= hvm_intack intack) } =20 HVMTRACE_3D(INTR_WINDOW, intack.vector, intack.source, - vmcb->eventinj.fields.v?vmcb->eventinj.fields.vector:-1); + vmcb->eventinj.v ? vmcb->eventinj.vector : -1); =20 /* * Create a dummy virtual interrupt to intercept as soon as the @@ -197,7 +193,7 @@ void svm_intr_assist(void) * have cleared the interrupt out of the IRR. * 2. The IRQ is masked. */ - if ( unlikely(vmcb->eventinj.fields.v) || intblk ) + if ( unlikely(vmcb->eventinj.v) || intblk ) { svm_enable_intr_window(v, intack); return; diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index fef124fb11..d279a50e5c 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -340,7 +340,7 @@ static int nsvm_vcpu_hostrestore(struct vcpu *v, struct= cpu_user_regs *regs) /* Clear exitintinfo to prevent a fault loop of re-injecting * exceptions forever. */ - n1vmcb->exitintinfo.bytes =3D 0; + n1vmcb->exitintinfo.raw =3D 0; =20 /* Cleanbits */ n1vmcb->cleanbits.bytes =3D 0; @@ -806,13 +806,10 @@ nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_us= er_regs *regs, =20 switch (exitcode) { case VMEXIT_INTR: - if ( unlikely(ns_vmcb->eventinj.fields.v) - && nv->nv_vmentry_pending - && hvm_event_needs_reinjection(ns_vmcb->eventinj.fields.ty= pe, - ns_vmcb->eventinj.fields.vector) ) - { - ns_vmcb->exitintinfo.bytes =3D ns_vmcb->eventinj.bytes; - } + if ( unlikely(ns_vmcb->eventinj.v) && nv->nv_vmentry_pending && + hvm_event_needs_reinjection(ns_vmcb->eventinj.type, + ns_vmcb->eventinj.vector) ) + ns_vmcb->exitintinfo =3D ns_vmcb->eventinj; break; case VMEXIT_EXCEPTION_PF: ns_vmcb->_cr2 =3D ns_vmcb->exitinfo2; @@ -837,7 +834,7 @@ nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_user= _regs *regs, } =20 ns_vmcb->exitcode =3D exitcode; - ns_vmcb->eventinj.bytes =3D 0; + ns_vmcb->eventinj.raw =3D 0; return 0; } =20 @@ -1077,14 +1074,12 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu= _user_regs *regs) * only happens on a VMRUN instruction intercept which has no valid * exitintinfo set. */ - if ( unlikely(n2vmcb->eventinj.fields.v) && - hvm_event_needs_reinjection(n2vmcb->eventinj.fields.type, - n2vmcb->eventinj.fields.vector) ) - { + if ( unlikely(n2vmcb->eventinj.v) && + hvm_event_needs_reinjection(n2vmcb->eventinj.type, + n2vmcb->eventinj.vector) ) ns_vmcb->exitintinfo =3D n2vmcb->eventinj; - } =20 - ns_vmcb->eventinj.bytes =3D 0; + ns_vmcb->eventinj.raw =3D 0; =20 /* Nested paging mode */ if (nestedhvm_paging_mode_hap(v)) { @@ -1249,7 +1244,8 @@ enum hvm_intblk nsvm_intr_blocked(struct vcpu *v) if ( v->arch.hvm.hvm_io.io_req.state !=3D STATE_IOREQ_NONE ) return hvm_intblk_shadow; =20 - if ( !nv->nv_vmexit_pending && n2vmcb->exitintinfo.bytes !=3D 0 ) { + if ( !nv->nv_vmexit_pending && n2vmcb->exitintinfo.v ) + { /* Give the l2 guest a chance to finish the delivery of * the last injected interrupt or exception before we * emulate a VMEXIT (e.g. VMEXIT(INTR) ). diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index c5ac03b0b1..263ae03bfd 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -259,12 +259,12 @@ static int svm_vmcb_save(struct vcpu *v, struct hvm_h= w_cpu *c) c->sysenter_esp =3D v->arch.hvm.svm.guest_sysenter_esp; c->sysenter_eip =3D v->arch.hvm.svm.guest_sysenter_eip; =20 - if ( vmcb->eventinj.fields.v && - hvm_event_needs_reinjection(vmcb->eventinj.fields.type, - vmcb->eventinj.fields.vector) ) + if ( vmcb->eventinj.v && + hvm_event_needs_reinjection(vmcb->eventinj.type, + vmcb->eventinj.vector) ) { - c->pending_event =3D (uint32_t)vmcb->eventinj.bytes; - c->error_code =3D vmcb->eventinj.fields.errorcode; + c->pending_event =3D vmcb->eventinj.raw; + c->error_code =3D vmcb->eventinj.ec; } =20 return 1; @@ -339,11 +339,11 @@ static int svm_vmcb_restore(struct vcpu *v, struct hv= m_hw_cpu *c) { gdprintk(XENLOG_INFO, "Re-injecting %#"PRIx32", %#"PRIx32"\n", c->pending_event, c->error_code); - vmcb->eventinj.bytes =3D c->pending_event; - vmcb->eventinj.fields.errorcode =3D c->error_code; + vmcb->eventinj.raw =3D c->pending_event; + vmcb->eventinj.ec =3D c->error_code; } else - vmcb->eventinj.bytes =3D 0; + vmcb->eventinj.raw =3D 0; =20 vmcb->cleanbits.bytes =3D 0; paging_update_paging_modes(v); @@ -1301,7 +1301,7 @@ static void svm_inject_event(const struct x86_event *= event) { struct vcpu *curr =3D current; struct vmcb_struct *vmcb =3D curr->arch.hvm.svm.vmcb; - eventinj_t eventinj =3D vmcb->eventinj; + intinfo_t eventinj =3D vmcb->eventinj; struct x86_event _event =3D *event; struct cpu_user_regs *regs =3D guest_cpu_user_regs(); =20 @@ -1342,18 +1342,15 @@ static void svm_inject_event(const struct x86_event= *event) break; } =20 - if ( unlikely(eventinj.fields.v) && - (eventinj.fields.type =3D=3D X86_EVENTTYPE_HW_EXCEPTION) ) + if ( eventinj.v && (eventinj.type =3D=3D X86_EVENTTYPE_HW_EXCEPTION) ) { _event.vector =3D hvm_combine_hw_exceptions( - eventinj.fields.vector, _event.vector); + eventinj.vector, _event.vector); if ( _event.vector =3D=3D TRAP_double_fault ) _event.error_code =3D 0; } =20 - eventinj.bytes =3D 0; - eventinj.fields.v =3D 1; - eventinj.fields.vector =3D _event.vector; + eventinj =3D (intinfo_t){ .vector =3D _event.vector, .v =3D true }; =20 /* * Refer to AMD Vol 2: System Programming, 15.20 Event Injection. @@ -1373,7 +1370,7 @@ static void svm_inject_event(const struct x86_event *= event) vmcb->nextrip =3D regs->rip + _event.insn_len; else regs->rip +=3D _event.insn_len; - eventinj.fields.type =3D X86_EVENTTYPE_SW_INTERRUPT; + eventinj.type =3D X86_EVENTTYPE_SW_INTERRUPT; break; =20 case X86_EVENTTYPE_PRI_SW_EXCEPTION: /* icebp */ @@ -1385,7 +1382,7 @@ static void svm_inject_event(const struct x86_event *= event) regs->rip +=3D _event.insn_len; if ( cpu_has_svm_nrips ) vmcb->nextrip =3D regs->rip; - eventinj.fields.type =3D X86_EVENTTYPE_HW_EXCEPTION; + eventinj.type =3D X86_EVENTTYPE_HW_EXCEPTION; break; =20 case X86_EVENTTYPE_SW_EXCEPTION: /* int3, into */ @@ -1397,13 +1394,13 @@ static void svm_inject_event(const struct x86_event= *event) vmcb->nextrip =3D regs->rip + _event.insn_len; else regs->rip +=3D _event.insn_len; - eventinj.fields.type =3D X86_EVENTTYPE_HW_EXCEPTION; + eventinj.type =3D X86_EVENTTYPE_HW_EXCEPTION; break; =20 default: - eventinj.fields.type =3D X86_EVENTTYPE_HW_EXCEPTION; - eventinj.fields.ev =3D (_event.error_code !=3D X86_EVENT_NO_EC); - eventinj.fields.errorcode =3D _event.error_code; + eventinj.type =3D X86_EVENTTYPE_HW_EXCEPTION; + eventinj.ev =3D (_event.error_code !=3D X86_EVENT_NO_EC); + eventinj.ec =3D _event.error_code; break; } =20 @@ -1417,8 +1414,7 @@ static void svm_inject_event(const struct x86_event *= event) vmcb->nextrip =3D (uint32_t)vmcb->nextrip; } =20 - ASSERT(!eventinj.fields.ev || - eventinj.fields.errorcode =3D=3D (uint16_t)eventinj.fields.erro= rcode); + ASSERT(!eventinj.ev || eventinj.ec =3D=3D (uint16_t)eventinj.ec); vmcb->eventinj =3D eventinj; =20 if ( _event.vector =3D=3D TRAP_page_fault && @@ -1431,7 +1427,7 @@ static void svm_inject_event(const struct x86_event *= event) =20 static bool svm_event_pending(const struct vcpu *v) { - return v->arch.hvm.svm.vmcb->eventinj.fields.v; + return v->arch.hvm.svm.vmcb->eventinj.v; } =20 static void svm_cpu_dead(unsigned int cpu) @@ -2410,12 +2406,12 @@ static bool svm_get_pending_event(struct vcpu *v, s= truct x86_event *info) { const struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; =20 - if ( vmcb->eventinj.fields.v ) + if ( vmcb->eventinj.v ) return false; =20 - info->vector =3D vmcb->eventinj.fields.vector; - info->type =3D vmcb->eventinj.fields.type; - info->error_code =3D vmcb->eventinj.fields.errorcode; + info->vector =3D vmcb->eventinj.vector; + info->type =3D vmcb->eventinj.type; + info->error_code =3D vmcb->eventinj.ec; =20 return true; } @@ -2602,9 +2598,9 @@ void svm_vmexit_handler(struct cpu_user_regs *regs) vmcb->cleanbits.bytes =3D cpu_has_svm_cleanbits ? ~0u : 0u; =20 /* Event delivery caused this intercept? Queue for redelivery. */ - if ( unlikely(vmcb->exitintinfo.fields.v) && - hvm_event_needs_reinjection(vmcb->exitintinfo.fields.type, - vmcb->exitintinfo.fields.vector) ) + if ( unlikely(vmcb->exitintinfo.v) && + hvm_event_needs_reinjection(vmcb->exitintinfo.type, + vmcb->exitintinfo.vector) ) vmcb->eventinj =3D vmcb->exitintinfo; =20 switch ( exit_reason ) @@ -2765,9 +2761,9 @@ void svm_vmexit_handler(struct cpu_user_regs *regs) * switches. */ insn_len =3D -1; - if ( vmcb->exitintinfo.fields.v ) + if ( vmcb->exitintinfo.v ) { - switch ( vmcb->exitintinfo.fields.type ) + switch ( vmcb->exitintinfo.type ) { /* * #BP and #OF are from INT3/INTO respectively. #DB from @@ -2775,8 +2771,8 @@ void svm_vmexit_handler(struct cpu_user_regs *regs) * semantics. */ case X86_EVENTTYPE_HW_EXCEPTION: - if ( vmcb->exitintinfo.fields.vector =3D=3D TRAP_int3 || - vmcb->exitintinfo.fields.vector =3D=3D TRAP_overflow ) + if ( vmcb->exitintinfo.vector =3D=3D TRAP_int3 || + vmcb->exitintinfo.vector =3D=3D TRAP_overflow ) break; /* Fallthrough */ case X86_EVENTTYPE_EXT_INTR: @@ -2789,7 +2785,7 @@ void svm_vmexit_handler(struct cpu_user_regs *regs) * The common logic above will have forwarded the vectoring * information. Undo this as we are going to emulate. */ - vmcb->eventinj.bytes =3D 0; + vmcb->eventinj.raw =3D 0; } =20 /* diff --git a/xen/arch/x86/hvm/svm/svmdebug.c b/xen/arch/x86/hvm/svm/svmdebu= g.c index 4293d8dba5..26e4b9d7bb 100644 --- a/xen/arch/x86/hvm/svm/svmdebug.c +++ b/xen/arch/x86/hvm/svm/svmdebug.c @@ -55,11 +55,11 @@ void svm_vmcb_dump(const char *from, const struct vmcb_= struct *vmcb) vmcb->tlb_control, vmcb_get_vintr(vmcb).bytes, vmcb->interrupt_shadow); printk("eventinj %016"PRIx64", valid? %d, ec? %d, type %u, vector %#x\= n", - vmcb->eventinj.bytes, vmcb->eventinj.fields.v, - vmcb->eventinj.fields.ev, vmcb->eventinj.fields.type, - vmcb->eventinj.fields.vector); + vmcb->eventinj.raw, vmcb->eventinj.v, + vmcb->eventinj.ev, vmcb->eventinj.type, + vmcb->eventinj.vector); printk("exitcode =3D %#"PRIx64" exitintinfo =3D %#"PRIx64"\n", - vmcb->exitcode, vmcb->exitintinfo.bytes); + vmcb->exitcode, vmcb->exitintinfo.raw); printk("exitinfo1 =3D %#"PRIx64" exitinfo2 =3D %#"PRIx64"\n", vmcb->exitinfo1, vmcb->exitinfo2); printk("np_enable =3D %#"PRIx64" guest_asid =3D %#x\n", @@ -164,9 +164,9 @@ bool svm_vmcb_isvalid(const char *from, const struct vm= cb_struct *vmcb, PRINTF("GENERAL2_INTERCEPT: VMRUN intercept bit is clear (%#"PRIx3= 2")\n", vmcb_get_general2_intercepts(vmcb)); =20 - if ( vmcb->eventinj.fields.resvd1 ) + if ( vmcb->eventinj.resvd1 ) PRINTF("eventinj: MBZ bits are set (%#"PRIx64")\n", - vmcb->eventinj.bytes); + vmcb->eventinj.raw); =20 #undef PRINTF return ret; diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h b/xen/include/asm-x86/hvm/s= vm/vmcb.h index e37220edf2..fc67a88660 100644 --- a/xen/include/asm-x86/hvm/svm/vmcb.h +++ b/xen/include/asm-x86/hvm/svm/vmcb.h @@ -306,17 +306,17 @@ enum VMEXIT_EXITCODE =20 typedef union { - u64 bytes; struct { - u64 vector: 8; - u64 type: 3; - u64 ev: 1; - u64 resvd1: 19; - u64 v: 1; - u64 errorcode:32; - } fields; -} eventinj_t; + uint8_t vector; + uint8_t type:3; + bool ev:1; + uint32_t resvd1:19; + bool v:1; + uint32_t ec; + }; + uint64_t raw; +} intinfo_t; =20 typedef union { @@ -420,10 +420,10 @@ struct vmcb_struct { u64 exitcode; /* offset 0x70 */ u64 exitinfo1; /* offset 0x78 */ u64 exitinfo2; /* offset 0x80 */ - eventinj_t exitintinfo; /* offset 0x88 */ + intinfo_t exitintinfo; /* offset 0x88 */ u64 _np_enable; /* offset 0x90 - cleanbit 4 */ u64 res08[2]; - eventinj_t eventinj; /* offset 0xA8 */ + intinfo_t eventinj; /* offset 0xA8 */ u64 _h_cr3; /* offset 0xB0 - cleanbit 4 */ virt_ext_t virt_ext; /* offset 0xB8 */ vmcbcleanbits_t cleanbits; /* offset 0xC0 */ --=20 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel