@@ -19,6 +19,7 @@
#include "qemu/atomic.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-access.h"
+#include "sysemu/kvm.h"
/*
* The alignment to use between consumer and producer parts of vring.
@@ -566,6 +567,10 @@ void virtio_reset(void *opaque)
vdev->vq[i].signalled_used_valid = false;
vdev->vq[i].notification = true;
}
+
+ if (current_cpu) {
+ cpu_synchronize_state(current_cpu);
+ }
}
uint32_t virtio_config_readb(VirtIODevice *vdev, uint32_t addr)
@@ -869,6 +869,8 @@ int kvm_arch_put_registers(CPUState *cs, int level)
DPRINTF("Warning: Unable to set VPA information to KVM\n");
}
}
+
+ kvm_put_one_spr(cs, KVM_REG_PPC_LPCR, SPR_LPCR);
#endif /* TARGET_PPC64 */
}
@@ -1091,6 +1093,8 @@ int kvm_arch_get_registers(CPUState *cs)
DPRINTF("Warning: Unable to get VPA information from KVM\n");
}
}
+
+ kvm_get_one_spr(cs, KVM_REG_PPC_LPCR, SPR_LPCR);
#endif
}
We need to support the guest endianness as soon as a virtio device shows up. Alex suggested this can achieved by calling cpu_synchronize_state(). To have it working on PowerPC, we need to add LPCR in the sync register functions. Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com> --- hw/virtio/virtio.c | 5 +++++ target-ppc/kvm.c | 4 ++++ 2 files changed, 9 insertions(+)