diff options
author | rsc <rsc> | 2007-08-14 18:46:29 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-14 18:46:29 +0000 |
commit | 8d0a83565a2b8e0ee2b7e6cab93c6ba7b5a58224 (patch) | |
tree | d057b08ef571029c593ac24fb1e7758b5a2cfc58 /ide.c | |
parent | f1f8dd91bc4e8b58972f17416b664f3a950092cd (diff) | |
download | xv6-labs-8d0a83565a2b8e0ee2b7e6cab93c6ba7b5a58224.tar.gz xv6-labs-8d0a83565a2b8e0ee2b7e6cab93c6ba7b5a58224.tar.bz2 xv6-labs-8d0a83565a2b8e0ee2b7e6cab93c6ba7b5a58224.zip |
formatting, sleep bug fix
Diffstat (limited to 'ide.c')
-rw-r--r-- | ide.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -29,6 +29,7 @@ struct ide_request { void *addr; uint nsecs; uint read; + int done; }; static struct ide_request request[NREQUEST]; @@ -40,6 +41,7 @@ static int disk_queue; static int ide_probe_disk1(void); +//PAGEBREAK: 10 // Wait for IDE disk to become ready. static int ide_wait_ready(int check_error) @@ -91,6 +93,7 @@ void ide_intr(void) { acquire(&ide_lock); + request[tail].done = 1; wakeup(&request[tail]); release(&ide_lock); } @@ -119,6 +122,7 @@ ide_start_request (void) } } +//PAGEBREAK: 30 // Run an entire disk operation. void ide_rw(int diskno, uint secno, void *addr, uint nsecs, int read) @@ -140,13 +144,15 @@ ide_rw(int diskno, uint secno, void *addr, uint nsecs, int read) r->nsecs = nsecs; r->diskno = diskno; r->read = read; + r->done = 0; head = (head + 1) % NREQUEST; // Start request if necessary. ide_start_request(); // Wait for request to finish. - sleep(r, &ide_lock); + while(!r->done) + sleep(r, &ide_lock); // Finish request. if(read){ |