Messages in this thread Patch in this message | | | From | humbabek <> | Subject | [PATCH] move smp_rmb() after load of status | Date | Sat, 7 Jul 2018 21:23:17 +0200 |
| |
Signed-off-by: humbabek <humbabek@gmail.com> --- net/packet/af_packet.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 57634bc3da74..91830ef07c48 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -394,25 +394,30 @@ static void __packet_set_status(struct packet_sock *po, void *frame, int status) static int __packet_get_status(struct packet_sock *po, void *frame) { union tpacket_uhdr h; - - smp_rmb(); + int status; h.raw = frame; switch (po->tp_version) { case TPACKET_V1: flush_dcache_page(pgv_to_page(&h.h1->tp_status)); - return h.h1->tp_status; + status = h.h1->tp_status; + break; case TPACKET_V2: flush_dcache_page(pgv_to_page(&h.h2->tp_status)); - return h.h2->tp_status; + status = h.h2->tp_status; + break; case TPACKET_V3: flush_dcache_page(pgv_to_page(&h.h3->tp_status)); - return h.h3->tp_status; + status = h.h3->tp_status; + break; default: WARN(1, "TPACKET version not supported.\n"); BUG(); - return 0; + status = 0; + break; } + smp_rmb(); + return status; } static __u32 tpacket_get_timestamp(struct sk_buff *skb, struct timespec *ts, -- 2.17.1
| |