diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 3db5e728203a..e3e81d8d164d 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -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) diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index ad47e3277bcd..fd21a7440de0 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -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 diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 70f12b7ff907..efb27bbd1d8c 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -51,6 +51,18 @@ #include #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 */ +