[Intel-wired-lan] [net-queue PATCH] ixgbe: check that ipsec is available on the chip

zhuyj zyjzyj2000 at gmail.com
Tue Jun 5 03:25:45 UTC 2018


Can we add ipsec state to "ethtool -k"? So we run "ethtool -k" to
check ipsec offload enabled or not.

Zhu Yanjun

On Tue, Jun 5, 2018 at 2:58 AM, Shannon Nelson
<shannon.nelson at oracle.com> wrote:
> Check the writability of the IPsec configuration registers
> before setting up the offload.
>
> Fixes: 49a94d74d948 ("ixgbe: add ipsec engine start and stop routines")
> Reported-by: Andre Tomt <andre at tomt.net>
> Cc: Alexander Duyck <alexander.h.duyck at intel.com>
> Signed-off-by: Shannon Nelson <shannon.nelson at oracle.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
> index 344a1f2..003b53f 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
> @@ -210,7 +210,10 @@ static void ixgbe_ipsec_stop_engine(struct ixgbe_adapter *adapter)
>         struct ixgbe_hw *hw = &adapter->hw;
>         u32 reg;
>
> -       ixgbe_ipsec_stop_data(adapter);
> +       /* stop data if it has been running */
> +       reg = IXGBE_READ_REG(hw, IXGBE_SECTXCTRL);
> +       if (!(reg & IXGBE_SECTXCTRL_SECTX_DIS))
> +               ixgbe_ipsec_stop_data(adapter);
>
>         /* disable Rx and Tx SA lookup */
>         IXGBE_WRITE_REG(hw, IXGBE_IPSTXIDX, 0);
> @@ -966,12 +969,27 @@ void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,
>   **/
>  void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter)
>  {
> +       struct ixgbe_hw *hw = &adapter->hw;
>         struct ixgbe_ipsec *ipsec;
>         size_t size;
> +       u32 reg1, reg2;
>
>         if (adapter->hw.mac.type == ixgbe_mac_82598EB)
>                 return;
>
> +       /* verify that the ipsec offload is available by checking
> +        * the writability of the engine DISable bit - can we clear
> +        * the bit?  If not, don't set up ipsec.  If yes, the put
> +        * it back and continue the setup.
> +        */
> +       reg1 = IXGBE_READ_REG(hw, IXGBE_SECTXCTRL);
> +       reg2 = reg1 & ~IXGBE_SECTXCTRL_SECTX_DIS;
> +       IXGBE_WRITE_REG(hw, IXGBE_SECTXCTRL, reg2);
> +       reg2 = IXGBE_READ_REG(hw, IXGBE_SECTXCTRL);
> +       if (reg2 & IXGBE_SECTXCTRL_SECTX_DIS)
> +               return;
> +       IXGBE_WRITE_REG(hw, IXGBE_SECTXCTRL, reg1);
> +
>         ipsec = kzalloc(sizeof(*ipsec), GFP_KERNEL);
>         if (!ipsec)
>                 goto err1;
> --
> 2.7.4
>
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan


More information about the Intel-wired-lan mailing list