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

@@@ -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;
  }