qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 1/9] virtio-net: use aliases instead of dupli


From: Gonglei (Arei)
Subject: Re: [Qemu-devel] [PATCH v2 1/9] virtio-net: use aliases instead of duplicate qdev properties
Date: Mon, 15 Sep 2014 01:03:24 +0000

> On Tue, Sep 09, 2014 at 02:35:02PM +0800, address@hidden wrote:
> > From: Gonglei <address@hidden>
> >
> > virtio-net-pci, virtio-net-s390, and virtio-net-ccw all duplicate the
> > qdev properties of their VirtIONet child. This approach does not work
> > well with string or pointer properties since we must be careful about
> > leaking or double-freeing them.
> >
> > Use the QOM alias property to forward property accesses to the
> > VirtIONet child.  This way no duplication is necessary.
> >
> > Signed-off-by: Gonglei <address@hidden>
> > ---
> >  hw/s390x/s390-virtio-bus.c | 3 +--
> >  hw/s390x/virtio-ccw.c      | 3 +--
> >  hw/virtio/virtio-pci.c     | 3 +--
> >  3 files changed, 3 insertions(+), 6 deletions(-)
> >
> > diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
> > index 6b6fb61..5b5d595 100644
> > --- a/hw/s390x/s390-virtio-bus.c
> > +++ b/hw/s390x/s390-virtio-bus.c
> > @@ -161,6 +161,7 @@ static void s390_virtio_net_instance_init(Object
> *obj)
> >      VirtIONetS390 *dev = VIRTIO_NET_S390(obj);
> >      object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
> >      object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev),
> NULL);
> > +    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
> >  }
> >
> >  static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
> > @@ -493,10 +494,8 @@ static unsigned
> virtio_s390_get_features(DeviceState *d)
> >  /**************** S390 Virtio Bus Device Descriptions
> *******************/
> >
> >  static Property s390_virtio_net_properties[] = {
> > -    DEFINE_NIC_PROPERTIES(VirtIONetS390, vdev.nic_conf),
> >      DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device,
> host_features),
> >      DEFINE_VIRTIO_NET_FEATURES(VirtIOS390Device, host_features),
> > -    DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetS390, vdev.net_conf),
> >      DEFINE_PROP_END_OF_LIST(),
> >  };
> >
> > diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> > index 33a1d86..7d67577 100644
> > --- a/hw/s390x/virtio-ccw.c
> > +++ b/hw/s390x/virtio-ccw.c
> > @@ -794,6 +794,7 @@ static void virtio_ccw_net_instance_init(Object *obj)
> >      VirtIONetCcw *dev = VIRTIO_NET_CCW(obj);
> >      object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
> >      object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev),
> NULL);
> > +    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
> >  }
> >
> >  static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
> > @@ -1374,8 +1375,6 @@ static int virtio_ccw_load_config(DeviceState *d,
> QEMUFile *f)
> >  static Property virtio_ccw_net_properties[] = {
> >      DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
> >      DEFINE_VIRTIO_NET_FEATURES(VirtioCcwDevice, host_features[0]),
> > -    DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetCcw, vdev.net_conf),
> > -    DEFINE_NIC_PROPERTIES(VirtIONetCcw, vdev.nic_conf),
> >      DEFINE_PROP_BIT("ioeventfd", VirtioCcwDevice, flags,
> >                      VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true),
> >      DEFINE_PROP_END_OF_LIST(),
> > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> > index ddb5da1..6722156 100644
> > --- a/hw/virtio/virtio-pci.c
> > +++ b/hw/virtio/virtio-pci.c
> > @@ -1414,8 +1414,6 @@ static Property virtio_net_properties[] = {
> >                      VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
> >      DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
> >      DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
> > -    DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf),
> > -    DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf),
> >      DEFINE_PROP_END_OF_LIST(),
> >  };
> >
> > @@ -1456,6 +1454,7 @@ static void virtio_net_pci_instance_init(Object
> *obj)
> >      VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
> >      object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
> >      object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev),
> NULL);
> > +    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
> >  }
> >
> >  static const TypeInfo virtio_net_pci_info = {
> 
> Does -device virtio-net-pci,? still list e.g. the mac property with this
> patch?
> 
Yes. Please see the properties of virtio-net-pci with this patch:

#./qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 -name redhat6.2 -drive 
file=/home/redhat6.2, \ 
if=none,id=drive-ide0-0-0 -device 
ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-drive 
file=/mnt/sdb/gonglei/iso/rhel-server-7.0-x86_64-dvd.iso,if=none,id=drive-ide0-0-1
 \
-device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=4 
-vnc 0.0.0.0:10 \
-netdev type=user,id=net0 -device 
virtio-net-pci,netdev=net0,bootindex=3,id=nic1 -monitor stdio
QEMU 2.1.50 monitor - type 'help' for more information
(qemu) qom-list nic1
virtio-net-pci.rom[0] (child<qemu:memory-region>)
virtio-pci[0] (child<qemu:memory-region>)
msix-pba[0] (child<qemu:memory-region>)
msix-table[0] (child<qemu:memory-region>)
virtio-net-pci-msix[0] (child<qemu:memory-region>)
virtio-bus (child<virtio-pci-bus>)
bus master[0] (child<qemu:memory-region>)
bootindex (int)
tx (str)
x-txburst (int32)
x-txtimer (uint32)
netdev (str)
vlan (int32)
mac (str)
virtio-backend (child<virtio-net-device>)
parent_bus (link<bus>)
command_serr_enable (bool)
multifunction (bool)
rombar (uint32)
romfile (str)
addr (int32)
legacy-addr (str)
event_idx (bool)
indirect_desc (bool)
mq (bool)
ctrl_guest_offloads (bool)
ctrl_mac_addr (bool)
ctrl_rx_extra (bool)
ctrl_vlan (bool)
ctrl_rx (bool)
ctrl_vq (bool)
status (bool)
mrg_rxbuf (bool)
host_ufo (bool)
host_ecn (bool)
host_tso6 (bool)
host_tso4 (bool)
guest_announce (bool)
guest_ufo (bool)
guest_ecn (bool)
guest_tso6 (bool)
guest_tso4 (bool)
gso (bool)
guest_csum (bool)
csum (bool)
any_layout (bool)
vectors (uint32)
ioeventfd (bool)
hotplugged (bool)
hotpluggable (bool)
realized (bool)
type (string)
(qemu) qom-get nic1 mac
"52:54:00:12:34:56"
(qemu) qom-get nic1 bootindex
3 (0x3)
(qemu) info network
nic1: index=0,type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
 \ net0: index=0,type=user,net=10.0.2.0,restrict=off
(qemu)

Best regards,
-Gonglei



reply via email to

[Prev in Thread] Current Thread [Next in Thread]