Commit 48e01e00 authored by Jeff Kirsher's avatar Jeff Kirsher
Browse files

ixgbe/ixgbevf: fix XFRM_ALGO dependency



Based on the original work from Arnd Bergmann.

When XFRM_ALGO is not enabled, the new ixgbe IPsec code produces a
link error:

drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o: In function `ixgbe_ipsec_vf_add_sa':
ixgbe_ipsec.c:(.text+0x1266): undefined reference to `xfrm_aead_get_byname'

Simply selecting XFRM_ALGO from here causes circular dependencies, so
to fix it, we probably want this slightly more complex solution that is
similar to what other drivers with XFRM offload do:

A separate Kconfig symbol now controls whether we include the IPsec
offload code. To keep the old behavior, this is left as 'default y'. The
dependency in XFRM_OFFLOAD still causes a circular dependency but is
not actually needed because this symbol is not user visible, so removing
that dependency on top makes it all work.

CC: Arnd Bergmann <arnd@arndb.de>
CC: Shannon Nelson <shannon.nelson@oracle.com>
Fixes: eda0333a ("ixgbe: add VF IPsec management")
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
parent 35ae5414
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -200,6 +200,15 @@ config IXGBE_DCB

	  If unsure, say N.

config IXGBE_IPSEC
	bool "IPSec XFRM cryptography-offload acceleration"
	depends on IXGBE
	depends on XFRM_OFFLOAD
	default y
	select XFRM_ALGO
	---help---
	  Enable support for IPSec offload in ixgbe.ko

config IXGBEVF
	tristate "Intel(R) 10GbE PCI Express Virtual Function Ethernet support"
	depends on PCI_MSI
@@ -217,6 +226,15 @@ config IXGBEVF
	  will be called ixgbevf.  MSI-X interrupt support is required
	  for this driver to work correctly.

config IXGBEVF_IPSEC
	bool "IPSec XFRM cryptography-offload acceleration"
	depends on IXGBEVF
	depends on XFRM_OFFLOAD
	default y
	select XFRM_ALGO
	---help---
	  Enable support for IPSec offload in ixgbevf.ko

config I40E
	tristate "Intel(R) Ethernet Controller XL710 Family support"
	imply PTP_1588_CLOCK
+1 −1
Original line number Diff line number Diff line
@@ -17,4 +17,4 @@ ixgbe-$(CONFIG_IXGBE_DCB) += ixgbe_dcb.o ixgbe_dcb_82598.o \
ixgbe-$(CONFIG_IXGBE_HWMON) += ixgbe_sysfs.o
ixgbe-$(CONFIG_DEBUG_FS) += ixgbe_debugfs.o
ixgbe-$(CONFIG_FCOE:m=y) += ixgbe_fcoe.o
ixgbe-$(CONFIG_XFRM_OFFLOAD) += ixgbe_ipsec.o
ixgbe-$(CONFIG_IXGBE_IPSEC) += ixgbe_ipsec.o
+4 −4
Original line number Diff line number Diff line
@@ -769,9 +769,9 @@ struct ixgbe_adapter {
#define IXGBE_RSS_KEY_SIZE     40  /* size of RSS Hash Key in bytes */
	u32 *rss_key;

#ifdef CONFIG_XFRM_OFFLOAD
#ifdef CONFIG_IXGBE_IPSEC
	struct ixgbe_ipsec *ipsec;
#endif /* CONFIG_XFRM_OFFLOAD */
#endif /* CONFIG_IXGBE_IPSEC */

	/* AF_XDP zero-copy */
	struct xdp_umem **xsk_umems;
@@ -1008,7 +1008,7 @@ void ixgbe_store_key(struct ixgbe_adapter *adapter);
void ixgbe_store_reta(struct ixgbe_adapter *adapter);
s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
		       u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm);
#ifdef CONFIG_XFRM_OFFLOAD
#ifdef CONFIG_IXGBE_IPSEC
void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter);
void ixgbe_stop_ipsec_offload(struct ixgbe_adapter *adapter);
void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter);
@@ -1036,5 +1036,5 @@ static inline int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter,
					u32 *mbuf, u32 vf) { return -EACCES; }
static inline int ixgbe_ipsec_vf_del_sa(struct ixgbe_adapter *adapter,
					u32 *mbuf, u32 vf) { return -EACCES; }
#endif /* CONFIG_XFRM_OFFLOAD */
#endif /* CONFIG_IXGBE_IPSEC */
#endif /* _IXGBE_H_ */
+3 −3
Original line number Diff line number Diff line
@@ -8694,7 +8694,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,

#endif /* IXGBE_FCOE */

#ifdef CONFIG_XFRM_OFFLOAD
#ifdef CONFIG_IXGBE_IPSEC
	if (skb->sp && !ixgbe_ipsec_tx(tx_ring, first, &ipsec_tx))
		goto out_drop;
#endif
@@ -10190,7 +10190,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev,
	 * the TSO, so it's the exception.
	 */
	if (skb->encapsulation && !(features & NETIF_F_TSO_MANGLEID)) {
#ifdef CONFIG_XFRM_OFFLOAD
#ifdef CONFIG_IXGBE_IPSEC
		if (!skb->sp)
#endif
			features &= ~NETIF_F_TSO;
@@ -10883,7 +10883,7 @@ skip_sriov:
	if (hw->mac.type >= ixgbe_mac_82599EB)
		netdev->features |= NETIF_F_SCTP_CRC;

#ifdef CONFIG_XFRM_OFFLOAD
#ifdef CONFIG_IXGBE_IPSEC
#define IXGBE_ESP_FEATURES	(NETIF_F_HW_ESP | \
				 NETIF_F_HW_ESP_TX_CSUM | \
				 NETIF_F_GSO_ESP)
+1 −1
Original line number Diff line number Diff line
@@ -10,5 +10,5 @@ ixgbevf-objs := vf.o \
                mbx.o \
                ethtool.o \
                ixgbevf_main.o
ixgbevf-$(CONFIG_XFRM_OFFLOAD) += ipsec.o
ixgbevf-$(CONFIG_IXGBEVF_IPSEC) += ipsec.o
Loading