diff options
| author | Dustin Brown <dustinb@codeaurora.org> | 2017-08-11 16:22:45 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-08-30 00:41:19 -0700 |
| commit | 5a3c5face319b05d2826a2032b759b0b85d8eb56 (patch) | |
| tree | 5ca27ba281bb86e96af7eedc00ec0ff40b03ad62 | |
| parent | ab67087fbdbaedaa60614580da68bb1b52e7267c (diff) | |
qcacmn: Use refcount APIs for sk_buff.users with 4.13+ kernels
The 4.13 Linux kernel changed the sk_buff.users type to refcount_t from
atomic_t. Add conditional compilation based on kernel version to use
appropriate refcount APIs for kernels 4.13+.
Change-Id: I6918b4f45ffa247c74e54d8653a80821ceab1a86
CRs-Fixed: 2092031
| -rw-r--r-- | qdf/inc/qdf_nbuf.h | 3 | ||||
| -rw-r--r-- | qdf/linux/src/i_qdf_nbuf.h | 14 | ||||
| -rw-r--r-- | qdf/linux/src/qdf_nbuf.c | 4 |
3 files changed, 16 insertions, 5 deletions
diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index d697f33676fc..f6d093c93ee7 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -843,10 +843,9 @@ static inline qdf_nbuf_t qdf_nbuf_copy(qdf_nbuf_t buf) * Return: data pointer of this buf where new data has to be * put, or NULL if there is not enough room in this buf. */ - static inline void qdf_nbuf_init_fast(qdf_nbuf_t nbuf) { - atomic_set(&nbuf->users, 1); + qdf_nbuf_users_set(&nbuf->users, 1); nbuf->data = nbuf->head + NET_SKB_PAD; skb_reset_tail_pointer(nbuf); } diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 52b72986f622..12974c3999d8 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -522,6 +522,18 @@ enum qdf_proto_subtype __qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data); uint8_t __qdf_nbuf_data_get_ipv4_proto(uint8_t *data); uint8_t __qdf_nbuf_data_get_ipv6_proto(uint8_t *data); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) +#define qdf_nbuf_users_inc atomic_inc +#define qdf_nbuf_users_dec atomic_dec +#define qdf_nbuf_users_set atomic_set +#define qdf_nbuf_users_read atomic_read +#else +#define qdf_nbuf_users_inc refcount_inc +#define qdf_nbuf_users_dec refcount_dec +#define qdf_nbuf_users_set refcount_set +#define qdf_nbuf_users_read refcount_read +#endif /* KERNEL_VERSION(4, 13, 0) */ + /** * __qdf_to_status() - OS to QDF status conversion * @error : OS error @@ -1489,7 +1501,7 @@ static inline size_t __qdf_nbuf_tcp_tso_size(struct sk_buff *skb) */ static inline void __qdf_nbuf_init(__qdf_nbuf_t nbuf) { - atomic_set(&nbuf->users, 1); + qdf_nbuf_users_set(&nbuf->users, 1); nbuf->data = nbuf->head + NET_SKB_PAD; skb_reset_tail_pointer(nbuf); } diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index b751c206a1cb..73d3681e7984 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -2198,14 +2198,14 @@ qdf_export_symbol(__qdf_nbuf_get_tso_num_seg); struct sk_buff *__qdf_nbuf_inc_users(struct sk_buff *skb) { - atomic_inc(&skb->users); + qdf_nbuf_users_inc(&skb->users); return skb; } qdf_export_symbol(__qdf_nbuf_inc_users); int __qdf_nbuf_get_users(struct sk_buff *skb) { - return atomic_read(&skb->users); + return qdf_nbuf_users_read(&skb->users); } qdf_export_symbol(__qdf_nbuf_get_users); |
