#ifdef IEEE80211_DEBUG
#define ieee80211_msg_is_reported(_vap, m) \
- (!!(((_vap)->iv_debug) & (m)))
+ (!!(((_vap)->iv_debug | (_vap)->iv_ic->ic_debug) & (m)))
#define IEEE80211_DPRINTF(_vap, _m, _fmt, ...) do { \
if (ieee80211_msg_is_reported(_vap, _m)) \
ieee80211_note(_vap, _fmt, __VA_ARGS__); \
{
struct ieee80211vap *vap, *next;
struct ath_desc *ds = bf->bf_desc;
- int noise = 0, antenna = 0, ieeerate = 0;
+ int noise = 0;
+ int antenna = 0;
+ int ieeerate = 0;
u_int32_t rssi = 0;
u_int8_t pkttype = 0;
unsigned int mon_hdrspace = A_MAX(sizeof(struct ath_tx_radiotap_header),
need_tailroom += cip->ic_miclen;
}
+ if (skb_shared(skb)) {
+ /* Take our own reference to the node in the clone */
+ ieee80211_ref_node(SKB_CB(skb)->ni);
+ /* Unshare the node, decrementing users in the old skb */
+ skb = skb_unshare(skb, GFP_ATOMIC);
+ }
+
#ifdef ATH_SUPERG_FF
if (isff) {
if (skb == NULL) {
if (ieee80211_msg_dumppkts(vap))
ieee80211_dump_pkt(ni->ni_ic, skb->data, skb->len, -1, -1);
#endif
- ieee80211_unref_node(&SKB_CB(skb)->ni);
+ if (SKB_CB(skb)->ni != NULL)
+ ieee80211_unref_node(&SKB_CB(skb)->ni);
+ ieee80211_dev_kfree_skb(&skb);
return NETDEV_TX_BUSY;
}