| From 61849a6baaaeba776d5f03b8dfb521a8ad9046b4 Mon Sep 17 00:00:00 2001 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Wed, 12 Jun 2019 09:52:28 -0700 |
| Subject: [PATCH] net/packet: constify prb_lookup_block() and |
| __tpacket_v3_has_room() |
| |
| commit dcf70cefaf99a40cfa25face160f29c1cf3bf84d upstream. |
| |
| Goal is to be able to use __tpacket_v3_has_room() without holding |
| a lock. |
| |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c |
| index a5736ff350d4..8185514e0b58 100644 |
| --- a/net/packet/af_packet.c |
| +++ b/net/packet/af_packet.c |
| @@ -1084,10 +1084,10 @@ static void *packet_current_rx_frame(struct packet_sock *po, |
| } |
| } |
| |
| -static void *prb_lookup_block(struct packet_sock *po, |
| - struct packet_ring_buffer *rb, |
| - unsigned int idx, |
| - int status) |
| +static void *prb_lookup_block(const struct packet_sock *po, |
| + const struct packet_ring_buffer *rb, |
| + unsigned int idx, |
| + int status) |
| { |
| struct tpacket_kbdq_core *pkc = GET_PBDQC_FROM_RB(rb); |
| struct tpacket_block_desc *pbd = GET_PBLOCK_DESC(pkc, idx); |
| @@ -1213,12 +1213,12 @@ static bool __tpacket_has_room(const struct packet_sock *po, int pow_off) |
| return packet_lookup_frame(po, &po->rx_ring, idx, TP_STATUS_KERNEL); |
| } |
| |
| -static bool __tpacket_v3_has_room(struct packet_sock *po, int pow_off) |
| +static bool __tpacket_v3_has_room(const struct packet_sock *po, int pow_off) |
| { |
| int idx, len; |
| |
| - len = po->rx_ring.prb_bdqc.knum_blocks; |
| - idx = po->rx_ring.prb_bdqc.kactive_blk_num; |
| + len = READ_ONCE(po->rx_ring.prb_bdqc.knum_blocks); |
| + idx = READ_ONCE(po->rx_ring.prb_bdqc.kactive_blk_num); |
| if (pow_off) |
| idx += len >> pow_off; |
| if (idx >= len) |
| -- |
| 2.27.0 |
| |