summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDustin Brown <dustinb@codeaurora.org>2017-08-11 16:22:45 -0700
committersnandini <snandini@codeaurora.org>2017-08-30 00:41:19 -0700
commit5a3c5face319b05d2826a2032b759b0b85d8eb56 (patch)
tree5ca27ba281bb86e96af7eedc00ec0ff40b03ad62
parentab67087fbdbaedaa60614580da68bb1b52e7267c (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.h3
-rw-r--r--qdf/linux/src/i_qdf_nbuf.h14
-rw-r--r--qdf/linux/src/qdf_nbuf.c4
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);