diff --git a/src/device/virtio/blk.rs b/src/device/virtio/blk.rs index 8b41eec23a658695bbb322cab5ae996117f5a93d..baa77531a917ceaffa05b733ce9488a1243ba8fb 100644 --- a/src/device/virtio/blk.rs +++ b/src/device/virtio/blk.rs @@ -32,7 +32,7 @@ pub const VIRTIO_BLK_F_SEG_MAX: usize = 1 << 2; /* BLOCK PARAMETERS*/ pub const SECTOR_BSIZE: usize = 512; pub const BLOCKIF_SIZE_MAX: usize = 128 * PAGE_SIZE; -pub const BLOCKIF_IOV_MAX: usize = 512; +pub const BLOCKIF_IOV_MAX: usize = 254; /* BLOCK REQUEST TYPE*/ pub const VIRTIO_BLK_T_IN: usize = 0; diff --git a/src/device/virtio/mediated.rs b/src/device/virtio/mediated.rs index aa499b4c8bd14e930b377fef5cee312c5b484ef4..2344227b6a81c73ff09c3529aa916765b1bc8baf 100644 --- a/src/device/virtio/mediated.rs +++ b/src/device/virtio/mediated.rs @@ -235,8 +235,6 @@ pub fn mediated_ipi_handler(msg: IpiMessage) { if let IpiInnerMsg::MediatedMsg(mediated_msg) = msg.ipi_message { // generate IO request in `virtio_blk_notify_handler` virtio_blk_notify_handler(mediated_msg.vq, mediated_msg.blk, mediated_msg.src_vm); - // mark the ipi task as finish (pop it from the ipi queue) - finish_async_task(true); // invoke the executor to do IO request async_task_exe(); } diff --git a/src/kernel/async_task.rs b/src/kernel/async_task.rs index d6c7ef967eee6d28c58c11bc5ad0fa548c205144..87c6e9f7969e97d983351fc72fc2444136fc9580 100644 --- a/src/kernel/async_task.rs +++ b/src/kernel/async_task.rs @@ -401,7 +401,7 @@ pub fn async_task_exe() { } drop(ipi_list); drop(io_list); - if task.handle() || (ipi && active_vm_id() == 0) { + if task.handle() || ipi { // task finish finish_async_task(ipi); } else {