* [PATCH 1/3] mac-hwsim: don't leak memory on tx failure.
@ 2014-09-25 21:22 greearb
2014-09-25 21:22 ` [PATCH 2/3] mac-hwsim: add ethtool stats support greearb
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: greearb @ 2014-09-25 21:22 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
From: Ben Greear <greearb@candelatech.com>
It seems previous code did not properly clean up memory
if the packet could not be delivered to user-space.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
I don't have a good way to test this, but hopefully
it is correct.
drivers/net/wireless/mac80211_hwsim.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index babbdc1..a74227d 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -862,7 +862,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
if (skb_queue_len(&data->pending) >= MAX_QUEUE) {
/* Droping until WARN_QUEUE level */
while (skb_queue_len(&data->pending) >= WARN_QUEUE)
- skb_dequeue(&data->pending);
+ ieee80211_free_txskb(hw, skb_dequeue(&data->pending));
}
skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
@@ -921,6 +921,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
nla_put_failure:
printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
+ ieee80211_free_txskb(hw, my_skb);
}
static bool hwsim_chans_compat(struct ieee80211_channel *c1,
--
1.7.11.7
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] mac-hwsim: add ethtool stats support.
2014-09-25 21:22 [PATCH 1/3] mac-hwsim: don't leak memory on tx failure greearb
@ 2014-09-25 21:22 ` greearb
2014-10-07 8:46 ` Johannes Berg
2014-09-25 21:22 ` [PATCH 3/3] mac-hwsim: fix typo, remove un-needed goto greearb
2014-10-07 8:46 ` [PATCH 1/3] mac-hwsim: don't leak memory on tx failure Johannes Berg
2 siblings, 1 reply; 7+ messages in thread
From: greearb @ 2014-09-25 21:22 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
From: Ben Greear <greearb@candelatech.com>
This gives a view into packet activity at the virtual radio
level.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
drivers/net/wireless/mac80211_hwsim.c | 75 ++++++++++++++++++++++++++++++++++-
1 file changed, 74 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index a74227d..ae90438 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -447,6 +447,14 @@ struct mac80211_hwsim_data {
s64 bcn_delta;
/* absolute beacon transmission time. Used to cover up "tx" delay. */
u64 abs_bcn_ts;
+
+ /* Stats */
+ u64 tx_pkts;
+ u64 rx_pkts;
+ u64 tx_bytes;
+ u64 rx_bytes;
+ u64 tx_dropped;
+ u64 tx_failed;
};
@@ -861,8 +869,10 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
/* If the queue contains MAX_QUEUE skb's drop some */
if (skb_queue_len(&data->pending) >= MAX_QUEUE) {
/* Droping until WARN_QUEUE level */
- while (skb_queue_len(&data->pending) >= WARN_QUEUE)
+ while (skb_queue_len(&data->pending) >= WARN_QUEUE) {
ieee80211_free_txskb(hw, skb_dequeue(&data->pending));
+ data->tx_dropped++;
+ }
}
skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
@@ -917,11 +927,14 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
/* Enqueue the packet */
skb_queue_tail(&data->pending, my_skb);
+ data->tx_pkts++;
+ data->tx_bytes += my_skb->len;
return;
nla_put_failure:
printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
ieee80211_free_txskb(hw, my_skb);
+ data->tx_failed++;
}
static bool hwsim_chans_compat(struct ieee80211_channel *c1,
@@ -1067,6 +1080,8 @@ static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
rx_status.mactime = now + data2->tsf_offset;
memcpy(IEEE80211_SKB_RXCB(nskb), &rx_status, sizeof(rx_status));
+ data2->rx_pkts++;
+ data2->rx_bytes += nskb->len;
ieee80211_rx_irqsafe(data2->hw, nskb);
}
spin_unlock(&hwsim_radio_lock);
@@ -1134,6 +1149,8 @@ static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
return mac80211_hwsim_tx_frame_nl(hw, skb, _portid);
/* NO wmediumd detected, perfect medium simulation */
+ data->tx_pkts++;
+ data->tx_bytes += skb->len;
ack = mac80211_hwsim_tx_frame_no_nl(hw, skb, channel);
if (ack && skb->len >= 16) {
@@ -1917,6 +1934,57 @@ static void mac80211_hwsim_unassign_vif_chanctx(struct ieee80211_hw *hw,
hwsim_check_chanctx_magic(ctx);
}
+static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
+ "tx_pkts_nic",
+ "tx_bytes_nic",
+ "rx_pkts_nic",
+ "rx_bytes_nic",
+ "d_tx_dropped",
+ "d_tx_failed",
+ "d_ps_mode",
+ "d_group",
+ "d_tx_power",
+};
+
+#define MAC80211_HWSIM_SSTATS_LEN ARRAY_SIZE(mac80211_hwsim_gstrings_stats)
+
+void mac80211_hwsim_get_et_strings(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif,
+ u32 sset, u8 *data)
+{
+ if (sset == ETH_SS_STATS)
+ memcpy(data, *mac80211_hwsim_gstrings_stats,
+ sizeof(mac80211_hwsim_gstrings_stats));
+}
+
+int mac80211_hwsim_get_et_sset_count(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif, int sset)
+{
+ if (sset == ETH_SS_STATS)
+ return MAC80211_HWSIM_SSTATS_LEN;
+ return 0;
+}
+
+void mac80211_hwsim_get_et_stats(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif,
+ struct ethtool_stats *stats, u64 *data)
+{
+ struct mac80211_hwsim_data *ar = hw->priv;
+ int i = 0;
+
+ data[i++] = ar->tx_pkts;
+ data[i++] = ar->tx_bytes;
+ data[i++] = ar->rx_pkts;
+ data[i++] = ar->rx_bytes;
+ data[i++] = ar->tx_dropped;
+ data[i++] = ar->tx_failed;
+ data[i++] = ar->ps;
+ data[i++] = ar->group;
+ data[i++] = ar->power_level;
+
+ WARN_ON(i != MAC80211_HWSIM_SSTATS_LEN);
+}
+
static const struct ieee80211_ops mac80211_hwsim_ops = {
.tx = mac80211_hwsim_tx,
.start = mac80211_hwsim_start,
@@ -1940,6 +2008,9 @@ static const struct ieee80211_ops mac80211_hwsim_ops = {
.flush = mac80211_hwsim_flush,
.get_tsf = mac80211_hwsim_get_tsf,
.set_tsf = mac80211_hwsim_set_tsf,
+ .get_et_sset_count = mac80211_hwsim_get_et_sset_count,
+ .get_et_stats = mac80211_hwsim_get_et_stats,
+ .get_et_strings = mac80211_hwsim_get_et_strings,
};
static struct ieee80211_ops mac80211_hwsim_mchan_ops;
@@ -2387,6 +2458,8 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
+ data2->rx_pkts++;
+ data2->rx_bytes += skb->len;
ieee80211_rx_irqsafe(data2->hw, skb);
return 0;
--
1.7.11.7
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] mac-hwsim: fix typo, remove un-needed goto.
2014-09-25 21:22 [PATCH 1/3] mac-hwsim: don't leak memory on tx failure greearb
2014-09-25 21:22 ` [PATCH 2/3] mac-hwsim: add ethtool stats support greearb
@ 2014-09-25 21:22 ` greearb
2014-10-07 8:46 ` [PATCH 1/3] mac-hwsim: don't leak memory on tx failure Johannes Berg
2 siblings, 0 replies; 7+ messages in thread
From: greearb @ 2014-09-25 21:22 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
From: Ben Greear <greearb@candelatech.com>
Trivial cleanups.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
drivers/net/wireless/mac80211_hwsim.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index ae90438..43435c0 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -436,7 +436,7 @@ struct mac80211_hwsim_data {
/*
* Only radios in the same group can communicate together (the
* channel has to match too). Each bit represents a group. A
- * radio can be in more then one group.
+ * radio can be in more than one group.
*/
u64 group;
@@ -2465,7 +2465,6 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
return 0;
err:
printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
- goto out;
out:
dev_kfree_skb(skb);
return -EINVAL;
--
1.7.11.7
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] mac-hwsim: add ethtool stats support.
2014-09-25 21:22 ` [PATCH 2/3] mac-hwsim: add ethtool stats support greearb
@ 2014-10-07 8:46 ` Johannes Berg
2014-10-07 13:48 ` Ben Greear
0 siblings, 1 reply; 7+ messages in thread
From: Johannes Berg @ 2014-10-07 8:46 UTC (permalink / raw)
To: greearb; +Cc: linux-wireless
On Thu, 2014-09-25 at 14:22 -0700, greearb@candelatech.com wrote:
> +static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
> + "tx_pkts_nic",
> + "tx_bytes_nic",
> + "rx_pkts_nic",
> + "rx_bytes_nic",
> + "d_tx_dropped",
> + "d_tx_failed",
> + "d_ps_mode",
> + "d_group",
> + "d_tx_power",
What's that d_ prefix?
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] mac-hwsim: don't leak memory on tx failure.
2014-09-25 21:22 [PATCH 1/3] mac-hwsim: don't leak memory on tx failure greearb
2014-09-25 21:22 ` [PATCH 2/3] mac-hwsim: add ethtool stats support greearb
2014-09-25 21:22 ` [PATCH 3/3] mac-hwsim: fix typo, remove un-needed goto greearb
@ 2014-10-07 8:46 ` Johannes Berg
2 siblings, 0 replies; 7+ messages in thread
From: Johannes Berg @ 2014-10-07 8:46 UTC (permalink / raw)
To: greearb; +Cc: linux-wireless
On Thu, 2014-09-25 at 14:22 -0700, greearb@candelatech.com wrote:
> From: Ben Greear <greearb@candelatech.com>
>
> It seems previous code did not properly clean up memory
> if the packet could not be delivered to user-space.
Applied, also patch #3.
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] mac-hwsim: add ethtool stats support.
2014-10-07 8:46 ` Johannes Berg
@ 2014-10-07 13:48 ` Ben Greear
2014-10-09 9:44 ` Johannes Berg
0 siblings, 1 reply; 7+ messages in thread
From: Ben Greear @ 2014-10-07 13:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
On 10/07/2014 01:46 AM, Johannes Berg wrote:
> On Thu, 2014-09-25 at 14:22 -0700, greearb@candelatech.com wrote:
>
>> +static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
>> + "tx_pkts_nic",
>> + "tx_bytes_nic",
>> + "rx_pkts_nic",
>> + "rx_bytes_nic",
>> + "d_tx_dropped",
>> + "d_tx_failed",
>> + "d_ps_mode",
>> + "d_group",
>> + "d_tx_power",
>
> What's that d_ prefix?
Stats from the driver v/s from the mac80211 stack. Basically, it
mimics how I did ath9k, ath9k_htc, and ath10k stats (though
not sure ath10k made it upstream yet).
The first 4 match those wifi drivers as well as some Intel wired
NICs.
It doesn't matter a huge amount if you want to change the names,
but it makes user-space stats reporting easier if you would leave
them the same...
Thanks,
Ben
>
> johannes
>
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] mac-hwsim: add ethtool stats support.
2014-10-07 13:48 ` Ben Greear
@ 2014-10-09 9:44 ` Johannes Berg
0 siblings, 0 replies; 7+ messages in thread
From: Johannes Berg @ 2014-10-09 9:44 UTC (permalink / raw)
To: Ben Greear; +Cc: linux-wireless
On Tue, 2014-10-07 at 06:48 -0700, Ben Greear wrote:
> On 10/07/2014 01:46 AM, Johannes Berg wrote:
> > On Thu, 2014-09-25 at 14:22 -0700, greearb@candelatech.com wrote:
> >
> >> +static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
> >> + "tx_pkts_nic",
> >> + "tx_bytes_nic",
> >> + "rx_pkts_nic",
> >> + "rx_bytes_nic",
> >> + "d_tx_dropped",
> >> + "d_tx_failed",
> >> + "d_ps_mode",
> >> + "d_group",
> >> + "d_tx_power",
> >
> > What's that d_ prefix?
>
> Stats from the driver v/s from the mac80211 stack. Basically, it
> mimics how I did ath9k, ath9k_htc, and ath10k stats (though
> not sure ath10k made it upstream yet).
>
> The first 4 match those wifi drivers as well as some Intel wired
> NICs.
>
> It doesn't matter a huge amount if you want to change the names,
> but it makes user-space stats reporting easier if you would leave
> them the same...
Ok, no problem. Can you resend though with the prefixes etc?
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-10-09 9:44 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-25 21:22 [PATCH 1/3] mac-hwsim: don't leak memory on tx failure greearb
2014-09-25 21:22 ` [PATCH 2/3] mac-hwsim: add ethtool stats support greearb
2014-10-07 8:46 ` Johannes Berg
2014-10-07 13:48 ` Ben Greear
2014-10-09 9:44 ` Johannes Berg
2014-09-25 21:22 ` [PATCH 3/3] mac-hwsim: fix typo, remove un-needed goto greearb
2014-10-07 8:46 ` [PATCH 1/3] mac-hwsim: don't leak memory on tx failure Johannes Berg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).