From: Sheng Yang <sheng@linux.intel.com>
To: kvm@vger.kernel.org
Cc: Alex Williamson <alex.williamson@hp.com>,
Avi Kivity <avi@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [PATCH 13/16] kvm: enable MSI-X capabilty for assigned device
Date: Wed, 8 Apr 2009 10:26:01 +0800 [thread overview]
Message-ID: <200904081026.02816.sheng@linux.intel.com> (raw)
In-Reply-To: <1239122290.6184.86.camel@bling>
On Wednesday 08 April 2009 00:38:10 Alex Williamson wrote:
> On Tue, 2009-04-07 at 14:09 +0800, Sheng Yang wrote:
> > On Saturday 04 April 2009 05:27:43 Alex Williamson wrote:
> > > Do we need some disable logic here? If I toggle a bnx2 NIC in a guest,
> > > I get the following when it attempts to come back up:
> > >
> > > MSI-X entry number is zero!
> > > assigned_dev_update_msix_mmio: No such device or address
> >
> > It seems that driver didn't fill the MMIO with any correct MSIX
> > information, or the program fail to intercept it after driver set enable
> > bit of MSIX. It's strange... (Have it got something to do with PM and
> > some EXP feature you mentioned?)
>
> My guess was that it filled in the MSIX info, but then can't find a free
> slot to reload the MSIX data when it tries to re-enable MSIX. I hacked
> the bnx2 driver to not rely on PM and EXP capabilities for this test, it
> seems to work, but it's possible that I broke something. My host also
> locks up the second time I try to export this device to a guest, maybe a
> problem with my bnx2 hacks, MSIX not getting reset, or prototype
> hardware. I'll see if I can find another MSIX capable device to export
> to a guest.
>
> > Could you enable DEVICE_ASSSIGNMENT_DEBUG=1 in
> > qemu/hw/device-assignment.c and post the output?
>
> Yup, see below. The error comes after I 'ifdown eth0; ifup eth0' in the
> guest. Note bnx2 appears to only turn on MSIX for SMP systems. Thanks,
>
> Alex
Seems your "ifdown/ifup" script reload the module? Oh god, I found one bug
after checked the spec:
System software reads this field to determine the MSI-X Table Size *N*, which
is encoded as *N-1*. For example, a returned value of “00000000011” indicates
a table size of 4.
But it seems still can't explain the problem...(OK, it may affect the guest in
a unknown way as well...) I would post a fix for it soon.
> val=0x00000008 len=2 assigned_dev_pci_write_config: (4.0): address=0052
> val=0x00000008 len=2 assigned_dev_pci_read_config: (4.0): address=0006
> val=0x00000010 len=2 assigned_dev_pci_read_config: (4.0): address=0034
> val=0x00000040 len=1 assigned_dev_pci_read_config: (4.0): address=0040
> val=0x00000005 len=1 assigned_dev_pci_read_config: (4.0): address=0041
> val=0x00000050 len=1 assigned_dev_pci_read_config: (4.0): address=0050
> val=0x00000011 len=1 assigned_dev_pci_read_config: (4.0): address=0052
> val=0x00000008 len=2 assigned_dev_pci_read_config: (4.0): address=0054
> val=0x0000c000 len=4 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x0, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x4, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x8, val 0x4191 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x10, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x14, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x18, val 0x4199 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x20, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x24, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x28, val 0x41a1 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x30, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x34, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x38, val 0x41a9 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x40, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x44, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x48, val 0x41b1 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x50, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x54, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x58, val 0x41b9 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x60, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x64, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x68, val 0x41c1 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x70, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x74, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x78, val 0x41c9 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x80, val 0xfeeff00c msix_mmio_writel: write to MSI-X entry table
> mmio offset 0x84, val 0x0 msix_mmio_writel: write to MSI-X entry table mmio
> offset 0x88, val 0x41d1 assigned_dev_pci_read_config: (4.0): address=0004
> val=0x00000046 len=2 assigned_dev_pci_write_config: (4.0): address=0004
> val=0x00000446 len=2 assigned_dev_pci_write_config: NON BAR (4.0):
The writing to MMIO have been intercepted, but code fail to count it?
Strange...
Could you try this debug?
diff --git a/qemu/hw/device-assignment.c b/qemu/hw/device-assignment.c
index 09e54ae..ba31bed 100644
--- a/qemu/hw/device-assignment.c
+++ b/qemu/hw/device-assignment.c
@@ -45,7 +45,7 @@
#define IORESOURCE_DMA 0x00000800
#define IORESOURCE_PREFETCH 0x00001000 /* No side effects */
-/* #define DEVICE_ASSIGNMENT_DEBUG 1 */
+#define DEVICE_ASSIGNMENT_DEBUG 1
#ifdef DEVICE_ASSIGNMENT_DEBUG
#define DEBUG(fmt, ...) \
@@ -816,9 +816,13 @@ static int assigned_dev_update_msix_mmio(PCIDevice
*pci_dev)
else
pos = pci_dev->cap.start;
+ fprintf(stderr, "the MSIX capabilty position is 0x%lx\n", pos);
+
entries_max_nr = pci_dev->config[pos + 2];
entries_max_nr &= PCI_MSIX_TABSIZE;
+ fprintf(stderr, "the MSIX entries_max_nr is 0x%lx\n", entries_max_nr);
+
/* Get the usable entry number for allocating */
for (i = 0; i < entries_max_nr; i++) {
memcpy(&msg_ctrl, va + i * 16 + 12, 4);
(Further more, you can check the content of msg_ctrl when code try to count
them). And also please try the fix for MSI-X table size.
Thanks!
--
regards
Yang, Sheng
next prev parent reply other threads:[~2009-04-08 2:26 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-17 3:50 [PATCH 0/16 v6] Device assignment improvement in userspace Sheng Yang
2009-03-17 3:50 ` [PATCH 01/16] kvm: ioctl for KVM_ASSIGN_DEV_IRQ and KVM_DEASSIGN_DEV_IRQ Sheng Yang
2009-03-17 3:50 ` [PATCH 02/16] kvm: deassign irq for INTx Sheng Yang
2009-03-17 3:50 ` [PATCH 03/16] kvm: Replace force type convert with container_of() Sheng Yang
2009-03-17 3:50 ` [PATCH 04/16] Make device assignment depend on libpci Sheng Yang
2009-03-17 3:50 ` [PATCH 05/16] Figure out device capability Sheng Yang
2009-03-17 3:50 ` [PATCH 06/16] Support for " Sheng Yang
2009-04-03 19:23 ` Alex Williamson
2009-04-07 5:54 ` Sheng Yang
2009-03-17 3:50 ` [PATCH 07/16] kvm: user interface for MSI type irq routing Sheng Yang
2009-03-17 3:50 ` [PATCH 08/16] kvm: libkvm: allocate unused gsi for " Sheng Yang
2009-03-17 3:50 ` [PATCH 09/16] kvm: expose MSI capability to guest Sheng Yang
2009-03-17 3:50 ` [PATCH 10/16] kvm: Support MSI convert to INTx in device assignment Sheng Yang
2009-03-17 3:50 ` [PATCH 11/16] Add MSI-X related macro to pci.c Sheng Yang
2009-03-17 3:50 ` [PATCH 12/16] kvm: add ioctl KVM_SET_MSIX_ENTRY_NR and KVM_SET_MSIX_ENTRY Sheng Yang
2009-03-17 3:50 ` [PATCH 13/16] kvm: enable MSI-X capabilty for assigned device Sheng Yang
2009-04-03 21:27 ` Alex Williamson
2009-04-07 6:09 ` Sheng Yang
2009-04-07 16:38 ` Alex Williamson
2009-04-08 2:26 ` Sheng Yang [this message]
2009-04-08 16:13 ` Alex Williamson
2009-04-09 1:31 ` Sheng Yang
2009-03-17 3:50 ` [PATCH 14/16] kvm: fix interrupt pin 0 assignment Sheng Yang
2009-03-17 3:50 ` [PATCH 15/16] KVM: Fill config with correct VID/DID Sheng Yang
2009-03-17 3:50 ` [PATCH 16/16] kvm: emulate command register for SRIOV virtual function Sheng Yang
2009-03-18 10:38 ` [PATCH 0/16 v6] Device assignment improvement in userspace Avi Kivity
-- strict thread matches above, loose matches on Subject: below --
2009-03-12 13:36 [PATCH 0/16 v5] " Sheng Yang
2009-03-12 13:36 ` [PATCH 13/16] kvm: enable MSI-X capabilty for assigned device Sheng Yang
2009-03-16 8:32 ` Sheng Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200904081026.02816.sheng@linux.intel.com \
--to=sheng@linux.intel.com \
--cc=alex.williamson@hp.com \
--cc=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.