From: Anthony Liguori Date: Wed, 2 Jan 2013 14:01:36 +0000 (-0600) Subject: Merge remote-tracking branch 'mst/tags/for_anthony' into staging X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=079944e695589364d19de31f27761c6bdea1c207;p=qemu.git Merge remote-tracking branch 'mst/tags/for_anthony' into staging pci,virtio This optimizes MSIX handling in virtio-pci. Also included is pci express capability bugfix. Signed-off-by: Michael S. Tsirkin Signed-off-by: Anthony Liguori * 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 --- 079944e695589364d19de31f27761c6bdea1c207 diff --cc hw/s390-virtio-bus.c index b78d6264fe,84fba9674c..7e991755b4 --- a/hw/s390-virtio-bus.c +++ b/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; }