There is a mistake to get the msix entry number. It should be divide instead of modulus. Signed-off-by: Yang Zhang <yang.zhang@intel.com> Signed-off-by: Qing He <qing.he@intel.com> diff -r 112680f620bf xen/arch/x86/hvm/vmsi.c --- a/xen/arch/x86/hvm/vmsi.c Mon Jun 08 18:23:57 2009 +0100 +++ b/xen/arch/x86/hvm/vmsi.c Mon Jul 06 13:06:03 2009 +0800 @@ -290,7 +290,7 @@ goto out; entry = msixtbl_find_entry(v, address); - nr_entry = (address - entry->gtable) % PCI_MSIX_ENTRY_SIZE; + nr_entry = (address - entry->gtable) / PCI_MSIX_ENTRY_SIZE; offset = address & (PCI_MSIX_ENTRY_SIZE - 1); if ( offset != PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel