diff options
author | Frans Kaashoek <[email protected]> | 2019-07-30 08:13:03 -0400 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2019-07-30 08:13:03 -0400 |
commit | f1bb53c690051994f5a2c43ee900f9e335bd019c (patch) | |
tree | 5e6e77d368378640974cf31905a2a63a56eb7682 /kernel | |
parent | 530431045237d7ccbbc0bb65ed83309845c19893 (diff) | |
download | xv6-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.c | 6 |
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; } |