Message ID | 20170815095306.rpxanbs7kd5m2tne@MacBook-Pro-de-Roger.local (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 15 Aug 2017 11:55:10 +0200, Roger Pau Monné <roger.pau@citrix.com> wrote: > Could you please try the patch below and paste the output you get on > the Xen console? Output is in attached file. Does it help? Regards Andreas (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) 0000:06:00.0 added entry 0 to msi_list (XEN) 0000:06:00.0 added entry 0x1 to msi_list (XEN) 0000:06:00.0 added entry 0x2 to msi_list (XEN) MSIX ctrl write. Enabled: 1 Maskall: 1. Configured entries: (XEN) 0 host_masked: 1 guest_masked: 1 (XEN) 0x1 host_masked: 1 guest_masked: 1 (XEN) 0x2 host_masked: 1 guest_masked: 1 (XEN) MSIX ctrl write. Enabled: 1 Maskall: 0. Configured entries: (XEN) 0 host_masked: 1 guest_masked: 1 (XEN) 0x1 host_masked: 1 guest_masked: 1 (XEN) 0x2 host_masked: 1 guest_masked: 1 (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) 0000:06:00.1 added entry 0 to msi_list (XEN) 0000:06:00.1 added entry 0x1 to msi_list (XEN) 0000:06:00.1 added entry 0x2 to msi_list (XEN) MSIX ctrl write. Enabled: 1 Maskall: 1. Configured entries: (XEN) 0 host_masked: 1 guest_masked: 1 (XEN) 0x1 host_masked: 1 guest_masked: 1 (XEN) 0x2 host_masked: 1 guest_masked: 1 (XEN) MSIX ctrl write. Enabled: 1 Maskall: 0. Configured entries: (XEN) 0 host_masked: 1 guest_masked: 1 (XEN) 0x1 host_masked: 1 guest_masked: 1 (XEN) 0x2 host_masked: 1 guest_masked: 1 (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) MSIX ctrl write. Enabled: 0 Maskall: 0. Configured entries: (XEN) 0000:02:00.0 added entry 0 to msi_list (XEN) 0000:02:00.0 added to msixtbl list (XEN) 0000:02:00.0 added entry 0x1 to msi_list (XEN) 0000:02:00.0 added entry 0x2 to msi_list (XEN) 0000:02:00.0 added entry 0x3 to msi_list (XEN) 0000:02:00.0 added entry 0x4 to msi_list (XEN) 0000:02:00.0 added entry 0x5 to msi_list (XEN) 0000:02:00.0 added entry 0x6 to msi_list (XEN) 0000:02:00.0 added entry 0x7 to msi_list (XEN) 0000:02:00.0 added entry 0x8 to msi_list (XEN) 0000:02:00.0 added entry 0x9 to msi_list (XEN) 0000:02:00.0 added entry 0xa to msi_list (XEN) 0000:02:00.0 added entry 0xb to msi_list (XEN) 0000:02:00.0 added entry 0xc to msi_list (XEN) 0000:02:00.0 added entry 0xd to msi_list (XEN) 0000:02:00.0 added entry 0xe to msi_list (XEN) MSIX ctrl write. Enabled: 1 Maskall: 0. Configured entries: (XEN) 0 host_masked: 0 guest_masked: 1 (XEN) 0x1 host_masked: 0 guest_masked: 1 (XEN) 0x2 host_masked: 0 guest_masked: 1 (XEN) 0x3 host_masked: 0 guest_masked: 1 (XEN) 0x4 host_masked: 0 guest_masked: 1 (XEN) 0x5 host_masked: 0 guest_masked: 1 (XEN) 0x6 host_masked: 0 guest_masked: 1 (XEN) 0x7 host_masked: 0 guest_masked: 1 (XEN) 0x8 host_masked: 0 guest_masked: 1 (XEN) 0x9 host_masked: 0 guest_masked: 1 (XEN) 0xa host_masked: 0 guest_masked: 1 (XEN) 0xb host_masked: 0 guest_masked: 1 (XEN) 0xc host_masked: 0 guest_masked: 1 (XEN) 0xd host_masked: 0 guest_masked: 1 (XEN) 0xe host_masked: 0 guest_masked: 1
>>> On 17.08.17 at 19:36, <hfp@posteo.de> wrote: > On Tue, 15 Aug 2017 11:55:10 +0200, Roger Pau Monné <roger.pau@citrix.com> wrote: >> Could you please try the patch below and paste the output you get on >> the Xen console? > > Output is in attached file. Does it help? For the moment I'll defer to Roger, as he wrote the debugging patch. If I wanted to look at this, I'd really wish to see a matching pair of hypervisor and qemu logs (i.e. from the same VM instance). Jan
diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c index d81c5d47c6..d7c64dcd90 100644 --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -330,6 +330,8 @@ static int msixtbl_write(struct vcpu *v, unsigned long address, ASSERT(msi_desc == desc->msi_desc); + printk("%smasking entry %#x\n", + (val & PCI_MSIX_VECTOR_BITMASK) ? "" : "un", nr_entry); guest_mask_msi_irq(desc, !!(val & PCI_MSIX_VECTOR_BITMASK)); unlock: @@ -431,6 +433,9 @@ static void add_msixtbl_entry(struct domain *d, entry->gtable = (unsigned long) gtable; list_add_rcu(&entry->list, &d->arch.hvm_domain.msixtbl_list); + + printk("%04x:%02x:%02x.%u added to msixtbl list\n", pdev->seg, pdev->bus, + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); } static void free_msixtbl_entry(struct rcu_head *rcu) @@ -511,8 +516,12 @@ out: (gtable + msi_desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET) ) + { + printk("msixtbl_pt_register: detected attempt to write to vector ctrl (entry %#x)\n", + msi_desc->msi_attrib.entry_nr); v->arch.hvm_vcpu.hvm_io.msix_unmask_address = v->arch.hvm_vcpu.hvm_io.msix_snoop_address; + } } } @@ -621,6 +630,7 @@ void msix_write_completion(struct vcpu *v) return; v->arch.hvm_vcpu.hvm_io.msix_unmask_address = 0; + printk("Detected MSI-X unmask in write completion\n"); if ( msixtbl_write(v, ctrl_address, 4, 0) != X86EMUL_OKAY ) gdprintk(XENLOG_WARNING, "MSI-X write completion failure\n"); } diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index 2c38adb1b1..f36919d1c3 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -980,6 +980,8 @@ static int msix_capability_init(struct pci_dev *dev, list_add_tail(&entry->list, &dev->msi_list); *desc = entry; + printk("%04x:%02x:%02x.%u added entry %#x to msi_list\n", + seg, bus, slot, func, msi->entry_nr); } if ( !msix->used_entries ) @@ -1297,6 +1299,18 @@ int pci_msi_conf_write_intercept(struct pci_dev *pdev, unsigned int reg, if ( reg != msix_control_reg(pos) || size != 2 ) return -EACCES; + printk("MSIX ctrl write. Enabled: %d Maskall: %d. " + "Configured entries:\n", + !!(*data & PCI_MSIX_FLAGS_ENABLE), + !!(*data & PCI_MSIX_FLAGS_MASKALL)); + list_for_each_entry( entry, &pdev->msi_list, list ) + { + printk("%#x host_masked: %d guest_masked: %d\n", + entry->msi_attrib.entry_nr, + entry->msi_attrib.host_masked, + entry->msi_attrib.guest_masked); + } + pdev->msix->guest_maskall = !!(*data & PCI_MSIX_FLAGS_MASKALL); if ( pdev->msix->host_maskall ) *data |= PCI_MSIX_FLAGS_MASKALL;