octeontx2-pf: mcs: Fix shared counters logic
authorSubbaraya Sundeep <sbhatta@marvell.com>
Wed, 26 Apr 2023 06:25:27 +0000 (11:55 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 27 Apr 2023 10:38:11 +0000 (12:38 +0200)
Macsec stats like InPktsLate and InPktsDelayed share
same counter in hardware. If SecY replay_protect is true
then counter represents InPktsLate otherwise InPktsDelayed.
This mode change was tracked based on protect_frames
instead of replay_protect mistakenly. Similarly InPktsUnchecked
and InPktsOk share same counter and mode change was tracked
based on validate_check instead of validate_disabled.
This patch fixes those problems.

Fixes: c54ffc73601c ("octeontx2-pf: mcs: Introduce MACSEC hardware offloading")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h

index 13faca9..3ad8d7e 100644 (file)
@@ -1014,7 +1014,7 @@ static void cn10k_mcs_sync_stats(struct otx2_nic *pfvf, struct macsec_secy *secy
 
        /* Check if sync is really needed */
        if (secy->validate_frames == txsc->last_validate_frames &&
-           secy->protect_frames == txsc->last_protect_frames)
+           secy->replay_protect == txsc->last_replay_protect)
                return;
 
        cn10k_mcs_secy_stats(pfvf, txsc->hw_secy_id_rx, &rx_rsp, MCS_RX, true);
@@ -1036,19 +1036,19 @@ static void cn10k_mcs_sync_stats(struct otx2_nic *pfvf, struct macsec_secy *secy
                rxsc->stats.InPktsInvalid += sc_rsp.pkt_invalid_cnt;
                rxsc->stats.InPktsNotValid += sc_rsp.pkt_notvalid_cnt;
 
-               if (txsc->last_protect_frames)
+               if (txsc->last_replay_protect)
                        rxsc->stats.InPktsLate += sc_rsp.pkt_late_cnt;
                else
                        rxsc->stats.InPktsDelayed += sc_rsp.pkt_late_cnt;
 
-               if (txsc->last_validate_frames == MACSEC_VALIDATE_CHECK)
+               if (txsc->last_validate_frames == MACSEC_VALIDATE_DISABLED)
                        rxsc->stats.InPktsUnchecked += sc_rsp.pkt_unchecked_cnt;
                else
                        rxsc->stats.InPktsOK += sc_rsp.pkt_unchecked_cnt;
        }
 
        txsc->last_validate_frames = secy->validate_frames;
-       txsc->last_protect_frames = secy->protect_frames;
+       txsc->last_replay_protect = secy->replay_protect;
 }
 
 static int cn10k_mdo_open(struct macsec_context *ctx)
@@ -1117,7 +1117,7 @@ static int cn10k_mdo_add_secy(struct macsec_context *ctx)
        txsc->sw_secy = secy;
        txsc->encoding_sa = secy->tx_sc.encoding_sa;
        txsc->last_validate_frames = secy->validate_frames;
-       txsc->last_protect_frames = secy->protect_frames;
+       txsc->last_replay_protect = secy->replay_protect;
 
        list_add(&txsc->entry, &cfg->txsc_list);
 
@@ -1538,12 +1538,12 @@ static int cn10k_mdo_get_rx_sc_stats(struct macsec_context *ctx)
        rxsc->stats.InPktsInvalid += rsp.pkt_invalid_cnt;
        rxsc->stats.InPktsNotValid += rsp.pkt_notvalid_cnt;
 
-       if (secy->protect_frames)
+       if (secy->replay_protect)
                rxsc->stats.InPktsLate += rsp.pkt_late_cnt;
        else
                rxsc->stats.InPktsDelayed += rsp.pkt_late_cnt;
 
-       if (secy->validate_frames == MACSEC_VALIDATE_CHECK)
+       if (secy->validate_frames == MACSEC_VALIDATE_DISABLED)
                rxsc->stats.InPktsUnchecked += rsp.pkt_unchecked_cnt;
        else
                rxsc->stats.InPktsOK += rsp.pkt_unchecked_cnt;
index 3d22cc6..f42b2b6 100644 (file)
@@ -389,7 +389,7 @@ struct cn10k_mcs_txsc {
        struct cn10k_txsc_stats stats;
        struct list_head entry;
        enum macsec_validation_type last_validate_frames;
-       bool last_protect_frames;
+       bool last_replay_protect;
        u16 hw_secy_id_tx;
        u16 hw_secy_id_rx;
        u16 hw_flow_id;