Skip to content

Commit 0227728

Browse files
committed
queue: split out struct QueueState
Split out `struct QueueState` from `struct Queue`, which contains all the fields related to virtio queue state. It will be reused to support concurent operations for multi-threading context later. Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
1 parent 6fad8c4 commit 0227728

File tree

4 files changed

+193
-103
lines changed

4 files changed

+193
-103
lines changed

crates/virtio-device/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ mod tests {
284284
assert_eq!(d.cfg.device_features & (1 << VIRTIO_F_RING_EVENT_IDX), 0);
285285

286286
for q in d.cfg.queues.iter() {
287-
assert_eq!(q.event_idx_enabled, false);
287+
assert_eq!(q.state.event_idx_enabled, false);
288288
}
289289

290290
// Revert status.
@@ -302,7 +302,7 @@ mod tests {
302302
assert_eq!(d.cfg.device_status, status);
303303

304304
for q in d.cfg.queues.iter() {
305-
assert_eq!(q.event_idx_enabled, true);
305+
assert_eq!(q.state.event_idx_enabled, true);
306306
}
307307
}
308308

crates/virtio-device/src/mmio.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,16 +258,16 @@ mod tests {
258258
// The max size for the queue in `Dummy` is 256.
259259
assert_eq!(mmio_read(&d, 0x34), 256);
260260

261-
assert_eq!(d.cfg.queues[0].size, 256);
261+
assert_eq!(d.cfg.queues[0].state.size, 256);
262262
d.write(0x38, &32u32.to_le_bytes());
263263
// Updating the queue field has no effect due to invalid device status.
264-
assert_eq!(d.cfg.queues[0].size, 256);
264+
assert_eq!(d.cfg.queues[0].state.size, 256);
265265

266266
d.cfg.device_status |= status::FEATURES_OK;
267267

268268
// Let's try the update again.
269269
d.write(0x38, &32u32.to_le_bytes());
270-
assert_eq!(d.cfg.queues[0].size, 32);
270+
assert_eq!(d.cfg.queues[0].state.size, 32);
271271

272272
// The queue in `Dummy` is not ready yet.
273273
assert_eq!(mmio_read(&d, 0x44), 0);
@@ -281,23 +281,23 @@ mod tests {
281281
d.write(0x50, &2u32.to_le_bytes());
282282
assert_eq!(d.last_queue_notify, 2);
283283

284-
assert_eq!(d.cfg.queues[0].desc_table.0, 0);
284+
assert_eq!(d.cfg.queues[0].state.desc_table.0, 0);
285285
d.write(0x80, &1u32.to_le_bytes());
286-
assert_eq!(d.cfg.queues[0].desc_table.0, 1);
286+
assert_eq!(d.cfg.queues[0].state.desc_table.0, 1);
287287
d.write(0x84, &2u32.to_le_bytes());
288-
assert_eq!(d.cfg.queues[0].desc_table.0, (2 << 32) + 1);
288+
assert_eq!(d.cfg.queues[0].state.desc_table.0, (2 << 32) + 1);
289289

290-
assert_eq!(d.cfg.queues[0].avail_ring.0, 0);
290+
assert_eq!(d.cfg.queues[0].state.avail_ring.0, 0);
291291
d.write(0x90, &1u32.to_le_bytes());
292-
assert_eq!(d.cfg.queues[0].avail_ring.0, 1);
292+
assert_eq!(d.cfg.queues[0].state.avail_ring.0, 1);
293293
d.write(0x94, &2u32.to_le_bytes());
294-
assert_eq!(d.cfg.queues[0].avail_ring.0, (2 << 32) + 1);
294+
assert_eq!(d.cfg.queues[0].state.avail_ring.0, (2 << 32) + 1);
295295

296-
assert_eq!(d.cfg.queues[0].used_ring.0, 0);
296+
assert_eq!(d.cfg.queues[0].state.used_ring.0, 0);
297297
d.write(0xa0, &1u32.to_le_bytes());
298-
assert_eq!(d.cfg.queues[0].used_ring.0, 1);
298+
assert_eq!(d.cfg.queues[0].state.used_ring.0, 1);
299299
d.write(0xa4, &2u32.to_le_bytes());
300-
assert_eq!(d.cfg.queues[0].used_ring.0, (2 << 32) + 1);
300+
assert_eq!(d.cfg.queues[0].state.used_ring.0, (2 << 32) + 1);
301301

302302
// Let's select a non-existent queue.
303303
d.write(0x30, &1u32.to_le_bytes());

0 commit comments

Comments
 (0)