]> git.proxmox.com Git - mirror_qemu.git/commitdiff
Merge remote-tracking branch 'mst/tags/for_anthony' into staging
authorAnthony Liguori <aliguori@us.ibm.com>
Wed, 2 Jan 2013 14:01:36 +0000 (08:01 -0600)
committerAnthony Liguori <aliguori@us.ibm.com>
Wed, 2 Jan 2013 14:01:36 +0000 (08:01 -0600)
pci,virtio

This optimizes MSIX handling in virtio-pci.
Also included is pci express capability bugfix.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* mst/tags/for_anthony:
  virtio-pci: don't poll masked vectors
  msix: expose access to masked/pending state
  msi: add API to get notified about pending bit poll
  pcie: Fix bug in pcie_ext_cap_set_next
  virtio: make bindings typesafe

1  2 
hw/s390-virtio-bus.c

diff --combined hw/s390-virtio-bus.c
index b78d6264fe7a67171557b2ed043e652e2911282a,84fba9674c2714cc61b737988f1dc89b355ab225..7e991755b4dbd32cd3f1b1d93fe8b403a7e0ad3e
@@@ -110,12 -110,10 +110,12 @@@ VirtIOS390Bus *s390_virtio_bus_init(ram
      return bus;
  }
  
 -static void s390_virtio_irq(CPUS390XState *env, int config_change, uint64_t token)
 +static void s390_virtio_irq(S390CPU *cpu, int config_change, uint64_t token)
  {
 +    CPUS390XState *env = &cpu->env;
 +
      if (kvm_enabled()) {
 -        kvm_s390_virtio_irq(env, config_change, token);
 +        kvm_s390_virtio_irq(cpu, config_change, token);
      } else {
          cpu_inject_ext(env, VIRTIO_EXT_CODE, config_change, token);
      }
@@@ -138,13 -136,14 +138,13 @@@ static int s390_virtio_device_init(Virt
  
      bus->dev_offs += dev_len;
  
-     virtio_bind_device(vdev, &virtio_s390_bindings, dev);
+     virtio_bind_device(vdev, &virtio_s390_bindings, DEVICE(dev));
      dev->host_features = vdev->get_features(vdev, dev->host_features);
      s390_virtio_device_sync(dev);
      s390_virtio_reset_idx(dev);
      if (dev->qdev.hotplugged) {
          S390CPU *cpu = s390_cpu_addr2state(0);
 -        CPUS390XState *env = &cpu->env;
 -        s390_virtio_irq(env, VIRTIO_PARAM_DEV_ADD, dev->dev_offs);
 +        s390_virtio_irq(cpu, VIRTIO_PARAM_DEV_ADD, dev->dev_offs);
      }
  
      return 0;
@@@ -364,18 -363,33 +364,32 @@@ VirtIOS390Device *s390_virtio_bus_find_
      return NULL;
  }
  
- static void virtio_s390_notify(void *opaque, uint16_t vector)
+ /* DeviceState to VirtIOS390Device. Note: used on datapath,
+  * be careful and test performance if you change this.
+  */
+ static inline VirtIOS390Device *to_virtio_s390_device_fast(DeviceState *d)
+ {
+     return container_of(d, VirtIOS390Device, qdev);
+ }
+ /* DeviceState to VirtIOS390Device. TODO: use QOM. */
+ static inline VirtIOS390Device *to_virtio_s390_device(DeviceState *d)
+ {
+     return container_of(d, VirtIOS390Device, qdev);
+ }
+ static void virtio_s390_notify(DeviceState *d, uint16_t vector)
  {
-     VirtIOS390Device *dev = (VirtIOS390Device*)opaque;
+     VirtIOS390Device *dev = to_virtio_s390_device_fast(d);
      uint64_t token = s390_virtio_device_vq_token(dev, vector);
      S390CPU *cpu = s390_cpu_addr2state(0);
 -    CPUS390XState *env = &cpu->env;
  
 -    s390_virtio_irq(env, 0, token);
 +    s390_virtio_irq(cpu, 0, token);
  }
  
- static unsigned virtio_s390_get_features(void *opaque)
+ static unsigned virtio_s390_get_features(DeviceState *d)
  {
-     VirtIOS390Device *dev = (VirtIOS390Device*)opaque;
+     VirtIOS390Device *dev = to_virtio_s390_device(d);
      return dev->host_features;
  }