Changeset 30681


Ignore:
Timestamp:
2012-02-22T14:06:44+01:00 (6 years ago)
Author:
juhosg
Message:

ramips: raeth: show interrupt statistics in debugfs

Location:
trunk/target/linux/ramips/files/drivers/net/ethernet/ramips
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_debugfs.c

    r30680 r30681  
    1010 
    1111#include <linux/debugfs.h> 
     12#include <linux/module.h> 
    1213#include <linux/phy.h> 
    1314 
     
    1516 
    1617static struct dentry *raeth_debugfs_root; 
     18 
     19static int raeth_debugfs_generic_open(struct inode *inode, struct file *file) 
     20{ 
     21        file->private_data = inode->i_private; 
     22        return 0; 
     23} 
     24 
     25void raeth_debugfs_update_int_stats(struct raeth_priv *re, u32 status) 
     26{ 
     27        re->debug.int_stats.total += !!status; 
     28 
     29        re->debug.int_stats.rx_delayed += !!(status & RAMIPS_RX_DLY_INT); 
     30        re->debug.int_stats.rx_done0 += !!(status & RAMIPS_RX_DONE_INT0); 
     31        re->debug.int_stats.rx_coherent += !!(status & RAMIPS_RX_COHERENT); 
     32 
     33        re->debug.int_stats.tx_delayed += !!(status & RAMIPS_TX_DLY_INT); 
     34        re->debug.int_stats.tx_done0 += !!(status & RAMIPS_TX_DONE_INT0); 
     35        re->debug.int_stats.tx_done1 += !!(status & RAMIPS_TX_DONE_INT1); 
     36        re->debug.int_stats.tx_done2 += !!(status & RAMIPS_TX_DONE_INT2); 
     37        re->debug.int_stats.tx_done3 += !!(status & RAMIPS_TX_DONE_INT3); 
     38        re->debug.int_stats.tx_coherent += !!(status & RAMIPS_TX_COHERENT); 
     39 
     40        re->debug.int_stats.pse_fq_empty += !!(status & RAMIPS_PSE_FQ_EMPTY); 
     41        re->debug.int_stats.pse_p0_fc += !!(status & RAMIPS_PSE_P0_FC); 
     42        re->debug.int_stats.pse_p1_fc += !!(status & RAMIPS_PSE_P1_FC); 
     43        re->debug.int_stats.pse_p2_fc += !!(status & RAMIPS_PSE_P2_FC); 
     44        re->debug.int_stats.pse_buf_drop += !!(status & RAMIPS_PSE_BUF_DROP); 
     45} 
     46 
     47static ssize_t read_file_int_stats(struct file *file, char __user *user_buf, 
     48                                   size_t count, loff_t *ppos) 
     49{ 
     50#define PR_INT_STAT(_label, _field)                                     \ 
     51        len += snprintf(buf + len, sizeof(buf) - len,                   \ 
     52                "%-18s: %10lu\n", _label, re->debug.int_stats._field); 
     53 
     54        struct raeth_priv *re = file->private_data; 
     55        char buf[512]; 
     56        unsigned int len = 0; 
     57        unsigned long flags; 
     58 
     59        spin_lock_irqsave(&re->page_lock, flags); 
     60 
     61        PR_INT_STAT("RX Delayed", rx_delayed); 
     62        PR_INT_STAT("RX Done 0", rx_done0); 
     63        PR_INT_STAT("RX Coherent", rx_coherent); 
     64 
     65        PR_INT_STAT("TX Delayed", tx_delayed); 
     66        PR_INT_STAT("TX Done 0", tx_done0); 
     67        PR_INT_STAT("TX Done 1", tx_done1); 
     68        PR_INT_STAT("TX Done 2", tx_done2); 
     69        PR_INT_STAT("TX Done 3", tx_done3); 
     70        PR_INT_STAT("TX Coherent", tx_coherent); 
     71 
     72        PR_INT_STAT("PSE FQ empty", pse_fq_empty); 
     73        PR_INT_STAT("CDMA Flow control", pse_p0_fc); 
     74        PR_INT_STAT("GDMA1 Flow control", pse_p1_fc); 
     75        PR_INT_STAT("GDMA2 Flow control", pse_p2_fc); 
     76        PR_INT_STAT("PSE discard", pse_buf_drop); 
     77 
     78        len += snprintf(buf + len, sizeof(buf) - len, "\n"); 
     79        PR_INT_STAT("Total", total); 
     80 
     81        spin_unlock_irqrestore(&re->page_lock, flags); 
     82 
     83        return simple_read_from_buffer(user_buf, count, ppos, buf, len); 
     84#undef PR_INT_STAT 
     85} 
     86 
     87static const struct file_operations raeth_fops_int_stats = { 
     88        .open   = raeth_debugfs_generic_open, 
     89        .read   = read_file_int_stats, 
     90        .owner  = THIS_MODULE 
     91}; 
    1792 
    1893void raeth_debugfs_exit(struct raeth_priv *re) 
     
    27102        if (!re->debug.debugfs_dir) 
    28103                return -ENOMEM; 
     104 
     105        debugfs_create_file("int_stats", S_IRUGO, re->debug.debugfs_dir, 
     106                            re, &raeth_fops_int_stats); 
    29107 
    30108        return 0; 
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h

    r30680 r30681  
    214214} __packed __aligned(4); 
    215215 
     216struct raeth_int_stats { 
     217        unsigned long           rx_delayed; 
     218        unsigned long           tx_delayed; 
     219        unsigned long           rx_done0; 
     220        unsigned long           tx_done0; 
     221        unsigned long           tx_done1; 
     222        unsigned long           tx_done2; 
     223        unsigned long           tx_done3; 
     224        unsigned long           rx_coherent; 
     225        unsigned long           tx_coherent; 
     226 
     227        unsigned long           pse_fq_empty; 
     228        unsigned long           pse_p0_fc; 
     229        unsigned long           pse_p1_fc; 
     230        unsigned long           pse_p2_fc; 
     231        unsigned long           pse_buf_drop; 
     232 
     233        unsigned long           total; 
     234}; 
     235 
    216236struct raeth_debug { 
    217237        struct dentry           *debugfs_dir; 
     238 
     239        struct raeth_int_stats  int_stats; 
    218240}; 
    219241 
     
    259281int raeth_debugfs_init(struct raeth_priv *re); 
    260282void raeth_debugfs_exit(struct raeth_priv *re); 
     283void raeth_debugfs_update_int_stats(struct raeth_priv *re, u32 status); 
    261284#else 
    262285static inline int raeth_debugfs_root_init(void) { return 0; } 
     
    264287static inline int raeth_debugfs_init(struct raeth_priv *re) { return 0; } 
    265288static inline void raeth_debugfs_exit(struct raeth_priv *re) {} 
     289static inline void raeth_debugfs_update_int_stats(struct raeth_priv *re, 
     290                                                  u32 status) {} 
    266291#endif /* CONFIG_NET_RAMIPS_DEBUG_FS */ 
    267292 
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c

    r30680 r30681  
    770770        } 
    771771 
     772        raeth_debugfs_update_int_stats(re, fe_int); 
     773 
    772774        return IRQ_HANDLED; 
    773775} 
Note: See TracChangeset for help on using the changeset viewer.