# v0.5.0
## Added
- Added getters and setters for the Virtio Queue fields.
- Added the `state` method for retrieving the `QueueState` of a `Queue`.
## Fixed
- Validate the state of the Virtio Queue when restoring from state and return errors on invalid
input.
## Removed
- Removed the wrapper over the Virtio Queue that was wrapping the Guest Memory. VMMs can define
this wrapper if needed, but this is no longer provided as part of virtio-queue crate so that the
naming scheme can be simplified. As a consequence, a couple of functions now receive the
memory as a parameter (more details in the Changed section).
- Removed `num_added` field from the `QueueState` because this is an implementation detail of
the notification suppression feature and thus should not be part of the state.
- Removed `QueueGuard` and `lock_with_memory`.
## Changed
- `QueueState` is now renamed to `Queue`.
- `QueueStateSync` is now renamed to `QueueSync`.
- The `QueueState` structure now represents the state of the `Queue` without any implementation
details. This can be used for implementing save/restore.
- Initializing a `Queue` now returns an error in case the `max_size` is invalid.
- The `Queue` fields are now private and can be updated only through the dedicated setters.
- The following Queue methods now receive the memory as a parameter: `iter`, `is_valid`,
`add_used`, `needs_notification`, `enable_notification`, `disable_notification`, `avail_idx`,
`used_idx`.
- Use the constant definition from the `virtio-queue` crate.
# v0.4.0
## Fixed
- [[#173]](https://github.com/rust-vmm/vm-virtio/pull/173) Fix potential division by zero in
iterator when the queue size is 0.
## Changed
- [[#162]](https://github.com/rust-vmm/vm-virtio/pull/162) Added error handling in the mock
interface and the ability to create multiple descriptor chains for testing in order to
support running fuzzing.
- [[#174]](https://github.com/rust-vmm/vm-virtio/pull/174) Updated the `avail_idx` and `used_idx`
documentation to specify when these functions panic.
# v0.3.0
## Added
- [[#148]](https://github.com/rust-vmm/vm-virtio/pull/148): `QueueStateOwnedT` trait that stands
for queue objects which are exclusively owned and accessed by a single thread of execution.
- [[#148]](https://github.com/rust-vmm/vm-virtio/pull/148): Added the `pop_descriptor_chain`
method, which can be used to consume descriptor chains from the available ring without
using an iterator, to `QueueStateT` and `QueueGuard`. Also added `go_to_previous_position()`
to `QueueGuard`, which enables decrementing the next available index by one position, which
effectively undoes the consumption of a descriptor chain in some use cases.
- [[#151]](https://github.com/rust-vmm/vm-virtio/pull/151): Added `MockSplitQueue::add_desc_chain()`,
which places a descriptor chain at the specified offset in the descriptor table.
- [[#153]](https://github.com/rust-vmm/vm-virtio/pull/153): Added `QueueStateT::size()` to return
the size of the queue.
## Changed
- The minimum version of the `vm-memory` dependency is now `v0.8.0`
- [[#161]](https://github.com/rust-vmm/vm-virtio/pull/161): Improve the efficiency of `needs_notification`
## Removed
- [[#153]](https://github.com/rust-vmm/vm-virtio/pull/153): `#[derive(Clone)]` for `QueueState`
# v0.2.0
## Added
- *Testing Interface*: Added the possibility to initialize a mock descriptor
chain from a list of descriptors.
- Added setters and getters for the queue fields required for extending the
`Queue` in VMMs.
## Fixed
- Apply the appropriate endianness conversion on `used_idx`.
# v0.1.0
This is the first release of the crate.