- Patching the driver for linux-4.14. Resolves issue #188

master
Asim Jamshed 2018-04-30 19:00:18 -07:00
parent 80723ecd94
commit c14d1e522a
2 changed files with 64 additions and 19 deletions

View File

@ -5733,30 +5733,36 @@ exit:
}
#ifdef NETIF_F_HW_TC
#ifdef I40E_FCOE
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
int __i40e_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
struct tc_to_netdev *tc)
#else
int __i40e_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
__be16 proto, struct tc_to_netdev *tc)
#endif
#else
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
static int __i40e_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
#ifdef HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV
static int __i40e_setup_tc(struct net_device *netdev, enum tc_setup_type type,
void *type_data)
#elif defined(HAVE_NDO_SETUP_TC_CHAIN_INDEX)
static int __i40e_setup_tc(struct net_device *netdev, u32 handle,
u32 chain_index, __be16 proto,
struct tc_to_netdev *tc)
#else
static int __i40e_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
__be16 proto, struct tc_to_netdev *tc)
#endif
static int __i40e_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
struct tc_to_netdev *tc)
#endif
{
if (tc->type != TC_SETUP_MQPRIO)
return -EINVAL;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
return i40e_setup_tc(netdev, tc->tc);
#ifdef HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV
struct tc_mqprio_qopt *mqprio = type_data;
#else
return i40e_setup_tc(netdev, tc->mqprio->num_tc);
#ifdef TC_MQPRIO_HW_OFFLOAD_MAX
struct tc_mqprio_qopt *mqprio = tc->mqprio;
#endif /* TC_MQPRIO_HW_OFFLOAD_MAX*/
unsigned int type = tc->type;
#endif /* HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV */
if (type != TC_SETUP_QDISC_MQPRIO)
return -EINVAL;
#ifdef TC_MQPRIO_HW_OFFLOAD_MAX
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
return i40e_setup_tc(netdev, mqprio->num_tc);
#else
return i40e_setup_tc(netdev, tc->tc);
#endif
}
#endif /* NETIF_F_HW_TC */

View File

@ -1640,6 +1640,36 @@ static inline struct mii_ioctl_data *_kc_if_mii(struct ifreq *rq)
#endif /* < 2.6.8 */
/*****************************************************************************/
/*****************************************************************************/
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0))
#ifndef ethtool_link_ksettings_del_link_mode
#define ethtool_link_ksettings_del_link_mode(ptr, name, mode) \
__clear_bit(ETHTOOL_LINK_MODE_ ## mode ## _BIT, (ptr)->link_modes.name)
#endif
#if (SLE_VERSION_CODE && (SLE_VERSION_CODE >= SLE_VERSION(15,0,0)))
#define HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV
#endif
#if (RHEL_RELEASE_CODE && (RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,5)))
#define HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV
#define HAVE_RHEL7_NETDEV_OPS_EXT_NDO_SETUP_TC
#endif
#define TIMER_DATA_TYPE unsigned long
#define TIMER_FUNC_TYPE void (*)(TIMER_DATA_TYPE)
#define timer_setup(timer, callback, flags) \
__setup_timer((timer), (TIMER_FUNC_TYPE)(callback), \
(TIMER_DATA_TYPE)(timer), (flags))
#define from_timer(var, callback_timer, timer_fieldname) \
container_of(callback_timer, typeof(*var), timer_fieldname)
#else /* > 4.14 */
#define HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV
#endif /* 4.14.0 */
/*****************************************************************************/
#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9))
#include <net/dsfield.h>
#define __iomem
@ -5415,4 +5445,13 @@ static inline void __page_frag_cache_drain(struct page *page,
#define HAVE_VOID_NDO_GET_STATS64
#endif /* 4.11.0 */
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0))
#define TC_SETUP_QDISC_MQPRIO TC_SETUP_MQPRIO
#ifdef ETHTOOL_GLINKSETTINGS
void _kc_ethtool_intersect_link_masks(struct ethtool_link_ksettings *dst,
struct ethtool_link_ksettings *src);
#define ethtool_intersect_link_masks _kc_ethtool_intersect_link_masks
#endif /* ETHTOOL_GLINKSETTINGS */
#endif /* 4.15.0 */
#endif /* _KCOMPAT_H_ */