MSI: Fix msi delivery for hvm guest
PATCH 1/1 MSI: Fix msi delivery for hvm guest
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 <[email protected]>
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
xen/arch/x86/hvm/vmsi.c +10 -4
@@ -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;
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel