/*
- * 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
VirtIO9PProxy::VirtIO9PProxy(Params *params)
- : VirtIO9PBase(params)
+ : VirtIO9PBase(params), deviceUsed(false)
{
}
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);
}
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.
/*
- * 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
* @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;