diff --git a/ghc/lib/std/IO.lhs b/ghc/lib/std/IO.lhs
index 22b7745b3cfd293d6c0850a6f4c8ab5a76882206..d98b15cb0074592be90e81a83845453d6a82f8ef 100644
--- a/ghc/lib/std/IO.lhs
+++ b/ghc/lib/std/IO.lhs
@@ -166,7 +166,7 @@ instance Read BufferMode where
 Computation @hReady hdl@ indicates whether at least
 one item is available for input from handle {\em hdl}.
 
-@hWaitForInput@ is the generalisation, wait for \tr{n} seconds
+@hWaitForInput@ is the generalisation, wait for \tr{n} milliseconds
 before deciding whether the Handle has run dry or not.
 
 \begin{code}
@@ -174,9 +174,9 @@ before deciding whether the Handle has run dry or not.
 hReady h = hWaitForInput h 0
 
 --hWaitForInput :: Handle -> Int -> IO Bool 
-hWaitForInput handle nsecs = do
+hWaitForInput handle msecs = do
     hdl   <- wantReadableHandle handle
-    rc    <- _ccall_ inputReady (filePtr hdl) nsecs
+    rc    <- _ccall_ inputReady (filePtr hdl) msecs
     writeHandle handle (markHandle hdl)
     case rc of
       0 -> return False
diff --git a/ghc/lib/std/cbits/inputReady.lc b/ghc/lib/std/cbits/inputReady.lc
index 8baa5829716d5c38c3442d66141f7e552401ae58..7d9b685880c6777055b497e434b687e47f72a727 100644
--- a/ghc/lib/std/cbits/inputReady.lc
+++ b/ghc/lib/std/cbits/inputReady.lc
@@ -36,9 +36,9 @@
 #endif
 
 StgInt
-inputReady(fp, nsecs)
+inputReady(fp, msecs)
 StgForeignObj fp;
-StgInt nsecs;
+StgInt msecs;
 {
     int flags, c, fd, maxfd, ready;
     fd_set rfd;
@@ -75,8 +75,8 @@ StgInt nsecs;
     FD_SET(fd, &rfd);
     /* select() will consider the descriptor set in the range of 0 to (maxfd-1) */
     maxfd = fd + 1;
-    tv.tv_usec = 0;
-    tv.tv_sec  = nsecs;
+    tv.tv_sec  = msecs / 1000;
+    tv.tv_usec = msecs % 1000;
     while ((ready = select(maxfd, &rfd, NULL, NULL, &tv)) < 0 ) {
       if (errno != EINTR ) {
 		cvtErrno();