nfp: make sure debug accesses don't depend on netdevs
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 6 Jun 2017 00:01:47 +0000 (17:01 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Jun 2017 16:51:39 +0000 (12:51 -0400)
We want to be able to inspect the state of descriptor rings of
the control vNIC, so it will use the same interface as data vNICs.

Make sure the code doesn't use netdevs to determine state
of the rings and names things appropriately.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_net.h
drivers/net/ethernet/netronome/nfp/nfp_net_debugfs.c

index b14aa31d494a38b7390406c191833d99d9b2ec65..3eec4195c155a1396bfda21982f25a56fc493d4a 100644 (file)
@@ -805,6 +805,17 @@ static inline u32 nfp_qcp_wr_ptr_read(u8 __iomem *q)
        return _nfp_qcp_read(q, NFP_QCP_WRITE_PTR);
 }
 
+static inline bool nfp_net_is_data_vnic(struct nfp_net *nn)
+{
+       WARN_ON_ONCE(!nn->dp.netdev && nn->port);
+       return !!nn->dp.netdev;
+}
+
+static inline bool nfp_net_running(struct nfp_net *nn)
+{
+       return nn->dp.ctrl & NFP_NET_CFG_CTRL_ENABLE;
+}
+
 /* Globals */
 extern const char nfp_driver_version[];
 
index 8c52c0e8379c37faf7a90e905b186105cb1ad95a..40217ece5fcb2671bd6a85c23adb99a841b2136f 100644 (file)
@@ -54,7 +54,7 @@ static int nfp_net_debugfs_rx_q_read(struct seq_file *file, void *data)
                goto out;
        nn = r_vec->nfp_net;
        rx_ring = r_vec->rx_ring;
-       if (!netif_running(nn->dp.netdev))
+       if (!nfp_net_running(nn))
                goto out;
 
        rxd_cnt = rx_ring->cnt;
@@ -138,7 +138,7 @@ static int nfp_net_debugfs_tx_q_read(struct seq_file *file, void *data)
        if (!r_vec->nfp_net || !tx_ring)
                goto out;
        nn = r_vec->nfp_net;
-       if (!netif_running(nn->dp.netdev))
+       if (!nfp_net_running(nn))
                goto out;
 
        txd_cnt = tx_ring->cnt;
@@ -209,7 +209,10 @@ void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir, int id)
        if (IS_ERR_OR_NULL(nfp_dir))
                return;
 
-       sprintf(name, "vnic%d", id);
+       if (nfp_net_is_data_vnic(nn))
+               sprintf(name, "vnic%d", id);
+       else
+               strcpy(name, "ctrl-vnic");
        nn->debugfs_dir = debugfs_create_dir(name, ddir);
        if (IS_ERR_OR_NULL(nn->debugfs_dir))
                return;