summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorkaashoek <kaashoek>2006-07-06 21:47:22 +0000
committerkaashoek <kaashoek>2006-07-06 21:47:22 +0000
commit7837c71b32fc716101a859302e0349061416bd6e (patch)
tree57ec72178b980a3cd794b2f93bd021e08004368f /syscall.c
parentb22d898297a2496ba4cfd31d445769fbebc0a46d (diff)
downloadxv6-labs-7837c71b32fc716101a859302e0349061416bd6e.tar.gz
xv6-labs-7837c71b32fc716101a859302e0349061416bd6e.tar.bz2
xv6-labs-7837c71b32fc716101a859302e0349061416bd6e.zip
disable all interrupts when acquiring lock
user program that makes a blocking system call
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/syscall.c b/syscall.c
index 6343531..464d665 100644
--- a/syscall.c
+++ b/syscall.c
@@ -224,6 +224,20 @@ sys_cons_putc()
return 0;
}
+int
+sys_block(void)
+{
+ char buf[1];
+
+ cprintf("%d: call sys_block\n", cpu());
+ ide_init();
+ ide_read(0, buf, 1);
+ // cprintf("sec0.0 %x\n", buf[0] & 0xff);
+ cprintf ("call sleep\n");
+ sleep (0);
+ return 0;
+}
+
void
syscall()
{
@@ -257,6 +271,9 @@ syscall()
case SYS_close:
ret = sys_close();
break;
+ case SYS_block:
+ ret = sys_block();
+ break;
default:
cprintf("unknown sys call %d\n", num);
// XXX fault