<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 12/21/2015 08:29 AM, Ziviani .
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAH=L8t0QZK67qUYgo6dhHWLGj30YCX5_+Swbk3utQzzGP_JvgQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_default" style="font-family:'courier
          new',monospace;font-size:small;color:rgb(11,83,148)">Hello
          list!</div>
        <div class="gmail_default" style="font-family:'courier
          new',monospace;font-size:small;color:rgb(11,83,148)"><br>
        </div>
        <div class="gmail_default" style="font-family:'courier
          new',monospace;font-size:small;color:rgb(11,83,148)">I'm new
          here and interested in hot-plug multi-function PCI devices.
          Basically I'd like to know why Libvirt does not support it.
          I've been through the archives and basically found this
          thread:</div>
        <div class="gmail_default" style="font-family:'courier
          new',monospace;font-size:small;color:rgb(11,83,148)"><br>
        </div>
        <div class="gmail_default"><font face="courier new, monospace"
            color="#0b5394"><a moz-do-not-send="true"
href="https://www.redhat.com/archives/libvir-list/2011-May/msg00457.html"
              target="_blank">https://www.redhat.com/archives/libvir-list/2011-May/msg00457.html</a></font><br>
        </div>
        <div class="gmail_default"><br>
        </div>
        <div class="gmail_default"><font face="courier new, monospace"
            color="#0b5394">But Qemu seems to handle it accordingly:</font></div>
        <div class="gmail_default"><font face="courier new, monospace"
            color="#0b5394">
            <div class="gmail_default">virsh qemu-monitor-command --hmp
              fedora-23 'device_add vfio-pci,host=00:16.0,addr=08.0'</div>
            <div class="gmail_default">virsh qemu-monitor-command --hmp
              fedora-23 'device_add vfio-pci,host=00:16.3,addr=08.3'</div>
            <div class="gmail_default"><br>
            </div>
            <div class="gmail_default">GUEST:</div>
            <div class="gmail_default">
              <div class="gmail_default"># lspci</div>
              <div class="gmail_default">(snip)</div>
              <div class="gmail_default">00:08.0 Communication
                controller: Intel Corporation 8 Series HECI #0 (rev 04)<br>
              </div>
              <div class="gmail_default">00:08.3 Serial controller:
                Intel Corporation 8 Series HECI KT (rev 04)</div>
              <div><br>
              </div>
            </div>
            <div class="gmail_default">However, using Libvirt:<br>
            </div>
            <div class="gmail_default"><br>
            </div>
            <div class="gmail_default">
              <div class="gmail_default">% virsh attach-device fedora-23
                pci_0000_00_16_0.xml --live</div>
              <div class="gmail_default">Device attached successfully</div>
              <div class="gmail_default"><br>
              </div>
              <div class="gmail_default">% virsh attach-device fedora-23
                pci_0000_00_16_3.xml --live<br>
              </div>
              <div class="gmail_default">error: Failed to attach device
                from pci_0000_00_16_3.xml</div>
              <div class="gmail_default">error: internal error: Only PCI
                device addresses with function=0 are supported</div>
              <div><br>
              </div>
              <div>I made some changes on domain_addr.c[1] for testing
                and it worked.</div>
              <div><br>
              </div>
              <div>[1]<a moz-do-not-send="true"
                  href="https://gist.github.com/jrziviani/1da184c7fd0b413e0426">https://gist.github.com/jrziviani/1da184c7fd0b413e0426</a></div>
              <div><br>
              </div>
              <div>
                <div>% virsh attach-device fedora-23
                  pci_0000_00_16_3.xml --live</div>
                <div>Device attached successfully</div>
              </div>
              <div><br>
              </div>
              <div>
                <div class="gmail_default">GUEST:</div>
                <div class="gmail_default">
                  <div class="gmail_default"># lspci</div>
                  <div class="gmail_default">(snip)</div>
                  <div class="gmail_default">00:08.0 Communication
                    controller: Intel Corporation 8 Series HECI #0 (rev
                    04)<br>
                  </div>
                  <div class="gmail_default">00:08.3 Serial controller:
                    Intel Corporation 8 Series HECI KT (rev 04)</div>
                  <div class="gmail_default"><br>
                  </div>
                  <div class="gmail_default">So there is more to it that
                    I'm not aware?</div>
                </div>
              </div>
            </div>
          </font></div>
      </div>
    </blockquote>
    <br>
    <font color="#0b5394"><font face="courier new, monospace">You're
        relying on behavior in the guest OS for which there is no
        standard (and which, by definition, doesn't work on real
        hardware, so no guest OS will be expecting it; a friend more
        familiar with this has told me that probably qemu is sending an
        (acpi?) "device check" to the guest for each function that is
        added, and in your case it's apparently "doing the right thing"
        in response to that). But just because it is successful in this
        one case doesn't mean that it will be successful in all
        situations; likely it won't be. So while the qemu monitor takes
        the laissez-faire approach of allowing you to try it and letting
        you pick up the pieces when it fails, libvirt prevents it
        because it is bound to fail, and thus not supportable.<br>
        <br>
        There has recently been some work in qemu to "save up" any
        requests to attach devices with function > 0, then present
        them all to the guest at once when function 0 is attached. This
        is the only standard way to handle hotplug of multiple functions
        in a slot. Hot unplug can only happen for all functions in the
        slot at once. I'm not sure of the current status of that work,
        but once it is in and stable, libvirt will support it.<br>
        <br>
      </font></font>
    <blockquote
cite="mid:CAH=L8t0QZK67qUYgo6dhHWLGj30YCX5_+Swbk3utQzzGP_JvgQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_default"><font face="courier new, monospace"
            color="#0b5394">
            <div class="gmail_default">
              <div><br>
              </div>
              <div>Thank you!<br>
              </div>
            </div>
          </font></div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">--
libvir-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:libvir-list@redhat.com">libvir-list@redhat.com</a>
<a class="moz-txt-link-freetext" href="https://www.redhat.com/mailman/listinfo/libvir-list">https://www.redhat.com/mailman/listinfo/libvir-list</a></pre>
    </blockquote>
    <br>
  </body>
</html>