Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 May 2014 02:32:32 +0200
From:      Luigi Rizzo <rizzo@iet.unipi.it>
To:        Navdeep Parhar <np@freebsd.org>
Cc:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Subject:   Re: change netmap global lock to sx?
Message-ID:  <CA%2BhQ2%2BgBypQa3KiSdZZS9ytW4dqE5jMNkuTK2FYwRtDGQAxtPA@mail.gmail.com>
In-Reply-To: <5385249D.9050501@FreeBSD.org>
References:  <5385249D.9050501@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, May 28, 2014 at 1:49 AM, Navdeep Parhar <np@freebsd.org> wrote:

> I'd like to change the netmap global lock from a mutex into a sleepable
> shared/exclusive lock.  This will allow a driver's nm_register hook
> (which is called with the global lock held) to sleep if it has to.  I've
> casually used pkt-gen after this conversion (patch attached) and the
> witness hasn't complained about it.
>
>
=E2=80=8Bno objections, let me give this a try on stable/10
stable/9 to make sure we can use the same code there as well

cheers
luigi
=E2=80=8B

> Thoughts?
>
> Regards,
> Navdeep
>
>
> diff -r 0300d80260f4 sys/dev/netmap/netmap_kern.h
> --- a/sys/dev/netmap/netmap_kern.h      Fri May 23 19:00:56 2014 -0700
> +++ b/sys/dev/netmap/netmap_kern.h      Sat May 24 12:49:15 2014 -0700
> @@ -43,13 +43,13 @@
>  #define unlikely(x)    __builtin_expect((long)!!(x), 0L)
>
>  #define        NM_LOCK_T       struct mtx
> -#define        NMG_LOCK_T      struct mtx
> -#define NMG_LOCK_INIT()        mtx_init(&netmap_global_lock, \
> -                               "netmap global lock", NULL, MTX_DEF)
> -#define NMG_LOCK_DESTROY()     mtx_destroy(&netmap_global_lock)
> -#define NMG_LOCK()     mtx_lock(&netmap_global_lock)
> -#define NMG_UNLOCK()   mtx_unlock(&netmap_global_lock)
> -#define NMG_LOCK_ASSERT()      mtx_assert(&netmap_global_lock, MA_OWNED)
> +#define        NMG_LOCK_T      struct sx
> +#define NMG_LOCK_INIT()        sx_init(&netmap_global_lock, \
> +                               "netmap global lock")
> +#define NMG_LOCK_DESTROY()     sx_destroy(&netmap_global_lock)
> +#define NMG_LOCK()     sx_xlock(&netmap_global_lock)
> +#define NMG_UNLOCK()   sx_xunlock(&netmap_global_lock)
> +#define NMG_LOCK_ASSERT()      sx_assert(&netmap_global_lock, SA_XLOCKED=
)
>
>  #define        NM_SELINFO_T    struct selinfo
>  #define        MBUF_LEN(m)     ((m)->m_pkthdr.len)
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BhQ2%2BgBypQa3KiSdZZS9ytW4dqE5jMNkuTK2FYwRtDGQAxtPA>