All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
	qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 17/33] virtio-pci: add flags to enable/disable legacy/modern
Date: Thu, 4 Jun 2015 11:52:43 +0100	[thread overview]
Message-ID: <20150604105243.GA27201@redhat.com> (raw)
In-Reply-To: <1433414083-9720-18-git-send-email-kraxel@redhat.com>

On Thu, Jun 04, 2015 at 12:34:26PM +0200, Gerd Hoffmann wrote:
> Add VIRTIO_PCI_FLAG_DISABLE_LEGACY and VIRTIO_PCI_FLAG_DISABLE_MODERN
> for VirtIOPCIProxy->flags.  Also add properties for them.  They can be
> used to disable modern (virtio 1.0) or legacy (virtio 0.9) modes.
> 
> By default only legacy is advertized, modern will be turned on by
> default once all remaining spec compilance issues are addressed.

What is the reason for adding these flags? From the pov of management
app integration I think we'd really want the front/back to be automatically
negotiating the right compatible featureset. Having mgmt need to set these
legacy/modern flags based on guest OS needs seems rather painful. As such
I'd be really loathe to support these in libvirt

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  hw/virtio/virtio-pci.c | 48 ++++++++++++++++++++++++++++++++++--------------
>  hw/virtio/virtio-pci.h |  6 ++++++
>  2 files changed, 40 insertions(+), 14 deletions(-)
> 
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index ddeaf63..2182b41 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -1190,6 +1190,8 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
>  {
>      VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
>      VirtioBusState *bus = &proxy->bus;
> +    bool legacy = !(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_LEGACY);
> +    bool modern = !(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_MODERN);
>      uint8_t *config;
>      uint32_t size;
>      VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
> @@ -1198,13 +1200,24 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
>      if (proxy->class_code) {
>          pci_config_set_class(config, proxy->class_code);
>      }
> -    pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
> -                 pci_get_word(config + PCI_VENDOR_ID));
> -    pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus));
> +
> +    if (legacy) {
> +        /* legacy and transitional */
> +        pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
> +                     pci_get_word(config + PCI_VENDOR_ID));
> +        pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus));
> +    } else {
> +        /* pure virtio-1.0 */
> +        pci_set_word(config + PCI_VENDOR_ID,
> +                     PCI_VENDOR_ID_REDHAT_QUMRANET);
> +        pci_set_word(config + PCI_DEVICE_ID,
> +                     0x1040 + virtio_bus_get_vdev_id(bus));
> +        pci_config_set_revision(config, 1);
> +    }
>      config[PCI_INTERRUPT_PIN] = 1;
>  
>  
> -    if (1) { /* TODO: Make this optional, dependent on virtio 1.0 */
> +    if (modern) {
>          struct virtio_pci_cap common = {
>              .cfg_type = VIRTIO_PCI_CAP_COMMON_CFG,
>              .cap_len = sizeof common,
> @@ -1318,18 +1331,21 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
>  
>      proxy->pci_dev.config_write = virtio_write_config;
>  
> -    size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev)
> -         + virtio_bus_get_vdev_config_len(bus);
> -    if (size & (size - 1)) {
> -        size = 1 << qemu_fls(size);
> +    if (legacy) {
> +        size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev)
> +            + virtio_bus_get_vdev_config_len(bus);
> +        if (size & (size - 1)) {
> +            size = 1 << qemu_fls(size);
> +        }
> +
> +        memory_region_init_io(&proxy->bar, OBJECT(proxy),
> +                              &virtio_pci_config_ops,
> +                              proxy, "virtio-pci", size);
> +
> +        pci_register_bar(&proxy->pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO,
> +                         &proxy->bar);
>      }
>  
> -    memory_region_init_io(&proxy->bar, OBJECT(proxy), &virtio_pci_config_ops,
> -                          proxy, "virtio-pci", size);
> -
> -    pci_register_bar(&proxy->pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO,
> -                     &proxy->bar);
> -
>      if (!kvm_has_many_ioeventfds()) {
>          proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
>      }
> @@ -1372,6 +1388,10 @@ static void virtio_pci_reset(DeviceState *qdev)
>  static Property virtio_pci_properties[] = {
>      DEFINE_PROP_BIT("virtio-pci-bus-master-bug-migration", VirtIOPCIProxy, flags,
>                      VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT, false),
> +    DEFINE_PROP_BIT("disable-legacy", VirtIOPCIProxy, flags,
> +                    VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT, false),
> +    DEFINE_PROP_BIT("disable-modern", VirtIOPCIProxy, flags,
> +                    VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT, true),
>      DEFINE_PROP_END_OF_LIST(),
>  };
>  
> diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h
> index 7a6481f..4e9b2db 100644
> --- a/hw/virtio/virtio-pci.h
> +++ b/hw/virtio/virtio-pci.h
> @@ -63,6 +63,12 @@ typedef struct VirtioBusClass VirtioPCIBusClass;
>  #define VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT 1
>  #define VIRTIO_PCI_FLAG_USE_IOEVENTFD   (1 << VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT)
>  
> +/* virtio version flags */
> +#define VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT 2
> +#define VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT 3
> +#define VIRTIO_PCI_FLAG_DISABLE_LEGACY (1 << VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT)
> +#define VIRTIO_PCI_FLAG_DISABLE_MODERN (1 << VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT)
> +
>  typedef struct {
>      MSIMessage msg;
>      int virq;
> -- 
> 1.8.3.1
> 
> 

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

  reply	other threads:[~2015-06-04 10:52 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-04 10:34 [Qemu-devel] [PATCH 00/33] virtio 1.0 patch series rebased Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 01/33] virtio: 64bit features fixups Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 02/33] virtio: endianness checks for virtio 1.0 devices Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 03/33] virtio: allow virtio-1 queue layout Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 04/33] dataplane: allow virtio-1 devices Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 05/33] virtio: disallow late feature changes for virtio-1 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 06/33] virtio: allow to fail setting status Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 07/33] virtio-net: no writeable mac for virtio-1 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 08/33] virtio-net: support longer header Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 09/33] virtio-net: enable virtio 1.0 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 10/33] vhost_net: add version_1 feature Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 11/33] vhost: 64 bit features Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 12/33] linux-headers: add virtio_pci Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 13/33] virtio-pci: initial virtio 1.0 support Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 14/33] virtio: generation counter support Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 15/33] virtio: add modern config accessors Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 16/33] virtio-pci: switch to modern accessors for 1.0 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 17/33] virtio-pci: add flags to enable/disable legacy/modern Gerd Hoffmann
2015-06-04 10:52   ` Daniel P. Berrange [this message]
2015-06-04 11:07     ` Michael S. Tsirkin
2015-06-04 15:13     ` Gerd Hoffmann
2015-06-05 13:01       ` Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 18/33] virtio-pci: make QEMU_VIRTIO_PCI_QUEUE_MEM_MULT smaller Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 19/33] virtio-pci: change & document virtio pci bar layout Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 20/33] virtio-pci: make modern bar 64bit + prefetchable Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 21/33] virtio-pci: correctly set host notifiers for modern bar Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 22/33] virtio_balloon: header update Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 23/33] virtio-balloon: switch to virtio_add_feature Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 24/33] virtio-pci: add struct VirtIOPCIRegion for virtio-1 regions Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 25/33] virtio-pci: add virtio_pci_modern_regions_init() Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 26/33] virtio-pci: add virtio_pci_modern_region_map() Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 27/33] virtio-pci: move virtio_pci_add_mem_cap call to virtio_pci_modern_region_map Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 28/33] virtio-pci: move cap type to VirtIOPCIRegion Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 29/33] virtio-pci: drop identical virtio_pci_cap Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 30/33] virtio-pci: fill VirtIOPCIRegions early Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 31/33] pci: add PCI_CLASS_INPUT_* Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 32/33] virtio-input: core code & base class [pci] Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 33/33] virtio-input: emulated devices [pci] Gerd Hoffmann
2015-06-04 11:02 ` [Qemu-devel] [PATCH 00/33] virtio 1.0 patch series rebased Michael S. Tsirkin
2015-06-11  8:26   ` Gerd Hoffmann
2015-06-11 10:32     ` Michael S. Tsirkin
2015-06-09 10:32 ` Gerd Hoffmann
2015-06-09 10:53   ` Michael S. Tsirkin
2015-06-10 12:36 ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150604105243.GA27201@redhat.com \
    --to=berrange@redhat.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=kraxel@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.