lkml.org 
[lkml]   [2024]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
SubjectRe: [PATCH net-next v6 5/8] octeon_ep_vf: add support for ndo ops
<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 7, 2024 at 12:23 PM Shinas Rasheed &lt;<a href="mailto:srasheed@marvell.com">srasheed@marvell.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Add support for ndo ops to set MAC address, change MTU, get stats.<br>
Add control path support to set MAC address, change MTU, get stats,<br>
set speed, get and set link mode.<br></blockquote><div>[Kalesh]: You are adding support for only one ndo hook &quot;.ndo_get_stats64&quot; in this patch. Am I missing something?</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Signed-off-by: Shinas Rasheed &lt;<a href="mailto:srasheed@marvell.com" target="_blank">srasheed@marvell.com</a>&gt;<br>
---<br>
V6:<br>
  - No changes<br>
<br>
V5: <a href="https://lore.kernel.org/all/20240129050254.3047778-6-srasheed@marvell.com/" rel="noreferrer" target="_blank">https://lore.kernel.org/all/20240129050254.3047778-6-srasheed@marvell.com/</a><br>
  - No changes<br>
<br>
V4: <a href="https://lore.kernel.org/all/20240108124213.2966536-6-srasheed@marvell.com/" rel="noreferrer" target="_blank">https://lore.kernel.org/all/20240108124213.2966536-6-srasheed@marvell.com/</a><br>
  - Provide more stats in ndo_get_stats64 such as tx_dropped, rx_dropped<br>
    etc.<br>
<br>
V3: <a href="https://lore.kernel.org/all/20240105203823.2953604-6-srasheed@marvell.com/" rel="noreferrer" target="_blank">https://lore.kernel.org/all/20240105203823.2953604-6-srasheed@marvell.com/</a><br>
  - No changes<br>
<br>
V2: <a href="https://lore.kernel.org/all/20231223134000.2906144-6-srasheed@marvell.com/" rel="noreferrer" target="_blank">https://lore.kernel.org/all/20231223134000.2906144-6-srasheed@marvell.com/</a><br>
  - No changes<br>
<br>
V1: <a href="https://lore.kernel.org/all/20231221092844.2885872-6-srasheed@marvell.com/" rel="noreferrer" target="_blank">https://lore.kernel.org/all/20231221092844.2885872-6-srasheed@marvell.com/</a><br>
<br>
 .../marvell/octeon_ep_vf/octep_vf_main.c      | 58 +++++++++++++++++++<br>
 1 file changed, 58 insertions(+)<br>
<br>
diff --git a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c<br>
index 562beed9af6a..ff879b1e846e 100644<br>
--- a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c<br>
+++ b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c<br>
@@ -186,6 +186,23 @@ static netdev_tx_t octep_vf_start_xmit(struct sk_buff *skb,<br>
        return NETDEV_TX_OK;<br>
 }<br>
<br>
+int octep_vf_get_if_stats(struct octep_vf_device *oct)<br></blockquote><div>[Kalesh]: You may want to make this function static. </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+{<br>
+       struct octep_vf_iface_rxtx_stats vf_stats;<br>
+       int ret, size;<br>
+<br>
+       memset(&amp;vf_stats, 0, sizeof(struct octep_vf_iface_rxtx_stats));<br></blockquote><div>[Kalesh]: You can avoid memset by initializing vf_stats = {}; </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+       ret = octep_vf_mbox_bulk_read(oct, OCTEP_PFVF_MBOX_CMD_GET_STATS,<br>
+                                     (u8 *)&amp;vf_stats, &amp;size);<br>
+       if (!ret) {<br></blockquote><div>[Kalesh] For better alignment:</div><div>if (ret)</div><div>     return ret; </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+               memcpy(&amp;oct-&gt;iface_rx_stats, &amp;vf_stats.iface_rx_stats,<br>
+                      sizeof(struct octep_vf_iface_rx_stats));<br>
+               memcpy(&amp;oct-&gt;iface_tx_stats, &amp;vf_stats.iface_tx_stats,<br>
+                      sizeof(struct octep_vf_iface_tx_stats));<br>
+       }<br>
+       return ret;<br>
+}<br>
+<br>
 int octep_vf_get_link_info(struct octep_vf_device *oct)<br>
 {<br>
        int ret, size;<br>
@@ -199,6 +216,46 @@ int octep_vf_get_link_info(struct octep_vf_device *oct)<br>
        return 0;<br>
 }<br>
<br>
+/**<br>
+ * octep_vf_get_stats64() - Get Octeon network device statistics.<br>
+ *<br>
+ * @netdev: kernel network device.<br>
+ * @stats: pointer to stats structure to be filled in.<br>
+ */<br>
+static void octep_vf_get_stats64(struct net_device *netdev,<br>
+                                struct rtnl_link_stats64 *stats)<br>
+{<br>
+       struct octep_vf_device *oct = netdev_priv(netdev);<br>
+       u64 tx_packets, tx_bytes, rx_packets, rx_bytes;<br>
+       int q;<br>
+<br>
+       tx_packets = 0;<br>
+       tx_bytes = 0;<br>
+       rx_packets = 0;<br>
+       rx_bytes = 0;<br>
+       for (q = 0; q &lt; oct-&gt;num_oqs; q++) {<br>
+               struct octep_vf_iq *iq = oct-&gt;iq[q];<br>
+               struct octep_vf_oq *oq = oct-&gt;oq[q];<br>
+<br>
+               tx_packets += iq-&gt;stats.instr_completed;<br>
+               tx_bytes += iq-&gt;stats.bytes_sent;<br>
+               rx_packets += oq-&gt;stats.packets;<br>
+               rx_bytes += oq-&gt;stats.bytes;<br>
+       }<br>
+       stats-&gt;tx_packets = tx_packets;<br>
+       stats-&gt;tx_bytes = tx_bytes;<br>
+       stats-&gt;rx_packets = rx_packets;<br>
+       stats-&gt;rx_bytes = rx_bytes;<br>
+       if (!octep_vf_get_if_stats(oct)) {<br>
+               stats-&gt;multicast = oct-&gt;iface_rx_stats.mcast_pkts;<br>
+               stats-&gt;rx_errors = oct-&gt;iface_rx_stats.err_pkts;<br>
+               stats-&gt;rx_dropped = oct-&gt;iface_rx_stats.dropped_pkts_fifo_full +<br>
+                                   oct-&gt;iface_rx_stats.err_pkts;<br>
+               stats-&gt;rx_missed_errors = oct-&gt;iface_rx_stats.dropped_pkts_fifo_full;<br>
+               stats-&gt;tx_dropped = oct-&gt;iface_tx_stats.dropped;<br>
+       }<br>
+}<br>
+<br>
 /**<br>
  * octep_vf_tx_timeout_task - work queue task to Handle Tx queue timeout.<br>
  *<br>
@@ -313,6 +370,7 @@ static const struct net_device_ops octep_vf_netdev_ops = {<br>
        .ndo_open                = octep_vf_open,<br>
        .ndo_stop                = octep_vf_stop,<br>
        .ndo_start_xmit          = octep_vf_start_xmit,<br>
+       .ndo_get_stats64         = octep_vf_get_stats64,<br>
        .ndo_tx_timeout          = octep_vf_tx_timeout,<br>
        .ndo_set_mac_address     = octep_vf_set_mac,<br>
        .ndo_change_mtu          = octep_vf_change_mtu,<br>
-- <br>
2.25.1<br>
<br>
<br>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Regards,<div>Kalesh A P</div></div></div></div>
[unhandled content-type:application/pkcs7-signature]
\
 
 \ /
  Last update: 2024-05-27 14:51    [W:1.106 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site