Message ID | 1507573730-8083-9-git-send-email-mark.rutland@arm.com |
---|---|
State | New |
Headers | show |
Series | Preparatory work to kill off ACCESS_ONCE() | expand |
On Mon, Oct 09, 2017 at 07:28:45PM +0100, Mark Rutland wrote: > - ACCESS_ONCE(sk->sk_pacing_rate) = min_t(u64, rate, > - sk->sk_max_pacing_rate); > + WRITE_ONCE(sk->sk_pacing_rate) = min_t(u64, rate, > + sk->sk_max_pacing_rate); Sorry, I messed this up when attempting to fix the horizontal alignment of the min_t() parameters. I've pushed out a corrected version to my core/access-once branch [1]. Thanks, Mark. [1] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git core/access-once
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index c5d7656..0b3bb19 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -815,12 +815,12 @@ static void tcp_update_pacing_rate(struct sock *sk) if (likely(tp->srtt_us)) do_div(rate, tp->srtt_us); - /* ACCESS_ONCE() is needed because sch_fq fetches sk_pacing_rate + /* WRITE_ONCE() is needed because sch_fq fetches sk_pacing_rate * without any lock. We want to make sure compiler wont store * intermediate values in this location. */ - ACCESS_ONCE(sk->sk_pacing_rate) = min_t(u64, rate, - sk->sk_max_pacing_rate); + WRITE_ONCE(sk->sk_pacing_rate) = min_t(u64, rate, + sk->sk_max_pacing_rate); } /* Calculate rto without backoff. This is the second half of Van Jacobson's
For several reasons, it is desirable to use {READ,WRITE}_ONCE() in preference to ACCESS_ONCE(), and new code is expected to use one of the former. So far, there's been no reason to change most existing uses of ACCESS_ONCE(), as these aren't currently harmful. However, for some features it is necessary to instrument reads and writes separately, which is not possible with ACCESS_ONCE(). This distinction is critical to correct operation. It's possible to transform the bulk of kernel code using the Coccinelle script below. However, this doesn't handle comments, leaving references to ACCESS_ONCE() instances which have been removed. As a preparatory step, this patch converts the IPv4 TCP input code and comments to use {READ,WRITE}_ONCE() consistently. ---- virtual patch @ depends on patch @ expression E1, E2; @@ - ACCESS_ONCE(E1) = E2 + WRITE_ONCE(E1, E2) @ depends on patch @ expression E; @@ - ACCESS_ONCE(E) + READ_ONCE(E) ---- Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: David S. Miller <davem@davemloft.net> --- net/ipv4/tcp_input.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- 1.9.1