]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mt76x2: debugfs: add sw pulse statistics to dfs debugfs
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Fri, 29 Jun 2018 11:40:55 +0000 (13:40 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 4 Jul 2018 15:16:01 +0000 (18:16 +0300)
Add sw pattern detector statistics to mt76x2 debugfs.
Moreover track down number of allocated sequence by the detector

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mediatek/mt76/mt76x2_debugfs.c
drivers/net/wireless/mediatek/mt76/mt76x2_dfs.c
drivers/net/wireless/mediatek/mt76/mt76x2_dfs.h

index 3f86e01049f3e47b275780bc270b41a08b69663b..74725902e6dc7587f530ca6d75ceb86b170c8dbb 100644 (file)
@@ -91,12 +91,20 @@ mt76x2_dfs_stat_read(struct seq_file *file, void *data)
        struct mt76x2_dev *dev = file->private;
        struct mt76x2_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
 
+       seq_printf(file, "allocated sequences:\t%d\n",
+                  dfs_pd->seq_stats.seq_pool_len);
+       seq_printf(file, "used sequences:\t\t%d\n",
+                  dfs_pd->seq_stats.seq_len);
+       seq_puts(file, "\n");
+
        for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
                seq_printf(file, "engine: %d\n", i);
                seq_printf(file, "  hw pattern detected:\t%d\n",
                           dfs_pd->stats[i].hw_pattern);
                seq_printf(file, "  hw pulse discarded:\t%d\n",
                           dfs_pd->stats[i].hw_pulse_discarded);
+               seq_printf(file, "  sw pattern detected:\t%d\n",
+                          dfs_pd->stats[i].sw_pattern);
        }
 
        return 0;
index 38c1d5dc47ecde5629c7cb056cfa5283d58d30d2..374cc655c11d7a8e246ea0839c0c4db5459503fe 100644 (file)
@@ -165,6 +165,9 @@ static void mt76x2_dfs_seq_pool_put(struct mt76x2_dev *dev,
        struct mt76x2_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
 
        list_add(&seq->head, &dfs_pd->seq_pool);
+
+       dfs_pd->seq_stats.seq_pool_len++;
+       dfs_pd->seq_stats.seq_len--;
 }
 
 static
@@ -180,7 +183,11 @@ struct mt76x2_dfs_sequence *mt76x2_dfs_seq_pool_get(struct mt76x2_dev *dev)
                                       struct mt76x2_dfs_sequence,
                                       head);
                list_del(&seq->head);
+               dfs_pd->seq_stats.seq_pool_len--;
        }
+       if (seq)
+               dfs_pd->seq_stats.seq_len++;
+
        return seq;
 }
 
@@ -555,8 +562,10 @@ static bool mt76x2_dfs_check_detection(struct mt76x2_dev *dev)
                return false;
 
        list_for_each_entry(seq, &dfs_pd->sequences, head) {
-               if (seq->count > MT_DFS_SEQUENCE_TH)
+               if (seq->count > MT_DFS_SEQUENCE_TH) {
+                       dfs_pd->stats[seq->engine].sw_pattern++;
                        return true;
+               }
        }
        return false;
 }
index 83d2ff0b7e1f9d56246b69155c2caa689ba0b71a..693f421bf096f797aa09b8f7e95d4c4f1cb817da 100644 (file)
@@ -109,6 +109,12 @@ struct mt76x2_dfs_sw_detector_params {
 struct mt76x2_dfs_engine_stats {
        u32 hw_pattern;
        u32 hw_pulse_discarded;
+       u32 sw_pattern;
+};
+
+struct mt76x2_dfs_seq_stats {
+       u32 seq_pool_len;
+       u32 seq_len;
 };
 
 struct mt76x2_dfs_pattern_detector {
@@ -122,6 +128,7 @@ struct mt76x2_dfs_pattern_detector {
 
        struct list_head sequences;
        struct list_head seq_pool;
+       struct mt76x2_dfs_seq_stats seq_stats;
 
        unsigned long last_sw_check;
        u32 last_event_ts;