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
This commit is contained in:
Dustin Brown 2017-08-11 16:22:45 -07:00 • committed by pramod kotreshappa
commit 24c31020a2
3 changed files with 35 additions and 15 deletions

View file

@ -919,13 +919,7 @@ 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);
nbuf->data = nbuf->head + NET_SKB_PAD;
skb_reset_tail_pointer(nbuf);
}
void qdf_nbuf_init_fast(qdf_nbuf_t nbuf);
#endif /* WLAN_FEATURE_FASTPATH */
static inline void qdf_nbuf_tx_free(qdf_nbuf_t buf_list, int tx_err)

View file

@ -1653,12 +1653,7 @@ static inline size_t __qdf_nbuf_tcp_tso_size(struct sk_buff *skb)
*
* Return: none
*/
static inline void __qdf_nbuf_init(__qdf_nbuf_t nbuf)
{
atomic_set(&nbuf->users, 1);
nbuf->data = nbuf->head + NET_SKB_PAD;
skb_reset_tail_pointer(nbuf);
}
void __qdf_nbuf_init(__qdf_nbuf_t nbuf);
/**
* __qdf_nbuf_set_rx_info() - set rx info

View file

@ -51,6 +51,18 @@
#include <linux/ip.h>
#endif /* FEATURE_TSO */
#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) */
/* Packet Counter */
static uint32_t nbuf_tx_mgmt[QDF_NBUF_TX_PKT_STATE_MAX];
static uint32_t nbuf_tx_data[QDF_NBUF_TX_PKT_STATE_MAX];
@ -2196,14 +2208,14 @@ 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;
}
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);
}
EXPORT_SYMBOL(__qdf_nbuf_get_users);
@ -2923,3 +2935,22 @@ void qdf_nbuf_classify_pkt(struct sk_buff *skb)
QDF_NBUF_CB_PACKET_TYPE_WAPI;
}
EXPORT_SYMBOL(qdf_nbuf_classify_pkt);
void __qdf_nbuf_init(__qdf_nbuf_t nbuf)
{
qdf_nbuf_users_set(&nbuf->users, 1);
nbuf->data = nbuf->head + NET_SKB_PAD;
skb_reset_tail_pointer(nbuf);
}
EXPORT_SYMBOL(__qdf_nbuf_init);
#ifdef WLAN_FEATURE_FASTPATH
void qdf_nbuf_init_fast(qdf_nbuf_t nbuf)
{
qdf_nbuf_users_set(&nbuf->users, 1);
nbuf->data = nbuf->head + NET_SKB_PAD;
skb_reset_tail_pointer(nbuf);
}
EXPORT_SYMBOL(qdf_nbuf_init_fast);
#endif /* WLAN_FEATURE_FASTPATH */