diff options
author | andre <andre@FreeBSD.org> | 2004-08-27 18:33:08 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2004-08-27 18:33:08 +0000 |
commit | 21264022388cc795478511d03b72ddc0ce213c5b (patch) | |
tree | 5e40bb2ff1fccfd1425f4b8ada947f22f8df6605 /sys/dev | |
parent | 4e16b35c5bbfa63f8794131592ae3b1ac4d05cfd (diff) | |
download | FreeBSD-src-21264022388cc795478511d03b72ddc0ce213c5b.zip FreeBSD-src-21264022388cc795478511d03b72ddc0ce213c5b.tar.gz |
Apply error and success logic consistently to the function netisr_queue() and
its users.
netisr_queue() now returns (0) on success and ERRNO on failure. At the
moment ENXIO (netisr queue not functional) and ENOBUFS (netisr queue full)
are supported.
Previously it would return (1) on success but the return value of IF_HANDOFF()
was interpreted wrongly and (0) was actually returned on success. Due to this
schednetisr() was never called to kick the scheduling of the isr. However this
was masked by other normal packets coming through netisr_dispatch() causing the
dequeueing of waiting packets.
PR: kern/70988
Found by: MOROHOSHI Akihiko <moro@remus.dti.ne.jp>
MFC after: 3 days
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/hfa/fore_receive.c | 2 | ||||
-rw-r--r-- | sys/dev/idt/idt_harp.c | 3 | ||||
-rw-r--r-- | sys/dev/ppbus/if_plip.c | 4 |
3 files changed, 4 insertions, 5 deletions
diff --git a/sys/dev/hfa/fore_receive.c b/sys/dev/hfa/fore_receive.c index 5d89522..c07eee5 100644 --- a/sys/dev/hfa/fore_receive.c +++ b/sys/dev/hfa/fore_receive.c @@ -480,7 +480,7 @@ retry: /* * Schedule callback */ - if (! netisr_queue(NETISR_ATM, mhead)) { + if (netisr_queue(NETISR_ATM, mhead)) { /* (0) on success. */ fup->fu_stats->st_drv.drv_rv_ifull++; goto free_ent; } diff --git a/sys/dev/idt/idt_harp.c b/sys/dev/idt/idt_harp.c index 3a2f27b..61cbdf9 100644 --- a/sys/dev/idt/idt_harp.c +++ b/sys/dev/idt/idt_harp.c @@ -762,6 +762,5 @@ idt_receive(nicstar_reg_t * idt, struct mbuf * m, int vpi, int vci) /* * Schedule callback */ - if (! netisr_queue(NETISR_ATM, m)) - KB_FREEALL(m); + netisr_queue(NETISR_ATM, m); /* mbuf is free'd on failure. */ } diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c index 67d8be9..5b05812 100644 --- a/sys/dev/ppbus/if_plip.c +++ b/sys/dev/ppbus/if_plip.c @@ -510,7 +510,7 @@ lp_intr (void *arg) if (top) { if (sc->sc_if.if_bpf) lptap(&sc->sc_if, top); - netisr_queue(NETISR_IP, top); + netisr_queue(NETISR_IP, top); /* mbuf is free'd on failure. */ } goto done; } @@ -555,7 +555,7 @@ lp_intr (void *arg) if (top) { if (sc->sc_if.if_bpf) lptap(&sc->sc_if, top); - netisr_queue(NETISR_IP, top); + netisr_queue(NETISR_IP, top); /* mbuf is free'd on failure. */ } } goto done; |