In the context of PV-on-HVM under Xen, the emulated nics are supposed to be unplug before the guest drivers are initialized, when the guest write to a specific IO port. Without this patch, the guest end up with two nics with the same MAC, the emulated nic and the PV nic. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- hw/xen_platform.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/hw/xen_platform.c b/hw/xen_platform.c index a9c52a6..0214f37 100644 --- a/hw/xen_platform.c +++ b/hw/xen_platform.c @@ -87,7 +87,10 @@ static void unplug_nic(PCIBus *b, PCIDevice *d) { if (pci_get_word(d->config + PCI_CLASS_DEVICE) = PCI_CLASS_NETWORK_ETHERNET) { - qdev_unplug(&(d->qdev), NULL); + /* Until qdev_free includes a call to object_unparent, we call it here + */ + object_unparent(&d->qdev.parent_obj); + qdev_free(&d->qdev); } } -- Anthony PERARD
On Wed, 16 May 2012, Anthony PERARD wrote:> In the context of PV-on-HVM under Xen, the emulated nics are supposed to be > unplug before the guest drivers are initialized, when the guest write to a > specific IO port. > > Without this patch, the guest end up with two nics with the same MAC, the > emulated nic and the PV nic. > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > ---I think that the patch is correct and a good candidate for rc3. Any comments?> hw/xen_platform.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/hw/xen_platform.c b/hw/xen_platform.c > index a9c52a6..0214f37 100644 > --- a/hw/xen_platform.c > +++ b/hw/xen_platform.c > @@ -87,7 +87,10 @@ static void unplug_nic(PCIBus *b, PCIDevice *d) > { > if (pci_get_word(d->config + PCI_CLASS_DEVICE) => PCI_CLASS_NETWORK_ETHERNET) { > - qdev_unplug(&(d->qdev), NULL); > + /* Until qdev_free includes a call to object_unparent, we call it here > + */ > + object_unparent(&d->qdev.parent_obj); > + qdev_free(&d->qdev); > } > } > > -- > Anthony PERARD >
Il 17/05/2012 12:35, Stefano Stabellini ha scritto:> On Wed, 16 May 2012, Anthony PERARD wrote: >> In the context of PV-on-HVM under Xen, the emulated nics are supposed to be >> unplug before the guest drivers are initialized, when the guest write to a >> specific IO port. >> >> Without this patch, the guest end up with two nics with the same MAC, the >> emulated nic and the PV nic. >> >> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> >> --- > > I think that the patch is correct and a good candidate for rc3. Any > comments?Yes, it''s certainly nice when patches become as simple as this one. :) Acked-by: Paolo Bonzini <pbonzini@redhat.com>> >> hw/xen_platform.c | 5 ++++- >> 1 files changed, 4 insertions(+), 1 deletions(-) >> >> diff --git a/hw/xen_platform.c b/hw/xen_platform.c >> index a9c52a6..0214f37 100644 >> --- a/hw/xen_platform.c >> +++ b/hw/xen_platform.c >> @@ -87,7 +87,10 @@ static void unplug_nic(PCIBus *b, PCIDevice *d) >> { >> if (pci_get_word(d->config + PCI_CLASS_DEVICE) =>> PCI_CLASS_NETWORK_ETHERNET) { >> - qdev_unplug(&(d->qdev), NULL); >> + /* Until qdev_free includes a call to object_unparent, we call it here >> + */ >> + object_unparent(&d->qdev.parent_obj); >> + qdev_free(&d->qdev); >> } >> } >> >> -- >> Anthony PERARD >>
On Wed, 16 May 2012, Anthony PERARD wrote:> In the context of PV-on-HVM under Xen, the emulated nics are supposed to be > unplug before the guest drivers are initialized, when the guest write to a > specific IO port. > > Without this patch, the guest end up with two nics with the same MAC, the > emulated nic and the PV nic. > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>Is this patch required in qemu-upstream-unstable.git too? If so, could you please provide a backport?> hw/xen_platform.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/hw/xen_platform.c b/hw/xen_platform.c > index a9c52a6..0214f37 100644 > --- a/hw/xen_platform.c > +++ b/hw/xen_platform.c > @@ -87,7 +87,10 @@ static void unplug_nic(PCIBus *b, PCIDevice *d) > { > if (pci_get_word(d->config + PCI_CLASS_DEVICE) => PCI_CLASS_NETWORK_ETHERNET) { > - qdev_unplug(&(d->qdev), NULL); > + /* Until qdev_free includes a call to object_unparent, we call it here > + */ > + object_unparent(&d->qdev.parent_obj); > + qdev_free(&d->qdev); > } > } > > -- > Anthony PERARD >
On Fri, May 18, 2012 at 2:37 PM, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote:> On Wed, 16 May 2012, Anthony PERARD wrote: >> In the context of PV-on-HVM under Xen, the emulated nics are supposed to be >> unplug before the guest drivers are initialized, when the guest write to a >> specific IO port. >> >> Without this patch, the guest end up with two nics with the same MAC, the >> emulated nic and the PV nic. >> >> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > > Is this patch required in qemu-upstream-unstable.git too? > If so, could you please provide a backport?Yes, a patch is also needed for our qemu stable tree. I''ll send a patch. -- Anthony PERARD