diff options
author | simokawa <simokawa@FreeBSD.org> | 2003-03-07 02:51:59 +0000 |
---|---|---|
committer | simokawa <simokawa@FreeBSD.org> | 2003-03-07 02:51:59 +0000 |
commit | 1b3633143fdb2e192176f97dc5bff972877570e3 (patch) | |
tree | bd087a1f67b70f63d44e508f886d7d895242ff31 /sys/dev/firewire/fwmem.c | |
parent | c015426a4191ad0d400bb24d2fd2c1fac1726086 (diff) | |
download | FreeBSD-src-1b3633143fdb2e192176f97dc5bff972877570e3.zip FreeBSD-src-1b3633143fdb2e192176f97dc5bff972877570e3.tar.gz |
- improve timeout handling in fwmem.c
- stop processing of TX db if we reaches the end of active db.
Diffstat (limited to 'sys/dev/firewire/fwmem.c')
-rw-r--r-- | sys/dev/firewire/fwmem.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c index 182ea6a..891fc7a 100644 --- a/sys/dev/firewire/fwmem.c +++ b/sys/dev/firewire/fwmem.c @@ -304,11 +304,12 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag) err = EINVAL; break; } - err = tsleep((caddr_t)xfer, FWPRI, "fwmrq", hz); - if (err !=0 || xfer->resp != 0 - || xfer->recv.buf == NULL) + err = tsleep((caddr_t)xfer, FWPRI, "fwmrq", 0); + if (xfer->recv.buf == NULL) err = EIO; - else + else if (xfer->resp != 0) + err = xfer->resp; + else if (err == 0) err = uiomove(xfer->recv.buf + xfer->recv.off + 4*3, 4, uio); } else { @@ -320,11 +321,12 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag) err = EINVAL; break; } - err = tsleep((caddr_t)xfer, FWPRI, "fwmrb", hz); - if (err != 0 || xfer->resp != 0 - || xfer->recv.buf == NULL) + err = tsleep((caddr_t)xfer, FWPRI, "fwmrb", 0); + if (xfer->recv.buf == NULL) err = EIO; - else + else if (xfer->resp != 0) + err = xfer->resp; + else if (err == 0) err = uiomove(xfer->recv.buf + xfer->recv.off + 4*4, len, uio); } @@ -372,9 +374,9 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag) err = EINVAL; break; } - err = tsleep((caddr_t)xfer, FWPRI, "fwmwq", hz); - if (err !=0 || xfer->resp != 0) - err = EIO; + err = tsleep((caddr_t)xfer, FWPRI, "fwmwq", 0); + if (xfer->resp != 0) + err = xfer->resp; } else { if (len > MAXLEN) len = MAXLEN; @@ -387,9 +389,9 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag) err = EINVAL; break; } - err = tsleep((caddr_t)xfer, FWPRI, "fwmwb", hz); - if (err != 0 || xfer->resp != 0) - err = EIO; + err = tsleep((caddr_t)xfer, FWPRI, "fwmwb", 0); + if (xfer->resp != 0) + err = xfer->resp; } fw_xfer_free(xfer); } |