This patch removes a couple of memory barriers from atomic bitops that showed up on profiles of netperf.
-ben Signed-off-by: Benjamin LaHaise <[EMAIL PROTECTED]> diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 00aa80e..dadc84c 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -682,7 +682,8 @@ int tcp_sendmsg(struct kiocb *iocb, stru goto out_err; /* This should be in poll */ - clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); + if (test_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags)) + clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); mss_now = tcp_current_mss(sk, !(flags&MSG_OOB)); size_goal = tp->xmit_size_goal; diff --git a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c index 84c66db..416e310 100644 --- a/net/ipv4/netfilter/ip_conntrack_core.c +++ b/net/ipv4/netfilter/ip_conntrack_core.c @@ -881,7 +881,12 @@ unsigned int ip_conntrack_in(unsigned in return -ret; } - if (set_reply && !test_and_set_bit(IPS_SEEN_REPLY_BIT, &ct->status)) + /* Use test_bit() first as that avoids a memory barrier on implicite + * in test_and_set_bit() on some CPUs. It only gets set once per + * connection. + */ + if (set_reply && !test_bit(IPS_SEEN_REPLY_BIT, &ct->status) && + !test_and_set_bit(IPS_SEEN_REPLY_BIT, &ct->status)) ip_conntrack_event_cache(IPCT_STATUS, *pskb); return ret; - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html