summaryrefslogtreecommitdiff
path: root/src/dev/virtio/fs9p.cc
diff options
context:
space:
mode:
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.