summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dev/virtio/fs9p.cc25
-rw-r--r--src/dev/virtio/fs9p.hh13
2 files changed, 32 insertions, 6 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.
diff --git a/src/dev/virtio/fs9p.hh b/src/dev/virtio/fs9p.hh
index ebff9fef7..786f58464 100644
--- a/src/dev/virtio/fs9p.hh
+++ b/src/dev/virtio/fs9p.hh
@@ -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
@@ -269,6 +269,17 @@ class VirtIO9PProxy : public VirtIO9PBase
* @param len Number of bytes to write.
*/
void writeAll(const uint8_t *data, size_t len);
+
+ /**
+ * Bool to track if the device has been used or not.
+ *
+ * We need to keep track of if the device has been used as we are
+ * unable to checkpoint the device in the event that the device
+ * has been mounted in the guest system. This is due to the fact
+ * that we do not, and cannot, track the complete state across
+ * host and guest.
+ */
+ bool deviceUsed;
};
struct VirtIO9PDiodParams;