From 1ccc4e0e21e5a47640b2a8bd6864988c3dfb5926 Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Mon, 8 Dec 2014 04:49:51 -0500 Subject: [PATCH] dev: Correctly transform packets into responses The VirtIO devices didn't correctly set the response flags in memory packets. This changeset adds the required Packet::makeResponse() calls. --- src/dev/virtio/base.cc | 2 ++ src/dev/virtio/pci.cc | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/dev/virtio/base.cc b/src/dev/virtio/base.cc index 06c6e3452..a65fe7fa4 100644 --- a/src/dev/virtio/base.cc +++ b/src/dev/virtio/base.cc @@ -426,6 +426,7 @@ VirtIODeviceBase::readConfigBlob(PacketPtr pkt, Addr cfgOffset, const uint8_t *c if (cfgOffset + size > configSize) panic("Config read out of bounds.\n"); + pkt->makeResponse(); pkt->setData(const_cast(cfg) + cfgOffset); } @@ -437,6 +438,7 @@ VirtIODeviceBase::writeConfigBlob(PacketPtr pkt, Addr cfgOffset, uint8_t *cfg) if (cfgOffset + size > configSize) panic("Config write out of bounds.\n"); + pkt->makeResponse(); pkt->writeData((uint8_t *)cfg + cfgOffset); } diff --git a/src/dev/virtio/pci.cc b/src/dev/virtio/pci.cc index c77b61934..a051a8f51 100644 --- a/src/dev/virtio/pci.cc +++ b/src/dev/virtio/pci.cc @@ -75,6 +75,8 @@ PciVirtIO::read(PacketPtr pkt) return 0; } + pkt->makeResponse(); + switch(offset) { case OFF_DEVICE_FEATURES: DPRINTF(VIOPci, " DEVICE_FEATURES request\n"); @@ -151,6 +153,8 @@ PciVirtIO::write(PacketPtr pkt) return 0; } + pkt->makeResponse(); + switch(offset) { case OFF_DEVICE_FEATURES: warn("Guest tried to write device features."); -- 2.30.2