Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 223 # endif
 224 
 225 # if SOLARIS2 >= 6
 226 #  include <sys/atomic.h>
 227 typedef uint32_t        u_32_t;
 228 # else
 229 typedef unsigned int    u_32_t;
 230 # endif
 231 # define        U_32_T  1
 232 
 233 # ifdef _KERNEL
 234 #  define       KRWLOCK_T               krwlock_t
 235 #  define       KMUTEX_T                kmutex_t
 236 #  if SOLARIS2 >= 10
 237 #   include <sys/sdt.h>
 238 
 239 #   define IPF_IS_LOOPBACK(f)   ((f) & FI_NOCKSUM)
 240 #  endif /* SOLARIS2 >= 10 */
 241 #  if SOLARIS2 >= 6
 242 #   if SOLARIS2 == 6
 243 #    define     ATOMIC_INCL(x)          atomic_add_long((uint32_t*)&(x), 1)
 244 #    define     ATOMIC_DECL(x)          atomic_add_long((uint32_t*)&(x), -1)
 245 #   else
 246 #    define     ATOMIC_INCL(x)          atomic_add_long(&(x), 1)
 247 #    define     ATOMIC_DECL(x)          atomic_add_long(&(x), -1)
 248 #   endif /* SOLARIS2 == 6 */
 249 #   define      ATOMIC_INC64(x)         atomic_add_64((uint64_t*)&(x), 1)
 250 #   define      ATOMIC_INC32(x)         atomic_add_32((uint32_t*)&(x), 1)
 251 #   define      ATOMIC_INC16(x)         atomic_add_16((uint16_t*)&(x), 1)
 252 #   define      ATOMIC_DEC64(x)         atomic_add_64((uint64_t*)&(x), -1)
 253 #   define      ATOMIC_DEC32(x)         atomic_add_32((uint32_t*)&(x), -1)
 254 #   define      ATOMIC_DEC16(x)         atomic_add_16((uint16_t*)&(x), -1)
 255 #  else
 256 #   define      ATOMIC_INC(x)           { mutex_enter(&ipf_rw); (x)++; \
 257                                           mutex_exit(&ipf_rw); }
 258 #   define      ATOMIC_DEC(x)           { mutex_enter(&ipf_rw); (x)--; \
 259                                           mutex_exit(&ipf_rw); }
 260 #  endif /* SOLARIS2 >= 6 */
 261 #  define       USE_MUTEXES
 262 #  define       MUTEX_ENTER(x)          mutex_enter(&(x)->ipf_lk)
 263 #  define       READ_ENTER(x)           rw_enter(&(x)->ipf_lk, RW_READER)
 264 #  define       WRITE_ENTER(x)          rw_enter(&(x)->ipf_lk, RW_WRITER)
 265 #  define       MUTEX_DOWNGRADE(x)      rw_downgrade(&(x)->ipf_lk)
 266 #  define       RWLOCK_INIT(x, y)       rw_init(&(x)->ipf_lk, (y),  \
 267                                                 RW_DRIVER, NULL)
 268 #  define       RWLOCK_EXIT(x)          rw_exit(&(x)->ipf_lk)
 269 #  define       RW_DESTROY(x)           rw_destroy(&(x)->ipf_lk)
 270 #  define       MUTEX_INIT(x, y)        mutex_init(&(x)->ipf_lk, (y), \
 271                                                    MUTEX_DRIVER, NULL)
 272 #  define       MUTEX_DESTROY(x)        mutex_destroy(&(x)->ipf_lk)
 273 #  define       MUTEX_NUKE(x)           bzero((x), sizeof(*(x)))
 274 #  define       MUTEX_EXIT(x)           mutex_exit(&(x)->ipf_lk)


 908 #    define     WRITE_ENTER(x)          sx_xlock(&(x)->ipf_lk)
 909 #    define     MUTEX_DOWNGRADE(x)      sx_downgrade(&(x)->ipf_lk)
 910 #    define     RWLOCK_INIT(x, y)       sx_init(&(x)->ipf_lk, (y))
 911 #    define     RW_DESTROY(x)           sx_destroy(&(x)->ipf_lk)
 912 #    ifdef sx_unlock
 913 #     define    RWLOCK_EXIT(x)          sx_unlock(x)
 914 #    else
 915 #     define    RWLOCK_EXIT(x)          do { \
 916                                             if ((x)->ipf_lk.sx_cnt < 0) \
 917                                                 sx_xunlock(&(x)->ipf_lk); \
 918                                             else \
 919                                                 sx_sunlock(&(x)->ipf_lk); \
 920                                         } while (0)
 921 #    endif
 922 #   endif
 923 #   include <machine/atomic.h>
 924 #   define      ATOMIC_INC(x)           { mtx_lock(&ipf_rw.ipf_lk); (x)++; \
 925                                           mtx_unlock(&ipf_rw.ipf_lk); }
 926 #   define      ATOMIC_DEC(x)           { mtx_lock(&ipf_rw.ipf_lk); (x)--; \
 927                                           mtx_unlock(&ipf_rw.ipf_lk); }
 928 #   define      ATOMIC_INCL(x)          atomic_add_long(&(x), 1)
 929 #   define      ATOMIC_INC64(x)         ATOMIC_INC(x)
 930 #   define      ATOMIC_INC32(x)         atomic_add_32(&(x), 1)
 931 #   define      ATOMIC_INC16(x)         atomic_add_16(&(x), 1)
 932 #   define      ATOMIC_DECL(x)          atomic_add_long(&(x), -1)
 933 #   define      ATOMIC_DEC64(x)         ATOMIC_DEC(x)
 934 #   define      ATOMIC_DEC32(x)         atomic_add_32(&(x), -1)
 935 #   define      ATOMIC_DEC16(x)         atomic_add_16(&(x), -1)
 936 #   define      SPL_X(x)        ;
 937 #   define      SPL_NET(x)      ;
 938 #   define      SPL_IMP(x)      ;
 939 extern  int     in_cksum __P((struct mbuf *, int));
 940 #  endif /* __FreeBSD_version >= 500043 */
 941 #  define       MSGDSIZE(x)     mbufchainlen(x)
 942 #  define       M_LEN(x)        (x)->m_len
 943 #  define       M_DUPLICATE(x)  m_copy((x), 0, M_COPYALL)
 944 #  define       IPF_PANIC(x,y)  if (x) { printf y; panic("ipf_panic"); }
 945 typedef struct mbuf mb_t;
 946 # endif /* _KERNEL */
 947 
 948 # if __FreeBSD__ < 3
 949 #  include <machine/spl.h>
 950 # else
 951 #  if __FreeBSD__ == 3
 952 #   if defined(IPFILTER_LKM) && !defined(ACTUALLY_LKM_NOT_KERNEL)
 953 #    define     ACTUALLY_LKM_NOT_KERNEL
 954 #   endif
 955 #  endif




 223 # endif
 224 
 225 # if SOLARIS2 >= 6
 226 #  include <sys/atomic.h>
 227 typedef uint32_t        u_32_t;
 228 # else
 229 typedef unsigned int    u_32_t;
 230 # endif
 231 # define        U_32_T  1
 232 
 233 # ifdef _KERNEL
 234 #  define       KRWLOCK_T               krwlock_t
 235 #  define       KMUTEX_T                kmutex_t
 236 #  if SOLARIS2 >= 10
 237 #   include <sys/sdt.h>
 238 
 239 #   define IPF_IS_LOOPBACK(f)   ((f) & FI_NOCKSUM)
 240 #  endif /* SOLARIS2 >= 10 */
 241 #  if SOLARIS2 >= 6
 242 #   if SOLARIS2 == 6
 243 #    define     ATOMIC_INCL(x)          atomic_inc_ulong((uint32_t *)&(x))
 244 #    define     ATOMIC_DECL(x)          atomic_dec_ulong((uint32_t *)&(x))
 245 #   else
 246 #    define     ATOMIC_INCL(x)          atomic_inc_ulong(&(x))
 247 #    define     ATOMIC_DECL(x)          atomic_dec_ulong(&(x))
 248 #   endif /* SOLARIS2 == 6 */
 249 #   define      ATOMIC_INC64(x)         atomic_inc_64((uint64_t *)&(x))
 250 #   define      ATOMIC_INC32(x)         atomic_inc_32((uint32_t *)&(x))
 251 #   define      ATOMIC_INC16(x)         atomic_inc_16((uint16_t *)&(x))
 252 #   define      ATOMIC_DEC64(x)         atomic_dec_64((uint64_t *)&(x))
 253 #   define      ATOMIC_DEC32(x)         atomic_dec_32((uint32_t *)&(x))
 254 #   define      ATOMIC_DEC16(x)         atomic_dec_16((uint16_t *)&(x))
 255 #  else
 256 #   define      ATOMIC_INC(x)           { mutex_enter(&ipf_rw); (x)++; \
 257                                           mutex_exit(&ipf_rw); }
 258 #   define      ATOMIC_DEC(x)           { mutex_enter(&ipf_rw); (x)--; \
 259                                           mutex_exit(&ipf_rw); }
 260 #  endif /* SOLARIS2 >= 6 */
 261 #  define       USE_MUTEXES
 262 #  define       MUTEX_ENTER(x)          mutex_enter(&(x)->ipf_lk)
 263 #  define       READ_ENTER(x)           rw_enter(&(x)->ipf_lk, RW_READER)
 264 #  define       WRITE_ENTER(x)          rw_enter(&(x)->ipf_lk, RW_WRITER)
 265 #  define       MUTEX_DOWNGRADE(x)      rw_downgrade(&(x)->ipf_lk)
 266 #  define       RWLOCK_INIT(x, y)       rw_init(&(x)->ipf_lk, (y),  \
 267                                                 RW_DRIVER, NULL)
 268 #  define       RWLOCK_EXIT(x)          rw_exit(&(x)->ipf_lk)
 269 #  define       RW_DESTROY(x)           rw_destroy(&(x)->ipf_lk)
 270 #  define       MUTEX_INIT(x, y)        mutex_init(&(x)->ipf_lk, (y), \
 271                                                    MUTEX_DRIVER, NULL)
 272 #  define       MUTEX_DESTROY(x)        mutex_destroy(&(x)->ipf_lk)
 273 #  define       MUTEX_NUKE(x)           bzero((x), sizeof(*(x)))
 274 #  define       MUTEX_EXIT(x)           mutex_exit(&(x)->ipf_lk)


 908 #    define     WRITE_ENTER(x)          sx_xlock(&(x)->ipf_lk)
 909 #    define     MUTEX_DOWNGRADE(x)      sx_downgrade(&(x)->ipf_lk)
 910 #    define     RWLOCK_INIT(x, y)       sx_init(&(x)->ipf_lk, (y))
 911 #    define     RW_DESTROY(x)           sx_destroy(&(x)->ipf_lk)
 912 #    ifdef sx_unlock
 913 #     define    RWLOCK_EXIT(x)          sx_unlock(x)
 914 #    else
 915 #     define    RWLOCK_EXIT(x)          do { \
 916                                             if ((x)->ipf_lk.sx_cnt < 0) \
 917                                                 sx_xunlock(&(x)->ipf_lk); \
 918                                             else \
 919                                                 sx_sunlock(&(x)->ipf_lk); \
 920                                         } while (0)
 921 #    endif
 922 #   endif
 923 #   include <machine/atomic.h>
 924 #   define      ATOMIC_INC(x)           { mtx_lock(&ipf_rw.ipf_lk); (x)++; \
 925                                           mtx_unlock(&ipf_rw.ipf_lk); }
 926 #   define      ATOMIC_DEC(x)           { mtx_lock(&ipf_rw.ipf_lk); (x)--; \
 927                                           mtx_unlock(&ipf_rw.ipf_lk); }
 928 #   define      ATOMIC_INCL(x)          atomic_inc_ulong(&(x))
 929 #   define      ATOMIC_INC64(x)         ATOMIC_INC(x)
 930 #   define      ATOMIC_INC32(x)         atomic_inc_32(&(x))
 931 #   define      ATOMIC_INC16(x)         atomic_inc_16(&(x))
 932 #   define      ATOMIC_DECL(x)          atomic_dec_ulong(&(x))
 933 #   define      ATOMIC_DEC64(x)         ATOMIC_DEC(x)
 934 #   define      ATOMIC_DEC32(x)         atomic_dec_32(&(x))
 935 #   define      ATOMIC_DEC16(x)         atomic_dec_16(&(x))
 936 #   define      SPL_X(x)        ;
 937 #   define      SPL_NET(x)      ;
 938 #   define      SPL_IMP(x)      ;
 939 extern  int     in_cksum __P((struct mbuf *, int));
 940 #  endif /* __FreeBSD_version >= 500043 */
 941 #  define       MSGDSIZE(x)     mbufchainlen(x)
 942 #  define       M_LEN(x)        (x)->m_len
 943 #  define       M_DUPLICATE(x)  m_copy((x), 0, M_COPYALL)
 944 #  define       IPF_PANIC(x,y)  if (x) { printf y; panic("ipf_panic"); }
 945 typedef struct mbuf mb_t;
 946 # endif /* _KERNEL */
 947 
 948 # if __FreeBSD__ < 3
 949 #  include <machine/spl.h>
 950 # else
 951 #  if __FreeBSD__ == 3
 952 #   if defined(IPFILTER_LKM) && !defined(ACTUALLY_LKM_NOT_KERNEL)
 953 #    define     ACTUALLY_LKM_NOT_KERNEL
 954 #   endif
 955 #  endif