LORs in ipfilter
Giorgos Keramidas
keramida at freebsd.org
Fri Dec 24 23:59:42 PST 2004
On 2004-12-25 09:57, Giorgos Keramidas <keramida at freebsd.org> wrote:
> The locking changes of ipfilter have introduced a few LORs, [...]
It may help to send over the changes I locally made to use mutexes
instead of sx locks:
%%%
Index: sys/contrib/ipfilter/netinet/ip_compat.h
===================================================================
RCS file: /home/ncvs/src/sys/contrib/ipfilter/netinet/ip_compat.h,v
retrieving revision 1.24
diff -u -r1.24 ip_compat.h
--- sys/contrib/ipfilter/netinet/ip_compat.h 24 Dec 2004 09:14:26 -0000 1.24
+++ sys/contrib/ipfilter/netinet/ip_compat.h 25 Dec 2004 07:49:31 -0000
@@ -424,15 +424,6 @@
# undef MUTEX_INIT
# undef MUTEX_DESTROY
#endif
-#if defined(__FreeBSD_version) && (__FreeBSD_version >= 500043)
-# include <sys/mutex.h>
-# include <sys/sx.h>
-# include <machine/atomic.h>
-# define USE_MUTEX 1
-# define kmutex_t struct mtx
-# define KRWLOCK_T struct sx
-# define NETBSD_PF
-#endif
#ifdef KERNEL
# if SOLARIS
# if SOLARIS2 >= 6
@@ -525,30 +516,26 @@
# else /* __sgi */
# if defined(__FreeBSD_version) && (__FreeBSD_version >= 500043)
# include <sys/mutex.h>
-# include <sys/sx.h>
# include <machine/atomic.h>
# define USE_MUTEX 1
+# define NETBSD_PF
# define kmutex_t struct mtx
-# define KRWLOCK_T struct sx
+# define KRWLOCK_T kmutex_t
# define ATOMIC_INC(x) { MUTEX_ENTER(&ipf_rw); \
(x)++; MUTEX_EXIT(&ipf_rw); }
# define ATOMIC_DEC(x) { MUTEX_ENTER(&ipf_rw); \
(x)--; MUTEX_EXIT(&ipf_rw); }
# define MUTEX_ENTER(x) mtx_lock(x)
-# define READ_ENTER(x) sx_slock(x)
-# define WRITE_ENTER(x) sx_xlock(x)
+# define READ_ENTER(x) MUTEX_ENTER(x)
+# define WRITE_ENTER(x) MUTEX_ENTER(x)
# define RW_UPGRADE(x) ;
-# define MUTEX_DOWNGRADE(x) sx_downgrade(x)
-# define RWLOCK_INIT(x, y, z) sx_init((x), (y))
-# define RWLOCK_EXIT(x) do { \
- if ((x)->sx_cnt < 0) \
- sx_xunlock(x); \
- else \
- sx_sunlock(x); \
- } while (0)
+# define MUTEX_DOWNGRADE(x) ;
# define MUTEX_EXIT(x) mtx_unlock(x)
+# define RWLOCK_EXIT(x) mtx_unlock(x)
# define MUTEX_INIT(x,y,z) mtx_init((x), (y), NULL, MTX_DEF)
# define MUTEX_DESTROY(x) mtx_destroy(x)
+# define RWLOCK_INIT(x,y,z) mtx_init((x), (y), NULL, MTX_DEF)
+# define RW_DESTROY(x) MUTEX_DESTROY(x)
# else
# define ATOMIC_INC(x) (x)++
# define ATOMIC_DEC(x) (x)--
%%%
More information about the freebsd-current
mailing list