1# Upcoming
2
3# v0.11.0
4
5## Changed
6- Updated vm-memory from 0.13.1 to 0.14.0
7- Updated vmm-sys-util from 0.11.0 to 0.12.1
8
9# v0.10.0
10
11Identical to v0.9.1, which was incorrectly published as minor release.
12
13# v0.9.1 - yanked
14
15This version got yanked. It should have been a major release. The vm-memory
16dependency - which received a major bump - is part of the public interface.
17
18## Changed
19- Updated vm-memory from 0.12.0 to 0.13.1.
20- Updated dev-dependencies:
21  - criterion (0.3.0 -> 0.5.1)
22  - memoffset (0.7.1 -> 0.9.0)
23
24# v0.9.0
25
26## Changed
27- Updated vm-memory from 0.11.0 to 0.12.0.
28
29# v0.8.0
30
31## Changed
32- Terminate iterating descriptor chains that are longer than 2^32 bytes.
33- Updated vm-memory from 0.10.0 to 0.11.0.
34- Updated virtio-bindings from 0.1.0 to 0.2.0.
35
36# v0.7.1
37
38## Fixed
39- Skip indirect descriptor address alignment check, the virtio spec has
40  no alignment requirement on this, see `2.6.5.3 Indirect Descriptors`
41  and `2.7.7 Indirect Flag: Scatter-Gather Support` in virtio 1.0.
42- Update the `add_desc_chains` mock function such that it works on big endian
43  hosts as well.
44- Check that the queue is ready for processing requests when calling the
45  iterator functions. For now the checks are limited to the avail address and
46  the ready fields, but should be extended in the future to account for other
47  fields that could signal an invalid queue. This behavior can be triggered
48  by doing a `reset` followed by a `pop_descriptor_chain`.
49
50# v0.7.0
51
52## Changed
53
54- Updated vmm-sys-util from 0.10.0 to 0.11.0.
55- Updated vm-memory from 0.9.0 to 0.10.0.
56
57# v0.6.1
58
59## Fixed
60- Return an error if the number of available descriptor chains exposed by the
61  driver exceeds the queue size. This way we avoid potential hanging and
62  Denial-of-Service in the VMM, that was possible before by iterating multiple
63  times over the same chains.
64
65# v0.6.0
66
67## Added
68- Derive `Eq` for structures that derive `PartialEq`.
69
70## Changed
71- Use `add_desc_chains` in tests
72- Update dependencies: `vm-memory` from `0.8.0` to `0.9.0` and `log` from `0.4.6` to `0.4.17`.
73- Upgrade to Rust 2021 edition.
74
75# v0.5.0
76
77## Added
78- Added getters and setters for the Virtio Queue fields.
79- Added the `state` method for retrieving the `QueueState` of a `Queue`.
80
81## Fixed
82- Validate the state of the Virtio Queue when restoring from state and return errors on invalid
83  input.
84
85## Removed
86- Removed the wrapper over the Virtio Queue that was wrapping the Guest Memory. VMMs can define
87  this wrapper if needed, but this is no longer provided as part of virtio-queue crate so that the
88  naming scheme can be simplified. As a consequence, a couple of functions now receive the
89  memory as a parameter (more details in the Changed section).
90- Removed `num_added` field from the `QueueState` because this is an implementation detail of
91  the notification suppression feature and thus should not be part of the state.
92- Removed `QueueGuard` and `lock_with_memory`.
93
94## Changed
95- `QueueState` is now renamed to `Queue`.
96- `QueueStateSync` is now renamed to `QueueSync`.
97- The `QueueState` structure now represents the state of the `Queue` without any implementation
98  details. This can be used for implementing save/restore.
99- Initializing a `Queue` now returns an error in case the `max_size` is invalid.
100- The `Queue` fields are now private and can be updated only through the dedicated setters.
101- The following Queue methods now receive the memory as a parameter: `iter`, `is_valid`,
102  `add_used`, `needs_notification`, `enable_notification`, `disable_notification`, `avail_idx`,
103  `used_idx`.
104- Use the constant definition from the `virtio-queue` crate.
105
106# v0.4.0
107
108## Fixed
109- [[#173]](https://github.com/rust-vmm/vm-virtio/pull/173) Fix potential division by zero in
110  iterator when the queue size is 0.
111
112## Changed
113- [[#162]](https://github.com/rust-vmm/vm-virtio/pull/162) Added error handling in the mock
114  interface and the ability to create multiple descriptor chains for testing in order to
115  support running fuzzing.
116- [[#174]](https://github.com/rust-vmm/vm-virtio/pull/174) Updated the `avail_idx` and `used_idx`
117  documentation to specify when these functions panic.
118
119
120# v0.3.0
121
122## Added
123- [[#148]](https://github.com/rust-vmm/vm-virtio/pull/148): `QueueStateOwnedT` trait that stands
124  for queue objects which are exclusively owned and accessed by a single thread of execution.
125- [[#148]](https://github.com/rust-vmm/vm-virtio/pull/148): Added the `pop_descriptor_chain`
126  method, which can be used to consume descriptor chains from the available ring without
127  using an iterator, to `QueueStateT` and `QueueGuard`. Also added `go_to_previous_position()`
128  to `QueueGuard`, which enables decrementing the next available index by one position, which
129  effectively undoes the consumption of a descriptor chain in some use cases.
130- [[#151]](https://github.com/rust-vmm/vm-virtio/pull/151): Added `MockSplitQueue::add_desc_chain()`,
131  which places a descriptor chain at the specified offset in the descriptor table.
132- [[#153]](https://github.com/rust-vmm/vm-virtio/pull/153): Added `QueueStateT::size()` to return
133  the size of the queue.
134
135## Changed
136- The minimum version of the `vm-memory` dependency is now `v0.8.0`
137- [[#161]](https://github.com/rust-vmm/vm-virtio/pull/161): Improve the efficiency of `needs_notification`
138
139## Removed
140- [[#153]](https://github.com/rust-vmm/vm-virtio/pull/153): `#[derive(Clone)]` for `QueueState`
141
142# v0.2.0
143
144## Added
145
146- *Testing Interface*: Added the possibility to initialize a mock descriptor
147  chain from a list of descriptors.
148- Added setters and getters for the queue fields required for extending the
149  `Queue` in VMMs.
150
151## Fixed
152
153- Apply the appropriate endianness conversion on `used_idx`.
154
155# v0.1.0
156
157This is the first release of the crate.
158