<div dir="ltr">Now in my staging branch, sorry.<div><br></div><div>Ross</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 21 December 2016 at 07:01, He Zhe <span dir="ltr">&lt;<a href="mailto:zhe.he@windriver.com" target="_blank">zhe.he@windriver.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ping.<br>
<span class="HOEnZb"><font color="#888888"><br>
Zhe<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On 11/29/2016 05:56 PM, <a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a> wrote:<br>
&gt; From: He Zhe &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;<br>
&gt;<br>
&gt; Fix iommu pci device assignment failure.<br>
&gt;<br>
&gt; &quot;qemu-system-x86_64: -device pci-assign,host=02:00.0: No IOMMU found.<br>
&gt; Unable to assign device &quot;(null)&quot;&quot;<br>
&gt;<br>
&gt; Signed-off-by: He Zhe &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;<br>
&gt; ---<br>
&gt;  ...sync-MSI-MSI-X-cap-and-<wbr>table-with-PCIDevi.patch | 71 ++++++++++++++++++++++<br>
&gt;  meta/recipes-devtools/qemu/<a href="http://qemu_2.7.0.bb" rel="noreferrer" target="_blank">qem<wbr>u_2.7.0.bb</a>           |  1 +<br>
&gt;  2 files changed, 72 insertions(+)<br>
&gt;  create mode 100644 meta/recipes-devtools/qemu/<wbr>qemu/0001-pci-assign-sync-MSI-<wbr>MSI-X-cap-and-table-with-<wbr>PCIDevi.patch<br>
&gt;<br>
&gt; diff --git a/meta/recipes-devtools/qemu/<wbr>qemu/0001-pci-assign-sync-MSI-<wbr>MSI-X-cap-and-table-with-<wbr>PCIDevi.patch b/meta/recipes-devtools/qemu/<wbr>qemu/0001-pci-assign-sync-MSI-<wbr>MSI-X-cap-and-table-with-<wbr>PCIDevi.patch<br>
&gt; new file mode 100644<br>
&gt; index 0000000..03472dd<br>
&gt; --- /dev/null<br>
&gt; +++ b/meta/recipes-devtools/qemu/<wbr>qemu/0001-pci-assign-sync-MSI-<wbr>MSI-X-cap-and-table-with-<wbr>PCIDevi.patch<br>
&gt; @@ -0,0 +1,71 @@<br>
&gt; +From 6baa545df93253fced4fc0d52b14b9<wbr>8447e00473 Mon Sep 17 00:00:00 2001<br>
&gt; +From: Peter Xu &lt;<a href="mailto:peterx@redhat.com">peterx@redhat.com</a>&gt;<br>
&gt; +Date: Mon, 28 Nov 2016 15:02:44 +0800<br>
&gt; +Subject: [PATCH] pci-assign: sync MSI/MSI-X cap and table with PCIDevice<br>
&gt; +<br>
&gt; +Since commit e1d4fb2d (&quot;kvm-irqchip: x86: add msi route notify fn&quot;),<br>
&gt; +kvm_irqchip_add_msi_route() starts to use pci_get_msi_message() to fetch<br>
&gt; +MSI info. This requires that we setup MSI related fields in PCIDevice.<br>
&gt; +For most devices, that won&#39;t be a problem, as long as we are using<br>
&gt; +general interfaces like msi_init()/msix_init().<br>
&gt; +<br>
&gt; +However, for pci-assign devices, MSI/MSI-X is treated differently - PCI<br>
&gt; +assign devices are maintaining its own MSI table and cap information in<br>
&gt; +AssignedDevice struct. however that&#39;s not synced up with PCIDevice&#39;s<br>
&gt; +fields. That will leads to pci_get_msi_message() failed to find correct<br>
&gt; +MSI capability, even with an NULL msix_table.<br>
&gt; +<br>
&gt; +A quick fix is to sync up the two places: both the capability bits and<br>
&gt; +table address for MSI/MSI-X.<br>
&gt; +<br>
&gt; +Upstream-Status: Backport [<a href="https://lists.gnu.org/archive/html/qemu-devel/2016-11/msg04649.html" rel="noreferrer" target="_blank">https://lists.gnu.org/<wbr>archive/html/qemu-devel/2016-<wbr>11/msg04649.html</a>]<br>
&gt; +<br>
&gt; +Reported-by: Changlimin &lt;address@hidden&gt;<br>
&gt; +Tested-by: Changlimin &lt;address@hidden&gt;<br>
&gt; +Cc: address@hidden<br>
&gt; +Fixes: e1d4fb2d (&quot;kvm-irqchip: x86: add msi route notify fn&quot;)<br>
&gt; +Signed-off-by: Peter Xu &lt;address@hidden&gt;<br>
&gt; +Signed-off-by: He Zhe &lt;<a href="mailto:zhe.he@windriver.com">zhe.he@windriver.com</a>&gt;<br>
&gt; +---<br>
&gt; + hw/i386/kvm/pci-assign.c | 4 ++++<br>
&gt; + 1 file changed, 4 insertions(+)<br>
&gt; +<br>
&gt; +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c<br>
&gt; +index 8238fbc..87dcbdd 100644<br>
&gt; +--- a/hw/i386/kvm/pci-assign.c<br>
&gt; ++++ b/hw/i386/kvm/pci-assign.c<br>
&gt; +@@ -1251,6 +1251,7 @@ static int assigned_device_pci_cap_init(<wbr>PCIDevice *pci_dev, Error **errp)<br>
&gt; +             error_propagate(errp, local_err);<br>
&gt; +             return -ENOTSUP;<br>
&gt; +         }<br>
&gt; ++        dev-&gt;dev.cap_present |= QEMU_PCI_CAP_MSI;<br>
&gt; +         dev-&gt;cap.available |= ASSIGNED_DEVICE_CAP_MSI;<br>
&gt; +         /* Only 32-bit/no-mask currently supported */<br>
&gt; +         ret = pci_add_capability2(pci_dev, PCI_CAP_ID_MSI, pos, 10,<br>
&gt; +@@ -1285,6 +1286,7 @@ static int assigned_device_pci_cap_init(<wbr>PCIDevice *pci_dev, Error **errp)<br>
&gt; +             error_propagate(errp, local_err);<br>
&gt; +             return -ENOTSUP;<br>
&gt; +         }<br>
&gt; ++        dev-&gt;dev.cap_present |= QEMU_PCI_CAP_MSIX;<br>
&gt; +         dev-&gt;cap.available |= ASSIGNED_DEVICE_CAP_MSIX;<br>
&gt; +         ret = pci_add_capability2(pci_dev, PCI_CAP_ID_MSIX, pos, 12,<br>
&gt; +                                   &amp;local_err);<br>
&gt; +@@ -1648,6 +1650,7 @@ static void assigned_dev_register_msix_<wbr>mmio(AssignedDevice *dev, Error **errp)<br>
&gt; +         dev-&gt;msix_table = NULL;<br>
&gt; +         return;<br>
&gt; +     }<br>
&gt; ++    dev-&gt;dev.msix_table = (uint8_t *)dev-&gt;msix_table;<br>
&gt; +<br>
&gt; +     assigned_dev_msix_reset(dev);<br>
&gt; +<br>
&gt; +@@ -1665,6 +1668,7 @@ static void assigned_dev_unregister_msix_<wbr>mmio(AssignedDevice *dev)<br>
&gt; +         error_report(&quot;error unmapping msix_table! %s&quot;, strerror(errno));<br>
&gt; +     }<br>
&gt; +     dev-&gt;msix_table = NULL;<br>
&gt; ++    dev-&gt;dev.msix_table = NULL;<br>
&gt; + }<br>
&gt; +<br>
&gt; + static const VMStateDescription vmstate_assigned_device = {<br>
&gt; +--<br>
&gt; +2.8.3<br>
&gt; +<br>
&gt; diff --git a/meta/recipes-devtools/qemu/<a href="http://qemu_2.7.0.bb" rel="noreferrer" target="_blank">q<wbr>emu_2.7.0.bb</a> b/meta/recipes-devtools/qemu/<a href="http://qemu_2.7.0.bb" rel="noreferrer" target="_blank">q<wbr>emu_2.7.0.bb</a><br>
&gt; index cef181d..9da5134 100644<br>
&gt; --- a/meta/recipes-devtools/qemu/<a href="http://qemu_2.7.0.bb" rel="noreferrer" target="_blank">q<wbr>emu_2.7.0.bb</a><br>
&gt; +++ b/meta/recipes-devtools/qemu/<a href="http://qemu_2.7.0.bb" rel="noreferrer" target="_blank">q<wbr>emu_2.7.0.bb</a><br>
&gt; @@ -13,6 +13,7 @@ SRC_URI += &quot;file://configure-fix-Darwin-<wbr>target-detection.patch \<br>
&gt;              file://0002-fix-CVE-2016-7423.<wbr>patch \<br>
&gt;              file://0003-fix-CVE-2016-7908.<wbr>patch \<br>
&gt;              file://0004-fix-CVE-2016-7909.<wbr>patch \<br>
&gt; +            file://0001-pci-assign-sync-<wbr>MSI-MSI-X-cap-and-table-with-<wbr>PCIDevi.patch \<br>
&gt;  &quot;<br>
&gt;<br>
&gt;  SRC_URI_prepend = &quot;<a href="http://wiki.qemu-project.org/download/${BP}.tar.bz2" rel="noreferrer" target="_blank">http://wiki.qemu-project.org/<wbr>download/${BP}.tar.bz2</a>&quot;<br>
<br>
--<br>
</div></div><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.<wbr>openembedded.org</a><br>
<a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/<wbr>mailman/listinfo/openembedded-<wbr>core</a><br>
</div></div></blockquote></div><br></div>