From: Wei Wang2 Subject: [PATCH] MSI: Fix msi delivery for hvm guest Date: Wed, 11 Jun 2008 16:16:08 +0200 Message-ID: <1213193768.26611.80.camel@gran.amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-LC+/m+5AS8hdXijttlXh" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel Cc: Keir Fraser List-Id: xen-devel@lists.xenproject.org --=-LC+/m+5AS8hdXijttlXh Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Some parameters like "dest_mode", "delivery_mode" and "trig_mode" seem to have been miscalculated before delivering MSI interrupt into hvm passthru guest. This will cause guest driver to roll back to legacy interrupt mode. Attached patch fixes this issue. -Wei Signed-off-by: Wei Wang --=20 AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Gesch=C3=A4ftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplement=C3=A4r: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Gesch=C3=A4ftsf=C3=BChrer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy=20 --=-LC+/m+5AS8hdXijttlXh Content-Disposition: attachment; filename=msi.patch Content-Type: text/x-patch; name=msi.patch; charset=UTF-8 Content-Transfer-Encoding: 7bit diff -r 7c771f0a24f3 xen/arch/x86/hvm/vmsi.c --- a/xen/arch/x86/hvm/vmsi.c Wed Jun 11 11:35:35 2008 +0100 +++ b/xen/arch/x86/hvm/vmsi.c Wed Jun 11 14:47:05 2008 +0200 @@ -110,15 +110,21 @@ static void vmsi_inj_irq( #define VMSI_DELIV_MASK 0x7000 #define VMSI_TRIG_MODE 0x8000 +#define GFLAGS_SHIFT_DEST_ID 0 +#define GFLAGS_SHIFT_RH 8 +#define GFLAGS_SHIFT_DM 9 +#define GLFAGS_SHIFT_DELIV_MODE 12 +#define GLFAGS_SHIFT_TRG_MODE 15 + int vmsi_deliver(struct domain *d, int pirq) { struct hvm_irq_dpci *hvm_irq_dpci = d->arch.hvm_domain.irq.dpci; uint32_t flags = hvm_irq_dpci->mirq[pirq].gmsi.gflags; int vector = hvm_irq_dpci->mirq[pirq].gmsi.gvec; - uint16_t dest = flags & VMSI_DEST_ID_MASK; - uint8_t dest_mode = flags & VMSI_DM_MASK; - uint8_t delivery_mode = flags & VMSI_DELIV_MASK; - uint8_t trig_mode = flags & VMSI_TRIG_MODE; + uint16_t dest = (flags & VMSI_DEST_ID_MASK) >> GFLAGS_SHIFT_DEST_ID; + uint8_t dest_mode = (flags & VMSI_DM_MASK) >> GFLAGS_SHIFT_DM; + uint8_t delivery_mode = (flags & VMSI_DELIV_MASK) >> GLFAGS_SHIFT_DELIV_MODE; + uint8_t trig_mode = (flags & VMSI_TRIG_MODE) >> GLFAGS_SHIFT_TRG_MODE; uint32_t deliver_bitmask; struct vlapic *target; struct vcpu *v; --=-LC+/m+5AS8hdXijttlXh Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=-LC+/m+5AS8hdXijttlXh--