From d4dca4e2b217d190a1042aa65172ae2bd8c3eadc Mon Sep 17 00:00:00 2001 From: Vladimir Sokolovsky Date: Wed, 1 Aug 2018 16:44:26 -0500 Subject: [PATCH] Added macros and headers to support MLX5 on RHEL7.4 Signed-off-by: Vladimir Sokolovsky --- config/rdma.m4 | 254 ++++++++++++++++++++++++++++++++ include/linux/bpf_trace.h | 11 ++ include/linux/firmware.h | 13 ++ include/linux/skbuff.h | 22 +++ include/net/tc_act/tc_pedit.h | 62 ++++++++ include/net/tc_act/tc_vlan.h | 63 ++++++++ include/uapi/linux/devlink.h | 35 +++++ include/uapi/linux/net_tstamp.h | 12 ++ 8 files changed, 472 insertions(+) create mode 100644 include/linux/bpf_trace.h create mode 100644 include/linux/firmware.h create mode 100644 include/linux/skbuff.h create mode 100644 include/net/tc_act/tc_pedit.h create mode 100644 include/net/tc_act/tc_vlan.h create mode 100644 include/uapi/linux/devlink.h create mode 100644 include/uapi/linux/net_tstamp.h diff --git a/config/rdma.m4 b/config/rdma.m4 index eac2cdb..aab7dbe 100644 --- a/config/rdma.m4 +++ b/config/rdma.m4 @@ -6617,6 +6617,260 @@ AC_DEFUN([LINUX_CONFIG_COMPAT], ],[ AC_MSG_RESULT(no) ]) + + AC_MSG_CHECKING([if linux/pci.h has pci_irq_vector, pci_free_irq_vectors, pci_alloc_irq_vectors]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + pci_irq_vector(NULL, 0); + pci_free_irq_vectors(NULL); + pci_alloc_irq_vectors(NULL, 0, 0, 0); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PCI_IRQ_API, 1, + [linux/pci.h has pci_irq_vector, pci_free_irq_vectors, pci_alloc_irq_vectors]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if struct devlink_ops has eswitch_encap_mode_set/get]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + struct devlink_ops dlops = { + .eswitch_encap_mode_set = NULL, + .eswitch_encap_mode_get = NULL, + }; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEVLINK_HAS_ESWITCH_ENCAP_MODE_SET, 1, + [eswitch_encap_mode_set/get is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if struct devlink_ops has eswitch_inline_mode_get/set]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + struct devlink_ops dlops = { + .eswitch_inline_mode_get = NULL, + .eswitch_inline_mode_set = NULL, + }; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEVLINK_HAS_ESWITCH_INLINE_MODE_GET_SET, 1, + [eswitch_inline_mode_get/set is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if struct devlink_ops has eswitch_mode_get/set]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + struct devlink_ops dlops = { + .eswitch_mode_get = NULL, + .eswitch_mode_set = NULL, + }; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEVLINK_HAS_ESWITCH_MODE_GET_SET, 1, + [eswitch_mode_get/set is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if napi_complete_done returns value]) + LB_LINUX_TRY_COMPILE([ + #include + + ],[ + if (napi_complete_done(NULL, 0)) + return; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NAPI_COMPLETE_DONE_RET_VALUE, 1, + [napi_complete_done returns value]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if skbuff.h has skb_put_zero]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + skb_put_zero(NULL, 0); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SKB_PUT_ZERO, 1, + [skb_put_zero is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if flow_dissector.h enum flow_dissector_key_keyid has FLOW_DISSECTOR_KEY_TCP]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + enum flow_dissector_key_id keyid = FLOW_DISSECTOR_KEY_TCP; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FLOW_DISSECTOR_KEY_TCP, 1, + [FLOW_DISSECTOR_KEY_TCP is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/tc_act/tc_pedit.h has tcf_pedit_nkeys]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + const struct tc_action xx; + tcf_pedit_nkeys(&xx); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_PEDIT_NKEYS, 1, + [tcf_pedit_nkeys is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/tc_act/tc_pedit.h struct tcf_pedit has member tcfp_keys_ex]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + struct tcf_pedit x = { + .tcfp_keys_ex = NULL, + }; + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_PEDIT_TCFP_KEYS_EX, 1, + [struct tcf_pedit has member tcfp_keys_ex]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if tc_vlan.h has tcf_vlan_push_prio]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + tcf_vlan_push_prio(NULL); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_VLAN_PUSH_PRIO, 1, + [tcf_vlan_push_prio is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/tc_act/tc_csum.h has TCA_CSUM_UPDATE_FLAG_IPV4HDR]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + int x = TCA_CSUM_UPDATE_FLAG_IPV4HDR; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCA_CSUM_UPDATE_FLAG_IPV4HDR, 1, + [TCA_CSUM_UPDATE_FLAG_IPV4HDR is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/pkt_cls.h has tcf_exts_has_actions]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + struct tcf_exts exts; + tcf_exts_has_actions(&exts); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_EXTS_HAS_ACTIONS, 1, + [tcf_exts_has_actions is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/tc_act/tc_tunnel_key.h has tcf_tunnel_info]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + const struct tc_action xx; + tcf_tunnel_info(&xx); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_TUNNEL_INFO, 1, + [tcf_tunnel_info is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + AC_MSG_CHECKING([if flow_dissector.h enum flow_dissector_key_keyid has FLOW_DISSECTOR_KEY_IP]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + enum flow_dissector_key_id keyid = FLOW_DISSECTOR_KEY_IP; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FLOW_DISSECTOR_KEY_IP, 1, + [FLOW_DISSECTOR_KEY_IP is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if flow_dissector.h enum flow_dissector_key_keyid has FLOW_DISSECTOR_KEY_VLAN]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + enum flow_dissector_key_id keyid = FLOW_DISSECTOR_KEY_VLAN; + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FLOW_DISSECTOR_KEY_VLAN, 1, + [FLOW_DISSECTOR_KEY_VLAN is defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([if net/pkt_cls.h has tcf_exts_stats_update]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + tcf_exts_stats_update(NULL, 0, 0, 0); + + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TCF_EXTS_STATS_UPDATE, 1, + [tcf_exts_stats_update is defined]) + ],[ + AC_MSG_RESULT(no) + ]) ]) # # COMPAT_CONFIG_HEADERS diff --git a/include/linux/bpf_trace.h b/include/linux/bpf_trace.h new file mode 100644 index 0000000..6acf46b --- /dev/null +++ b/include/linux/bpf_trace.h @@ -0,0 +1,11 @@ +#ifndef _COMPAT_LINUX_BPF_TRACE_H +#define _COMPAT_LINUX_BPF_TRACE_H + +#include "../../compat/config.h" + +#ifdef HAVE_LINUX_BPF_TRACE_H +#include +#include_next +#endif + +#endif /* _COMPAT_LINUX_BPF_TRACE_H */ diff --git a/include/linux/firmware.h b/include/linux/firmware.h new file mode 100644 index 0000000..2e2e822 --- /dev/null +++ b/include/linux/firmware.h @@ -0,0 +1,13 @@ +#ifndef _COMPAT_LINUX_FIRMWARE_H +#define _COMPAT_LINUX_FIRMWARE_H + +#include_next + +/* Include the autogenerated header file */ +#include "../../compat/config.h" + +#ifndef HAVE_REQUEST_FIRMWARE_DIRECT +#define request_firmware_direct request_firmware +#endif + +#endif /* _COMPAT_LINUX_FIRMWARE_H */ diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h new file mode 100644 index 0000000..ffc2841 --- /dev/null +++ b/include/linux/skbuff.h @@ -0,0 +1,22 @@ +#ifndef _COMPAT_LINUX_SKBUFF_H +#define _COMPAT_LINUX_SKBUFF_H + +#include "../../compat/config.h" +#include + +#include_next + + +#ifndef HAVE_SKB_PUT_ZERO +#define skb_put_zero LINUX_BACKPORT(skb_put_zero) +static inline void *skb_put_zero(struct sk_buff *skb, unsigned int len) +{ + void *tmp = skb_put(skb, len); + + memset(tmp, 0, len); + + return tmp; +} +#endif + +#endif /* _COMPAT_LINUX_SKBUFF_H */ diff --git a/include/net/tc_act/tc_pedit.h b/include/net/tc_act/tc_pedit.h new file mode 100644 index 0000000..06b97d2 --- /dev/null +++ b/include/net/tc_act/tc_pedit.h @@ -0,0 +1,62 @@ +#ifndef _COMPAT_NET_TC_ACT_TC_PEDIT_H +#define _COMPAT_NET_TC_ACT_TC_PEDIT_H 1 + +#include "../../../compat/config.h" + +#ifdef HAVE_TCF_PEDIT_TCFP_KEYS_EX +#include_next + +#ifndef HAVE_TCF_PEDIT_NKEYS +#include + + +static inline bool is_tcf_pedit(const struct tc_action *a) +{ +#ifdef CONFIG_NET_CLS_ACT + if (a->ops && a->ops->type == TCA_ACT_PEDIT) + return true; +#endif + return false; +} + +static inline int tcf_pedit_nkeys(const struct tc_action *a) +{ + return to_pedit(a)->tcfp_nkeys; +} + +static inline u32 tcf_pedit_htype(const struct tc_action *a, int index) +{ + if (to_pedit(a)->tcfp_keys_ex) + return to_pedit(a)->tcfp_keys_ex[index].htype; + + return TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK; +} + +static inline u32 tcf_pedit_cmd(const struct tc_action *a, int index) +{ + if (to_pedit(a)->tcfp_keys_ex) + return to_pedit(a)->tcfp_keys_ex[index].cmd; + + return __PEDIT_CMD_MAX; +} + +static inline u32 tcf_pedit_mask(const struct tc_action *a, int index) +{ + return to_pedit(a)->tcfp_keys[index].mask; +} + +static inline u32 tcf_pedit_val(const struct tc_action *a, int index) +{ + return to_pedit(a)->tcfp_keys[index].val; +} + +static inline u32 tcf_pedit_offset(const struct tc_action *a, int index) +{ + return to_pedit(a)->tcfp_keys[index].off; +} + +#endif /* HAVE_TCF_PEDIT_NKEYS */ + +#endif /* HAVE_TCF_PEDIT_TCFP_KEYS_EX */ + +#endif /* _COMPAT_NET_TC_ACT_TC_PEDIT_H */ diff --git a/include/net/tc_act/tc_vlan.h b/include/net/tc_act/tc_vlan.h new file mode 100644 index 0000000..07d3969 --- /dev/null +++ b/include/net/tc_act/tc_vlan.h @@ -0,0 +1,63 @@ +#ifndef _COMPAT_NET_TC_ACT_TC_VLAN_H +#define _COMPAT_NET_TC_ACT_TC_VLAN_H 1 + +#include "../../../compat/config.h" + +#ifndef CONFIG_COMPAT_TCF_VLAN_MOD +#include_next +#endif + +#ifndef to_vlan +#define act_to_vlan(a) ((struct tcf_vlan *) a->priv) +#else +#define act_to_vlan(a) to_vlan(a) +#endif + +#ifdef CONFIG_COMPAT_TCF_VLAN_MOD +#include +#include + +struct tcf_vlan { + struct tcf_common common; + int tcfv_action; + u16 tcfv_push_vid; + __be16 tcfv_push_proto; + u8 tcfv_push_prio; +}; +#define pc_to_vlan(pc) \ + container_of(pc, struct tcf_vlan, common) + +static inline bool is_tcf_vlan(const struct tc_action *a) +{ +#ifdef CONFIG_NET_CLS_ACT + if (a->ops && a->ops->type == TCA_ACT_VLAN) + return true; +#endif + return false; +} + +static inline u32 tcf_vlan_action(const struct tc_action *a) +{ + return act_to_vlan(a)->tcfv_action; +} + +static inline u16 tcf_vlan_push_vid(const struct tc_action *a) +{ + return act_to_vlan(a)->tcfv_push_vid; +} + +static inline __be16 tcf_vlan_push_proto(const struct tc_action *a) +{ + return act_to_vlan(a)->tcfv_push_proto; +} + +#endif + +#ifndef HAVE_TCF_VLAN_PUSH_PRIO +static inline __be16 tcf_vlan_push_prio(const struct tc_action *a) +{ + return act_to_vlan(a)->tcfv_push_prio; +} +#endif + +#endif /* _COMPAT_NET_TC_ACT_TC_VLAN_H */ diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h new file mode 100644 index 0000000..1db55e8 --- /dev/null +++ b/include/uapi/linux/devlink.h @@ -0,0 +1,35 @@ +#ifndef COMPAT_LINUX_UAPI_DEVLINK_H +#define COMPAT_LINUX_UAPI_DEVLINK_H + +#include "../../../compat/config.h" + +#ifndef HAVE_DEVLINK_HAS_ESWITCH_MODE_GET_SET +enum devlink_eswitch_mode { + DEVLINK_ESWITCH_MODE_LEGACY, + DEVLINK_ESWITCH_MODE_SWITCHDEV, +}; +#endif + +#ifndef HAVE_DEVLINK_HAS_ESWITCH_INLINE_MODE_GET_SET +enum devlink_eswitch_inline_mode { + DEVLINK_ESWITCH_INLINE_MODE_NONE, + DEVLINK_ESWITCH_INLINE_MODE_LINK, + DEVLINK_ESWITCH_INLINE_MODE_NETWORK, + DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT, +}; +#endif + +#ifndef HAVE_DEVLINK_HAS_ESWITCH_ENCAP_MODE_SET +enum devlink_eswitch_encap_mode { + DEVLINK_ESWITCH_ENCAP_MODE_NONE, + DEVLINK_ESWITCH_ENCAP_MODE_BASIC, +}; +#endif + +#ifdef HAVE_DEVLINK_H +#include_next +#else /* HAVE_DEVLINK_H */ + +#endif /* HAVE_DEVLINK_H */ + +#endif /* COMPAT_LINUX_UAPI_DEVLINK_H */ diff --git a/include/uapi/linux/net_tstamp.h b/include/uapi/linux/net_tstamp.h new file mode 100644 index 0000000..3a95741 --- /dev/null +++ b/include/uapi/linux/net_tstamp.h @@ -0,0 +1,12 @@ +#ifndef _COMPAT_LINUX_NET_TSTAMP_H +#define _COMPAT_LINUX_NET_TSTAMP_H + +#include "../../../compat/config.h" + +#include_next + +#ifndef HAVE_HWTSTAMP_FILTER_NTP_ALL +#define HWTSTAMP_FILTER_NTP_ALL 15 +#endif + +#endif /* _COMPAT_LINUX_NET_TSTAMP_H */ -- 2.46.0