Message ID | 20200525084511.51379-1-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v1] pc: Support coldplugging of virtio-pmem-pci devices on all buses | expand |
> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices > results in > "virtio-pmem-pci not supported on this bus" > > Reasons is, that the bus does not support hotplug and, therefore, does > not have a hotplug handler. Let's allow coldplugging virtio-pmem devices > on such buses. The hotplug order is only relevant for virtio-pmem-pci > when the guest is already alive and the device is visible before > memory_device_plug() wired up the memory device bits. > > Hotplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Hotunplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Reported-by: Vivek Goyal <vgoyal@redhat.com> > Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> > Cc: Igor Mammedov <imammedo@redhat.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Richard Henderson <rth@twiddle.net> > Cc: Eduardo Habkost <ehabkost@redhat.com> > Cc: "Michael S. Tsirkin" <mst@redhat.com> > Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > hw/i386/pc.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 2128f3d6fe..c740495eb6 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1663,13 +1663,13 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, > HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev); > Error *local_err = NULL; > > - if (!hotplug_dev2) { > + if (!hotplug_dev2 && dev->hotplugged) { > /* > * Without a bus hotplug handler, we cannot control the plug/unplug > - * order. This should never be the case on x86, however better add > - * a safety net. > + * order. We should never reach this point when hotplugging on x86, > + * however, better add a safety net. > */ > - error_setg(errp, "virtio-pmem-pci not supported on this bus."); > + error_setg(errp, "virtio-pmem-pci hotplug not supported on this bus."); > return; > } > /* > @@ -1678,7 +1678,7 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, > */ > memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL, > &local_err); > - if (!local_err) { > + if (!local_err && hotplug_dev2) { > hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err); > } > error_propagate(errp, local_err); > @@ -1696,9 +1696,11 @@ static void pc_virtio_pmem_pci_plug(HotplugHandler *hotplug_dev, > * device bits. > */ > memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > - hotplug_handler_plug(hotplug_dev2, dev, &local_err); > - if (local_err) { > - memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > + if (hotplug_dev2) { > + hotplug_handler_plug(hotplug_dev2, dev, &local_err); > + if (local_err) { > + memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > + } > } > error_propagate(errp, local_err); > } This looks good to me & will allow to cold-plug the virtio-pmem device on bus if they don't support hot-plug. Reviewed-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: > E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices > results in > "virtio-pmem-pci not supported on this bus" > > Reasons is, that the bus does not support hotplug and, therefore, does > not have a hotplug handler. Let's allow coldplugging virtio-pmem devices > on such buses. The hotplug order is only relevant for virtio-pmem-pci > when the guest is already alive and the device is visible before > memory_device_plug() wired up the memory device bits. > > Hotplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Hotunplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Reported-by: Vivek Goyal <vgoyal@redhat.com> > Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> > Cc: Igor Mammedov <imammedo@redhat.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Richard Henderson <rth@twiddle.net> > Cc: Eduardo Habkost <ehabkost@redhat.com> > Cc: "Michael S. Tsirkin" <mst@redhat.com> > Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > hw/i386/pc.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) Thanks for the patch David. I still seem to face a different error though. 2020-05-26T13:26:05.720617Z qemu-system-x86_64: -device virtio-pmem-pci,memdev=pmem1,id=nv1: memory devices (e.g. for memory hotplug) are not enabled, please specify the maxmem option Following is my domain xml file. Vivek
On 26.05.20 15:28, Vivek Goyal wrote: > On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: >> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices >> results in >> "virtio-pmem-pci not supported on this bus" >> >> Reasons is, that the bus does not support hotplug and, therefore, does >> not have a hotplug handler. Let's allow coldplugging virtio-pmem devices >> on such buses. The hotplug order is only relevant for virtio-pmem-pci >> when the guest is already alive and the device is visible before >> memory_device_plug() wired up the memory device bits. >> >> Hotplug attempts will still fail with: >> "Error: Bus 'pcie.0' does not support hotplugging" >> >> Hotunplug attempts will still fail with: >> "Error: Bus 'pcie.0' does not support hotplugging" >> >> Reported-by: Vivek Goyal <vgoyal@redhat.com> >> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> >> Cc: Igor Mammedov <imammedo@redhat.com> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: Richard Henderson <rth@twiddle.net> >> Cc: Eduardo Habkost <ehabkost@redhat.com> >> Cc: "Michael S. Tsirkin" <mst@redhat.com> >> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> >> Signed-off-by: David Hildenbrand <david@redhat.com> >> --- >> hw/i386/pc.c | 18 ++++++++++-------- >> 1 file changed, 10 insertions(+), 8 deletions(-) > > Thanks for the patch David. I still seem to face a different error though. > > 2020-05-26T13:26:05.720617Z qemu-system-x86_64: -device virtio-pmem-pci,memdev=pmem1,id=nv1: memory devices (e.g. for memory hotplug) are not enabled, please specify the maxmem option > > Following is my domain xml file. > > Vivek Hi Vivek, you have to declare the maxMemory option. Memory devices like virtio-pmem-pci reside in RAM like a pc-dimm or a nvdimm. If your virtio-pmem device will be 4GB, you have to add that to maxMemory. <memory unit='GiB'>64</memory> <maxMemory unit='GiB'>68</maxMemory> <currentMemory unit='GiB'>64</currentMemory> (you might have to add "slots='0'" or "slots='1'" to maxMemory to make libvirt happy) @Pankaj, do we have a virtio-pmem doc somewhere describing how to set it up?
On Tue, May 26, 2020 at 03:44:10PM +0200, David Hildenbrand wrote: > On 26.05.20 15:28, Vivek Goyal wrote: > > On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: > >> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices > >> results in > >> "virtio-pmem-pci not supported on this bus" > >> > >> Reasons is, that the bus does not support hotplug and, therefore, does > >> not have a hotplug handler. Let's allow coldplugging virtio-pmem devices > >> on such buses. The hotplug order is only relevant for virtio-pmem-pci > >> when the guest is already alive and the device is visible before > >> memory_device_plug() wired up the memory device bits. > >> > >> Hotplug attempts will still fail with: > >> "Error: Bus 'pcie.0' does not support hotplugging" > >> > >> Hotunplug attempts will still fail with: > >> "Error: Bus 'pcie.0' does not support hotplugging" > >> > >> Reported-by: Vivek Goyal <vgoyal@redhat.com> > >> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> > >> Cc: Igor Mammedov <imammedo@redhat.com> > >> Cc: Paolo Bonzini <pbonzini@redhat.com> > >> Cc: Richard Henderson <rth@twiddle.net> > >> Cc: Eduardo Habkost <ehabkost@redhat.com> > >> Cc: "Michael S. Tsirkin" <mst@redhat.com> > >> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> > >> Signed-off-by: David Hildenbrand <david@redhat.com> > >> --- > >> hw/i386/pc.c | 18 ++++++++++-------- > >> 1 file changed, 10 insertions(+), 8 deletions(-) > > > > Thanks for the patch David. I still seem to face a different error though. > > > > 2020-05-26T13:26:05.720617Z qemu-system-x86_64: -device virtio-pmem-pci,memdev=pmem1,id=nv1: memory devices (e.g. for memory hotplug) are not enabled, please specify the maxmem option > > > > Following is my domain xml file. > > > > Vivek > > Hi Vivek, > > you have to declare the maxMemory option. Memory devices like > virtio-pmem-pci reside in RAM like a pc-dimm or a nvdimm. If your > virtio-pmem device will be 4GB, you have to add that to maxMemory. > > <memory unit='GiB'>64</memory> > <maxMemory unit='GiB'>68</maxMemory> > <currentMemory unit='GiB'>64</currentMemory> > > (you might have to add "slots='0'" or "slots='1'" to maxMemory to make > libvirt happy) Ok, tried that. <maxMemory slots='1' unit='KiB'>134217728</maxMemory> And now it complains about. error: unsupported configuration: At least one numa node has to be configured when enabling memory hotplug So ultimately it seems to be wanting me to somehow enable memory hotplug to be able to use virtio-pmem? Thanks Vivek > > @Pankaj, do we have a virtio-pmem doc somewhere describing how to set it up? > > -- > Thanks, > > David / dhildenb
On 26.05.20 16:22, Vivek Goyal wrote: > On Tue, May 26, 2020 at 03:44:10PM +0200, David Hildenbrand wrote: >> On 26.05.20 15:28, Vivek Goyal wrote: >>> On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: >>>> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices >>>> results in >>>> "virtio-pmem-pci not supported on this bus" >>>> >>>> Reasons is, that the bus does not support hotplug and, therefore, does >>>> not have a hotplug handler. Let's allow coldplugging virtio-pmem devices >>>> on such buses. The hotplug order is only relevant for virtio-pmem-pci >>>> when the guest is already alive and the device is visible before >>>> memory_device_plug() wired up the memory device bits. >>>> >>>> Hotplug attempts will still fail with: >>>> "Error: Bus 'pcie.0' does not support hotplugging" >>>> >>>> Hotunplug attempts will still fail with: >>>> "Error: Bus 'pcie.0' does not support hotplugging" >>>> >>>> Reported-by: Vivek Goyal <vgoyal@redhat.com> >>>> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> >>>> Cc: Igor Mammedov <imammedo@redhat.com> >>>> Cc: Paolo Bonzini <pbonzini@redhat.com> >>>> Cc: Richard Henderson <rth@twiddle.net> >>>> Cc: Eduardo Habkost <ehabkost@redhat.com> >>>> Cc: "Michael S. Tsirkin" <mst@redhat.com> >>>> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> >>>> Signed-off-by: David Hildenbrand <david@redhat.com> >>>> --- >>>> hw/i386/pc.c | 18 ++++++++++-------- >>>> 1 file changed, 10 insertions(+), 8 deletions(-) >>> >>> Thanks for the patch David. I still seem to face a different error though. >>> >>> 2020-05-26T13:26:05.720617Z qemu-system-x86_64: -device virtio-pmem-pci,memdev=pmem1,id=nv1: memory devices (e.g. for memory hotplug) are not enabled, please specify the maxmem option >>> >>> Following is my domain xml file. >>> >>> Vivek >> >> Hi Vivek, >> >> you have to declare the maxMemory option. Memory devices like >> virtio-pmem-pci reside in RAM like a pc-dimm or a nvdimm. If your >> virtio-pmem device will be 4GB, you have to add that to maxMemory. >> >> <memory unit='GiB'>64</memory> >> <maxMemory unit='GiB'>68</maxMemory> >> <currentMemory unit='GiB'>64</currentMemory> >> >> (you might have to add "slots='0'" or "slots='1'" to maxMemory to make >> libvirt happy) > > Ok, tried that. > > <maxMemory slots='1' unit='KiB'>134217728</maxMemory> > > And now it complains about. > > error: unsupported configuration: At least one numa node has to be configured when enabling memory hotplug > > So ultimately it seems to be wanting me to somehow enable memory hotplug > to be able to use virtio-pmem? That's a libvirt error message. Maybe I am confused how libvirt maps these parameters to QEMU ... NVDIMMs under libvirt seem to be easy: https://www.redhat.com/archives/libvir-list/2016-August/msg00055.html Maybe the issue is that virtio-pmem has not been properly integrated into libvirt yet: https://www.redhat.com/archives/libvir-list/2019-August/msg00007.html And you attempts to force virtio-pmem in via qemu args does not work properly. Maybe maxMemory in libvirt does not directly map to the QEMU variant to define the maximum physical address space reserved also for any memory devices (DIMMs, NVDIMMs, virtio-pmem, ...). Any libvirt experts that can help? @Pankaj, did you ever get it to run with libvirt? > > Thanks > Vivek
On Tue, May 26, 2020 at 04:43:35PM +0200, David Hildenbrand wrote: > On 26.05.20 16:22, Vivek Goyal wrote: > > On Tue, May 26, 2020 at 03:44:10PM +0200, David Hildenbrand wrote: > >> On 26.05.20 15:28, Vivek Goyal wrote: > >>> On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: > >>>> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices > >>>> results in > >>>> "virtio-pmem-pci not supported on this bus" > >>>> > >>>> Reasons is, that the bus does not support hotplug and, therefore, does > >>>> not have a hotplug handler. Let's allow coldplugging virtio-pmem devices > >>>> on such buses. The hotplug order is only relevant for virtio-pmem-pci > >>>> when the guest is already alive and the device is visible before > >>>> memory_device_plug() wired up the memory device bits. > >>>> > >>>> Hotplug attempts will still fail with: > >>>> "Error: Bus 'pcie.0' does not support hotplugging" > >>>> > >>>> Hotunplug attempts will still fail with: > >>>> "Error: Bus 'pcie.0' does not support hotplugging" > >>>> > >>>> Reported-by: Vivek Goyal <vgoyal@redhat.com> > >>>> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> > >>>> Cc: Igor Mammedov <imammedo@redhat.com> > >>>> Cc: Paolo Bonzini <pbonzini@redhat.com> > >>>> Cc: Richard Henderson <rth@twiddle.net> > >>>> Cc: Eduardo Habkost <ehabkost@redhat.com> > >>>> Cc: "Michael S. Tsirkin" <mst@redhat.com> > >>>> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> > >>>> Signed-off-by: David Hildenbrand <david@redhat.com> > >>>> --- > >>>> hw/i386/pc.c | 18 ++++++++++-------- > >>>> 1 file changed, 10 insertions(+), 8 deletions(-) > >>> > >>> Thanks for the patch David. I still seem to face a different error though. > >>> > >>> 2020-05-26T13:26:05.720617Z qemu-system-x86_64: -device virtio-pmem-pci,memdev=pmem1,id=nv1: memory devices (e.g. for memory hotplug) are not enabled, please specify the maxmem option > >>> > >>> Following is my domain xml file. > >>> > >>> Vivek > >> > >> Hi Vivek, > >> > >> you have to declare the maxMemory option. Memory devices like > >> virtio-pmem-pci reside in RAM like a pc-dimm or a nvdimm. If your > >> virtio-pmem device will be 4GB, you have to add that to maxMemory. > >> > >> <memory unit='GiB'>64</memory> > >> <maxMemory unit='GiB'>68</maxMemory> > >> <currentMemory unit='GiB'>64</currentMemory> > >> > >> (you might have to add "slots='0'" or "slots='1'" to maxMemory to make > >> libvirt happy) > > > > Ok, tried that. > > > > <maxMemory slots='1' unit='KiB'>134217728</maxMemory> > > > > And now it complains about. > > > > error: unsupported configuration: At least one numa node has to be configured when enabling memory hotplug > > > > So ultimately it seems to be wanting me to somehow enable memory hotplug > > to be able to use virtio-pmem? > > That's a libvirt error message. Maybe I am confused how libvirt maps > these parameters to QEMU ... > > NVDIMMs under libvirt seem to be easy: > > https://www.redhat.com/archives/libvir-list/2016-August/msg00055.html > > Maybe the issue is that virtio-pmem has not been properly integrated > into libvirt yet: > > https://www.redhat.com/archives/libvir-list/2019-August/msg00007.html While libvirt has generic pmem support, it doesn't have virtio-pmem: https://libvirt.org/formatdomain.html#elementsMemory eg <memory model='nvdimm' access='shared'> <uuid> <source> <path>/dev/dax0.0</path> <alignsize unit='KiB'>2048</alignsize> <pmem/> </source> <target> <size unit='KiB'>524288</size> <node>1</node> <label> <size unit='KiB'>128</size> </label> </target> </memory> > Maybe maxMemory in libvirt does not directly map to the QEMU variant to > define the maximum physical address space reserved also for any memory > devices (DIMMs, NVDIMMs, virtio-pmem, ...). Any libvirt experts that can > help? <maxMemory> reflects the upper limit on what you can hot-plug at runtime: https://libvirt.org/formatdomain.html#elementsMemoryAllocation Regards, Daniel
Hi David, Vivek, s > >> Hi Vivek, > >> > >> you have to declare the maxMemory option. Memory devices like > >> virtio-pmem-pci reside in RAM like a pc-dimm or a nvdimm. If your > >> virtio-pmem device will be 4GB, you have to add that to maxMemory. > >> > >> <memory unit='GiB'>64</memory> > >> <maxMemory unit='GiB'>68</maxMemory> > >> <currentMemory unit='GiB'>64</currentMemory> > >> > >> (you might have to add "slots='0'" or "slots='1'" to maxMemory to make > >> libvirt happy) > > > > Ok, tried that. > > > > <maxMemory slots='1' unit='KiB'>134217728</maxMemory> > > > > And now it complains about. > > > > error: unsupported configuration: At least one numa node has to be configured when enabling memory hotplug > > > > So ultimately it seems to be wanting me to somehow enable memory hotplug > > to be able to use virtio-pmem? > > That's a libvirt error message. Maybe I am confused how libvirt maps > these parameters to QEMU ... > > NVDIMMs under libvirt seem to be easy: > > https://www.redhat.com/archives/libvir-list/2016-August/msg00055.html > > Maybe the issue is that virtio-pmem has not been properly integrated > into libvirt yet: > > https://www.redhat.com/archives/libvir-list/2019-August/msg00007.html > > And you attempts to force virtio-pmem in via qemu args does not work > properly. > > Maybe maxMemory in libvirt does not directly map to the QEMU variant to > define the maximum physical address space reserved also for any memory > devices (DIMMs, NVDIMMs, virtio-pmem, ...). Any libvirt experts that can > help? > > @Pankaj, did you ever get it to run with libvirt? I did not run virtio-pmem with libvirt. That requires work at libvirt side. Created [1] document to run from Qemu command line. [1] https://github.com/qemu/qemu/blob/master/docs/virtio-pmem.rst
On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: > E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices > results in > "virtio-pmem-pci not supported on this bus" > > Reasons is, that the bus does not support hotplug and, therefore, does > not have a hotplug handler. Let's allow coldplugging virtio-pmem devices > on such buses. The hotplug order is only relevant for virtio-pmem-pci > when the guest is already alive and the device is visible before > memory_device_plug() wired up the memory device bits. > > Hotplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Hotunplug attempts will still fail with: > "Error: Bus 'pcie.0' does not support hotplugging" > > Reported-by: Vivek Goyal <vgoyal@redhat.com> > Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> > Cc: Igor Mammedov <imammedo@redhat.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Richard Henderson <rth@twiddle.net> > Cc: Eduardo Habkost <ehabkost@redhat.com> > Cc: "Michael S. Tsirkin" <mst@redhat.com> > Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> > Signed-off-by: David Hildenbrand <david@redhat.com> I assume you are still debugging Vivek's issues, right? Let me know when you feel it's time to merge this ... > --- > hw/i386/pc.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 2128f3d6fe..c740495eb6 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1663,13 +1663,13 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, > HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev); > Error *local_err = NULL; > > - if (!hotplug_dev2) { > + if (!hotplug_dev2 && dev->hotplugged) { > /* > * Without a bus hotplug handler, we cannot control the plug/unplug > - * order. This should never be the case on x86, however better add > - * a safety net. > + * order. We should never reach this point when hotplugging on x86, > + * however, better add a safety net. > */ > - error_setg(errp, "virtio-pmem-pci not supported on this bus."); > + error_setg(errp, "virtio-pmem-pci hotplug not supported on this bus."); > return; > } > /* > @@ -1678,7 +1678,7 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, > */ > memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL, > &local_err); > - if (!local_err) { > + if (!local_err && hotplug_dev2) { > hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err); > } > error_propagate(errp, local_err); > @@ -1696,9 +1696,11 @@ static void pc_virtio_pmem_pci_plug(HotplugHandler *hotplug_dev, > * device bits. > */ > memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > - hotplug_handler_plug(hotplug_dev2, dev, &local_err); > - if (local_err) { > - memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > + if (hotplug_dev2) { > + hotplug_handler_plug(hotplug_dev2, dev, &local_err); > + if (local_err) { > + memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); > + } > } > error_propagate(errp, local_err); > } > -- > 2.25.4
On 09.06.20 17:47, Michael S. Tsirkin wrote: > On Mon, May 25, 2020 at 10:45:11AM +0200, David Hildenbrand wrote: >> E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices >> results in >> "virtio-pmem-pci not supported on this bus" >> >> Reasons is, that the bus does not support hotplug and, therefore, does >> not have a hotplug handler. Let's allow coldplugging virtio-pmem devices >> on such buses. The hotplug order is only relevant for virtio-pmem-pci >> when the guest is already alive and the device is visible before >> memory_device_plug() wired up the memory device bits. >> >> Hotplug attempts will still fail with: >> "Error: Bus 'pcie.0' does not support hotplugging" >> >> Hotunplug attempts will still fail with: >> "Error: Bus 'pcie.0' does not support hotplugging" >> >> Reported-by: Vivek Goyal <vgoyal@redhat.com> >> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> >> Cc: Igor Mammedov <imammedo@redhat.com> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: Richard Henderson <rth@twiddle.net> >> Cc: Eduardo Habkost <ehabkost@redhat.com> >> Cc: "Michael S. Tsirkin" <mst@redhat.com> >> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> >> Signed-off-by: David Hildenbrand <david@redhat.com> > > I assume you are still debugging Vivek's issues, right? > Let me know when you feel it's time to merge this ... The remain issue is lack of libvirt support. This is good to be merged from my point of view. Thanks!
diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 2128f3d6fe..c740495eb6 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1663,13 +1663,13 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev); Error *local_err = NULL; - if (!hotplug_dev2) { + if (!hotplug_dev2 && dev->hotplugged) { /* * Without a bus hotplug handler, we cannot control the plug/unplug - * order. This should never be the case on x86, however better add - * a safety net. + * order. We should never reach this point when hotplugging on x86, + * however, better add a safety net. */ - error_setg(errp, "virtio-pmem-pci not supported on this bus."); + error_setg(errp, "virtio-pmem-pci hotplug not supported on this bus."); return; } /* @@ -1678,7 +1678,7 @@ static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, */ memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL, &local_err); - if (!local_err) { + if (!local_err && hotplug_dev2) { hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err); } error_propagate(errp, local_err); @@ -1696,9 +1696,11 @@ static void pc_virtio_pmem_pci_plug(HotplugHandler *hotplug_dev, * device bits. */ memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); - hotplug_handler_plug(hotplug_dev2, dev, &local_err); - if (local_err) { - memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + if (hotplug_dev2) { + hotplug_handler_plug(hotplug_dev2, dev, &local_err); + if (local_err) { + memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + } } error_propagate(errp, local_err); }
E.g., with "pc-q35-4.2", trying to coldplug a virtio-pmem-pci devices results in "virtio-pmem-pci not supported on this bus" Reasons is, that the bus does not support hotplug and, therefore, does not have a hotplug handler. Let's allow coldplugging virtio-pmem devices on such buses. The hotplug order is only relevant for virtio-pmem-pci when the guest is already alive and the device is visible before memory_device_plug() wired up the memory device bits. Hotplug attempts will still fail with: "Error: Bus 'pcie.0' does not support hotplugging" Hotunplug attempts will still fail with: "Error: Bus 'pcie.0' does not support hotplugging" Reported-by: Vivek Goyal <vgoyal@redhat.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Richard Henderson <rth@twiddle.net> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Signed-off-by: David Hildenbrand <david@redhat.com> --- hw/i386/pc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)