diff options
Diffstat (limited to 'src/dev/virtio/fs9p.cc')
-rw-r--r-- | src/dev/virtio/fs9p.cc | 25 |
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. |