summaryrefslogtreecommitdiff
path: root/src/dev/virtio/fs9p.cc
diff options
context:
space:
mode:
authorSascha Bischoff <sascha.bischoff@ARM.com>2015-11-05 09:40:12 +0000
committerSascha Bischoff <sascha.bischoff@ARM.com>2015-11-05 09:40:12 +0000
commit9d23e6d3234f7565aba2087b3b88f246b016cdc3 (patch)
tree03a3452bbe700688ab881c4513e45937eb07c9ca /src/dev/virtio/fs9p.cc
parent9719b261a13e83ec0dd8354defad5f6615a17ac2 (diff)
downloadgem5-9d23e6d3234f7565aba2087b3b88f246b016cdc3.tar.xz
dev: Add basic checkpoint support to VirtIO9PProxy device
This patch adds very basic checkpoint support for the VirtIO9PProxy device. Previously, attempts to checkpoint gem5 with a present 9P device caused gem5 to fatal as none of the state is tracked. We still do not track any state, but we replace the fatal with a warning which is triggered if the device has been used by the guest system. In the event that it has not been used, we assume that no state is lost during checkpointing. The warning is triggered on both a serialize and an unserialize to ensure maximum visibility for the user.
Diffstat (limited to 'src/dev/virtio/fs9p.cc')
-rw-r--r--src/dev/virtio/fs9p.cc25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/dev/virtio/fs9p.cc b/src/dev/virtio/fs9p.cc
index 336757bb9..2006006db 100644
--- a/src/dev/virtio/fs9p.cc
+++ b/src/dev/virtio/fs9p.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 ARM Limited
+ * Copyright (c) 2014-2015 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -204,7 +204,7 @@ VirtIO9PBase::dumpMsg(const P9MsgHeader &header, const uint8_t *data, size_t siz
VirtIO9PProxy::VirtIO9PProxy(Params *params)
- : VirtIO9PBase(params)
+ : VirtIO9PBase(params), deviceUsed(false)
{
}
@@ -214,15 +214,29 @@ VirtIO9PProxy::~VirtIO9PProxy()
void
-VirtIO9PProxy::VirtIO9PProxy::serialize(CheckpointOut &cp) const
+VirtIO9PProxy::serialize(CheckpointOut &cp) const
{
- fatal("Can't checkpoint a system with a VirtIO 9p proxy!\n");
+ if (deviceUsed) {
+ warn("Serializing VirtIO9Base device after device has been used. It is "
+ "likely that state will be lost, and that the device will cease "
+ "to work!");
+ }
+ SERIALIZE_SCALAR(deviceUsed);
+
+ VirtIO9PBase::serialize(cp);
}
void
VirtIO9PProxy::unserialize(CheckpointIn &cp)
{
- fatal("Can't checkpoint a system with a VirtIO 9p proxy!\n");
+ UNSERIALIZE_SCALAR(deviceUsed);
+
+ if (deviceUsed) {
+ warn("Unserializing VirtIO9Base device after device has been used. It is "
+ "likely that state has been lost, and that the device will cease "
+ "to work!");
+ }
+ VirtIO9PBase::unserialize(cp);
}
@@ -230,6 +244,7 @@ void
VirtIO9PProxy::recvTMsg(const P9MsgHeader &header,
const uint8_t *data, size_t size)
{
+ deviceUsed = true;
assert(header.len == sizeof(header) + size);
// While technically not needed, we send the packet as one
// contiguous segment to make some packet dissectors happy.