igb_4.9_compat.patch 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. From 6445198f802d993c73f4b246353b2ceb2dfafc32 Mon Sep 17 00:00:00 2001
  2. From: Ferruh Yigit <[email protected]>
  3. Date: Mon, 17 Oct 2016 11:23:14 +0100
  4. Subject: kni: fix build with kernel 4.9
  5. compile error:
  6. CC [M] .../lib/librte_eal/linuxapp/kni/igb_main.o
  7. .../lib/librte_eal/linuxapp/kni/igb_main.c:2317:21:
  8. error: initialization from incompatible pointer type
  9. [-Werror=incompatible-pointer-types]
  10. .ndo_set_vf_vlan = igb_ndo_set_vf_vlan,
  11. ^~~~~~~~~~~~~~~~~~~
  12. Linux kernel 4.9 updates API for ndo_set_vf_vlan:
  13. Linux: 79aab093a0b5 ("net: Update API for VF vlan protocol 802.1ad support")
  14. Use new API for Linux kernels >= 4.9
  15. Signed-off-by: Ferruh Yigit <[email protected]>
  16. Tested-by: Pablo de Lara <[email protected]>
  17. ---
  18. src/igb_main.c | 19 +++++++++++++++++++
  19. src/kcompat.h | 4 ++++
  20. 2 files changed, 23 insertions(+)
  21. diff --git a/src/igb_main.c b/src/igb_main.c
  22. index 23e2d64..f4dca5a 100644
  23. --- a/src/igb_main.c
  24. +++ b/src/igb_main.c
  25. @@ -195,7 +195,11 @@ static void igb_process_mdd_event(struct igb_adapter *);
  26. #ifdef IFLA_VF_MAX
  27. static int igb_ndo_set_vf_mac( struct net_device *netdev, int vf, u8 *mac);
  28. static int igb_ndo_set_vf_vlan(struct net_device *netdev,
  29. +#ifdef HAVE_VF_VLAN_PROTO
  30. + int vf, u16 vlan, u8 qos, __be16 vlan_proto);
  31. +#else
  32. int vf, u16 vlan, u8 qos);
  33. +#endif
  34. #ifdef HAVE_VF_SPOOFCHK_CONFIGURE
  35. static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
  36. bool setting);
  37. @@ -6412,7 +6416,11 @@ static void igb_set_vmvir(struct igb_adapter *adapter, u32 vid, u32 vf)
  38. }
  39. static int igb_ndo_set_vf_vlan(struct net_device *netdev,
  40. +#ifdef HAVE_VF_VLAN_PROTO
  41. + int vf, u16 vlan, u8 qos, __be16 vlan_proto)
  42. +#else
  43. int vf, u16 vlan, u8 qos)
  44. +#endif
  45. {
  46. int err = 0;
  47. struct igb_adapter *adapter = netdev_priv(netdev);
  48. @@ -6420,6 +6428,12 @@ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
  49. /* VLAN IDs accepted range 0-4094 */
  50. if ((vf >= adapter->vfs_allocated_count) || (vlan > VLAN_VID_MASK-1) || (qos > 7))
  51. return -EINVAL;
  52. +
  53. +#ifdef HAVE_VF_VLAN_PROTO
  54. + if (vlan_proto != htons(ETH_P_8021Q))
  55. + return -EPROTONOSUPPORT;
  56. +#endif
  57. +
  58. if (vlan || qos) {
  59. err = igb_vlvf_set(adapter, vlan, !!vlan, vf);
  60. if (err)
  61. @@ -6580,7 +6594,12 @@ static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf)
  62. if (adapter->vf_data[vf].pf_vlan)
  63. igb_ndo_set_vf_vlan(adapter->netdev, vf,
  64. adapter->vf_data[vf].pf_vlan,
  65. +#ifdef HAVE_VF_VLAN_PROTO
  66. + adapter->vf_data[vf].pf_qos,
  67. + htons(ETH_P_8021Q));
  68. +#else
  69. adapter->vf_data[vf].pf_qos);
  70. +#endif
  71. else
  72. igb_clear_vf_vfta(adapter, vf);
  73. #endif
  74. diff --git a/src/kcompat.h b/src/kcompat.h
  75. index 69e0e7a..84826b2 100644
  76. --- a/src/kcompat.h
  77. +++ b/src/kcompat.h
  78. @@ -3929,4 +3929,8 @@ skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
  79. #define vlan_tx_tag_present skb_vlan_tag_present
  80. #endif
  81. +#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) )
  82. +#define HAVE_VF_VLAN_PROTO
  83. +#endif /* >= 4.9.0 */
  84. +
  85. #endif /* _KCOMPAT_H_ */
  86. --
  87. cgit v1.0