svn commit: r332734 - in stable/11/sys: kern net
Stephen Hurd
shurd at FreeBSD.org
Wed Apr 18 18:45:05 UTC 2018
Author: shurd
Date: Wed Apr 18 18:45:04 2018
New Revision: 332734
URL: https://svnweb.freebsd.org/changeset/base/332734
Log:
MFC r332388:
Make BPF global lock an SX
This allows NIC drivers to sleep on polling config operations.
PR: 323477
Submitted by: Matthew Macy <mmacy at mattmacy.io>
Reviewed by: shurd
Sponsored by: Limelight Networks
Differential Revision: https://reviews.freebsd.org/D14982
Modified:
stable/11/sys/kern/subr_witness.c
stable/11/sys/net/bpf.c
stable/11/sys/net/bpfdesc.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/subr_witness.c
==============================================================================
--- stable/11/sys/kern/subr_witness.c Wed Apr 18 18:36:26 2018 (r332733)
+++ stable/11/sys/kern/subr_witness.c Wed Apr 18 18:45:04 2018 (r332734)
@@ -567,7 +567,7 @@ static struct witness_order_list_entry order_lists[] =
/*
* BPF
*/
- { "bpf global lock", &lock_class_mtx_sleep },
+ { "bpf global lock", &lock_class_sx },
{ "bpf interface lock", &lock_class_rw },
{ "bpf cdev lock", &lock_class_mtx_sleep },
{ NULL, NULL },
Modified: stable/11/sys/net/bpf.c
==============================================================================
--- stable/11/sys/net/bpf.c Wed Apr 18 18:36:26 2018 (r332733)
+++ stable/11/sys/net/bpf.c Wed Apr 18 18:45:04 2018 (r332734)
@@ -157,6 +157,9 @@ struct bpf_dltlist32 {
#define BIOCSETFNR32 _IOW('B', 130, struct bpf_program32)
#endif
+#define BPF_LOCK() sx_xlock(&bpf_sx)
+#define BPF_UNLOCK() sx_xunlock(&bpf_sx)
+#define BPF_LOCK_ASSERT() sx_assert(&bpf_sx, SA_XLOCKED)
/*
* bpf_iflist is a list of BPF interface structures, each corresponding to a
* specific DLT. The same network interface might have several BPF interface
@@ -164,7 +167,7 @@ struct bpf_dltlist32 {
* frames, ethernet frames, etc).
*/
static LIST_HEAD(, bpf_if) bpf_iflist, bpf_freelist;
-static struct mtx bpf_mtx; /* bpf global lock */
+static struct sx bpf_sx; /* bpf global lock */
static int bpf_bpfd_cnt;
static void bpf_attachd(struct bpf_d *, struct bpf_if *);
@@ -2800,7 +2803,7 @@ bpf_drvinit(void *unused)
{
struct cdev *dev;
- mtx_init(&bpf_mtx, "bpf global lock", NULL, MTX_DEF);
+ sx_init(&bpf_sx, "bpf global lock");
LIST_INIT(&bpf_iflist);
LIST_INIT(&bpf_freelist);
Modified: stable/11/sys/net/bpfdesc.h
==============================================================================
--- stable/11/sys/net/bpfdesc.h Wed Apr 18 18:36:26 2018 (r332733)
+++ stable/11/sys/net/bpfdesc.h Wed Apr 18 18:45:04 2018 (r332734)
@@ -115,9 +115,6 @@ struct bpf_d {
#define BPF_PID_REFRESH(bd, td) (bd)->bd_pid = (td)->td_proc->p_pid
#define BPF_PID_REFRESH_CUR(bd) (bd)->bd_pid = curthread->td_proc->p_pid
-#define BPF_LOCK() mtx_lock(&bpf_mtx)
-#define BPF_UNLOCK() mtx_unlock(&bpf_mtx)
-#define BPF_LOCK_ASSERT() mtx_assert(&bpf_mtx, MA_OWNED)
/*
* External representation of the bpf descriptor
*/
More information about the svn-src-stable-11
mailing list