Implement virtio reset
The guest may issue a RESET command for virtio. So far we didn't bother to implement it, but with my new bootloader we actually need it for Linux to get back to a safe state. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
73cdf3f2c9
commit
baf0b55a9e
@ -56,7 +56,6 @@ typedef struct {
|
|||||||
static const VirtIOBindings virtio_s390_bindings;
|
static const VirtIOBindings virtio_s390_bindings;
|
||||||
|
|
||||||
static ram_addr_t s390_virtio_device_num_vq(VirtIOS390Device *dev);
|
static ram_addr_t s390_virtio_device_num_vq(VirtIOS390Device *dev);
|
||||||
static void s390_virtio_device_sync(VirtIOS390Device *dev);
|
|
||||||
|
|
||||||
VirtIOS390Bus *s390_virtio_bus_init(ram_addr_t *ram_size)
|
VirtIOS390Bus *s390_virtio_bus_init(ram_addr_t *ram_size)
|
||||||
{
|
{
|
||||||
@ -185,7 +184,7 @@ static ram_addr_t s390_virtio_next_ring(VirtIOS390Bus *bus)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void s390_virtio_device_sync(VirtIOS390Device *dev)
|
void s390_virtio_device_sync(VirtIOS390Device *dev)
|
||||||
{
|
{
|
||||||
VirtIOS390Bus *bus = DO_UPCAST(VirtIOS390Bus, bus, dev->qdev.parent_bus);
|
VirtIOS390Bus *bus = DO_UPCAST(VirtIOS390Bus, bus, dev->qdev.parent_bus);
|
||||||
ram_addr_t cur_offs;
|
ram_addr_t cur_offs;
|
||||||
|
@ -65,3 +65,4 @@ extern VirtIOS390Device *s390_virtio_bus_find_vring(VirtIOS390Bus *bus,
|
|||||||
int *vq_num);
|
int *vq_num);
|
||||||
extern VirtIOS390Device *s390_virtio_bus_find_mem(VirtIOS390Bus *bus,
|
extern VirtIOS390Device *s390_virtio_bus_find_mem(VirtIOS390Bus *bus,
|
||||||
ram_addr_t mem);
|
ram_addr_t mem);
|
||||||
|
extern void s390_virtio_device_sync(VirtIOS390Device *dev);
|
||||||
|
@ -99,10 +99,11 @@ int s390_virtio_hypercall(CPUState *env)
|
|||||||
break;
|
break;
|
||||||
case KVM_S390_VIRTIO_RESET:
|
case KVM_S390_VIRTIO_RESET:
|
||||||
{
|
{
|
||||||
/* Virtio_reset resets the internal addresses, so we'd have to sync
|
VirtIOS390Device *dev;
|
||||||
them up again. We don't want to reallocate a vring though, so let's
|
|
||||||
just not reset. */
|
dev = s390_virtio_bus_find_mem(s390_bus, mem);
|
||||||
/* virtio_reset(dev->vdev); */
|
virtio_reset(dev->vdev);
|
||||||
|
s390_virtio_device_sync(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case KVM_S390_VIRTIO_SET_STATUS:
|
case KVM_S390_VIRTIO_SET_STATUS:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user