PF has its own home-brewed solution for dealing with CPU hogging. It
has been introduced in r1.88 of net/pf_table.c and I couldn't find any
explanation why it is different than the idiom we use in other places.
So let's use the same idiom, I promise to introduce a macro an unify all
of them once this is in.
ok?
Index: net/pf_table.c
===================================================================
RCS file: /cvs/src/sys/net/pf_table.c,v
retrieving revision 1.123
diff -u -p -r1.123 pf_table.c
--- net/pf_table.c 24 Jan 2017 10:08:30 -0000 1.123
+++ net/pf_table.c 6 Feb 2017 12:33:28 -0000
@@ -36,6 +36,7 @@
#include <sys/mbuf.h>
#include <sys/pool.h>
#include <sys/syslog.h>
+#include <sys/proc.h>
#include <net/if.h>
@@ -72,11 +73,8 @@
(bcopy((from), (to), (size)), 0))
#define YIELD(cnt, ok) \
- do { \
- if ((cnt % 1024 == 1023) && \
- (ok)) \
- yield(); \
- } while (0)
+ if (curcpu()->ci_schedstate.spc_schedflags & SPCF_SHOULDYIELD) \
+ preempt(NULL) \
#define FILLIN_SIN(sin, addr) \
do { \