summaryrefslogtreecommitdiff
path: root/sys/net/if_ethersubr.c
diff options
context:
space:
mode:
authorVitaliy Makkoveev <mvs@cvs.openbsd.org>2022-06-29 09:08:08 +0000
committerVitaliy Makkoveev <mvs@cvs.openbsd.org>2022-06-29 09:08:08 +0000
commit8245f4e12b8ab475bbf02a96816154c84a2f7b49 (patch)
treefc3dfa25f4605f65653a486b2a9e888cae9e96a1 /sys/net/if_ethersubr.c
parent4183d465e8446b5326831f42d1432eca6502691a (diff)
ether_input() called with shared netlock, but pppoe(4) wants it to be
exclusive. Do the pppoe(4) input within netisr handler with exclusive netlok held and remove kernel lock hack from ether_input(). This is the step back, but it makes ether_input() path better then it is now. Tested by Hrvoje Popovski. ok bluhm@ claudio@
Diffstat (limited to 'sys/net/if_ethersubr.c')
-rw-r--r--sys/net/if_ethersubr.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 5e9067b0676..3fb702c453f 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ethersubr.c,v 1.283 2022/06/28 16:10:43 mvs Exp $ */
+/* $OpenBSD: if_ethersubr.c,v 1.284 2022/06/29 09:08:07 mvs Exp $ */
/* $NetBSD: if_ethersubr.c,v 1.19 1996/05/07 02:40:30 thorpej Exp $ */
/*
@@ -545,12 +545,13 @@ ether_input(struct ifnet *ifp, struct mbuf *m)
}
}
#endif
- KERNEL_LOCK();
- if (etype == ETHERTYPE_PPPOEDISC)
- pppoe_disc_input(m);
- else
- pppoe_data_input(m);
- KERNEL_UNLOCK();
+ if (etype == ETHERTYPE_PPPOEDISC) {
+ if (mq_enqueue(&pppoediscinq, m) == 0)
+ schednetisr(NETISR_PPPOE);
+ } else {
+ if (mq_enqueue(&pppoeinq, m) == 0)
+ schednetisr(NETISR_PPPOE);
+ }
return;
#endif
#ifdef MPLS