diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/hid.h | 3 | ||||
| -rw-r--r-- | include/net/sock.h | 10 |
2 files changed, 8 insertions, 5 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h index 731aedc37ac3..b5fc9c849199 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -1122,8 +1122,7 @@ static inline void hid_hw_wait(struct hid_device *hdev) */ static inline u32 hid_report_len(struct hid_report *report) { - /* equivalent to DIV_ROUND_UP(report->size, 8) + !!(report->id > 0) */ - return ((report->size - 1) >> 3) + 1 + (report->id > 0); + return DIV_ROUND_UP(report->size, 8) + (report->id > 0); } int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size, diff --git a/include/net/sock.h b/include/net/sock.h index a1e0077f7950..dc64c194a108 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1736,7 +1736,8 @@ static inline u32 net_tx_rndhash(void) static inline void sk_set_txhash(struct sock *sk) { - sk->sk_txhash = net_tx_rndhash(); + /* This pairs with READ_ONCE() in skb_set_hash_from_sk() */ + WRITE_ONCE(sk->sk_txhash, net_tx_rndhash()); } static inline void sk_rethink_txhash(struct sock *sk) @@ -1988,9 +1989,12 @@ static inline void sock_poll_wait(struct file *filp, static inline void skb_set_hash_from_sk(struct sk_buff *skb, struct sock *sk) { - if (sk->sk_txhash) { + /* This pairs with WRITE_ONCE() in sk_set_txhash() */ + u32 txhash = READ_ONCE(sk->sk_txhash); + + if (txhash) { skb->l4_hash = 1; - skb->hash = sk->sk_txhash; + skb->hash = txhash; } } |
