summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2019-07-30 08:13:03 -0400
committerFrans Kaashoek <[email protected]>2019-07-30 08:13:03 -0400
commitf1bb53c690051994f5a2c43ee900f9e335bd019c (patch)
tree5e6e77d368378640974cf31905a2a63a56eb7682 /kernel
parent530431045237d7ccbbc0bb65ed83309845c19893 (diff)
downloadxv6-labs-f1bb53c690051994f5a2c43ee900f9e335bd019c.tar.gz
xv6-labs-f1bb53c690051994f5a2c43ee900f9e335bd019c.tar.bz2
xv6-labs-f1bb53c690051994f5a2c43ee900f9e335bd019c.zip
The driver should free descriptors, not interrupt handler. This
avoids handler freeing descriptors before driver sees that the request has completed.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/virtio_disk.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/virtio_disk.c b/kernel/virtio_disk.c
index df4473d..9ebe695 100644
--- a/kernel/virtio_disk.c
+++ b/kernel/virtio_disk.c
@@ -239,6 +239,9 @@ virtio_disk_rw(struct buf *b, int write)
sleep(b, &vdisk_lock);
}
+ info[idx[0]].b = 0;
+ free_chain(idx[0]);
+
release(&vdisk_lock);
}
@@ -256,9 +259,6 @@ virtio_disk_intr()
info[id].status = 1;
wakeup(info[id].b);
- info[id].b = 0;
- free_chain(id);
-
used_idx = (used_idx + 1) % NUM;
}