Message ID | 20200221095437.388a35c2cde6.Ic310f826e4d1e036eca65b4fa7d13d2da12620aa@changeid (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | updates & improvements | expand |
On 2/21/20 9:56 AM, Johannes Berg wrote: > From: Luca Coelho <luciano.coelho@intel.com> > > RHEL 7.6 uses kernel v3.10 with a lot of backports from newer > kernels. This causes compilation to break in many places when the > backports project is used. To solve the issue, check for RHEL release > code 7.6 where appropriate. This doesn't take into consideration > lower versions of the kernel (i.e. < 7.6), because it's very difficult > to find the information about when each feature was backported. > > type=maint > ticket=none Please remove these internal tags. > Signed-off-by: Luca Coelho <luciano.coelho@intel.com> > Reviewed-on: https://git-ger-8.devtools.intel.com/gerrit/71953 > --- > .../backport-include/linux/bp-devcoredump.h | 3 +- > backport/backport-include/linux/etherdevice.h | 6 +- > backport/backport-include/linux/firmware.h | 6 +- > backport/backport-include/linux/jiffies.h | 5 + > backport/backport-include/linux/kernel.h | 3 +- > backport/backport-include/linux/ktime.h | 4 +- > backport/backport-include/linux/mm.h | 55 ++++++ > backport/backport-include/linux/netdevice.h | 9 +- > backport/backport-include/linux/netlink.h | 3 +- > backport/backport-include/linux/page_ref.h | 3 +- > backport/backport-include/linux/pci.h | 3 +- > backport/backport-include/linux/percpu.h | 3 +- > backport/backport-include/linux/pm_runtime.h | 3 +- > backport/backport-include/linux/property.h | 3 +- > backport/backport-include/linux/rtnetlink.h | 3 +- > backport/backport-include/linux/skbuff.h | 6 +- > backport/backport-include/linux/time.h | 6 + > backport/backport-include/linux/time64.h | 3 +- > backport/backport-include/linux/timekeeping.h | 15 +- > .../backport-include/linux/u64_stats_sync.h | 3 +- > backport/backport-include/linux/uuid.h | 3 +- > backport/backport-include/linux/wait.h | 3 +- > backport/backport-include/net/genetlink.h | 3 +- > backport/backport-include/net/iw_handler.h | 3 +- > backport/backport-include/net/net_namespace.h | 3 +- > backport/backport-include/net/netlink.h | 6 +- > backport/compat/backport-3.11.c | 2 + > backport/compat/backport-3.17.c | 2 + > backport/compat/backport-3.19.c | 2 + > backport/compat/backport-4.0.c | 182 +++++++++++++++++- > backport/compat/backport-4.2.c | 4 +- > backport/compat/backport-4.4.c | 3 +- > backport/compat/backport-genetlink.c | 22 ++- > patches/0028-select_queue/mac80211.patch | 10 +- > patches/0073-netdevice-mtu-range.cocci | 4 +- > patches/0075-ndo-stats-64.cocci | 4 +- > 36 files changed, 351 insertions(+), 50 deletions(-) > > diff --git a/backport/backport-include/linux/bp-devcoredump.h b/backport/backport-include/linux/bp-devcoredump.h > index 1e4abf646d65..8826cc1fee4b 100644 > --- a/backport/backport-include/linux/bp-devcoredump.h > +++ b/backport/backport-include/linux/bp-devcoredump.h > @@ -7,7 +7,8 @@ > * 4.6, outside that we can let our BPAUTO mechanism handle it. > */ > #if (LINUX_VERSION_IS_GEQ(3,18,0) && \ > - LINUX_VERSION_IS_LESS(4,7,0)) > + LINUX_VERSION_IS_LESS(4,7,0)) || \ > + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > static inline > void backport_dev_coredumpm(struct device *dev, struct module *owner, > void *data, size_t datalen, gfp_t gfp, > diff --git a/backport/backport-include/linux/etherdevice.h b/backport/backport-include/linux/etherdevice.h > index a00e66608eae..6bb7467c4ce1 100644 > --- a/backport/backport-include/linux/etherdevice.h > +++ b/backport/backport-include/linux/etherdevice.h > @@ -80,7 +80,8 @@ extern int eth_prepare_mac_addr_change(struct net_device *dev, void *p); > extern void eth_commit_mac_addr_change(struct net_device *dev, void *p); > #endif /* < 3.9 */ > > -#if LINUX_VERSION_IS_LESS(3,12,0) > +#if LINUX_VERSION_IS_LESS(3,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /** > * eth_hw_addr_inherit - Copy dev_addr from another net_device > * @dst: pointer to net_device to copy dev_addr to > @@ -193,7 +194,8 @@ static inline int eth_skb_pad(struct sk_buff *skb) > } > #endif /* LINUX_VERSION_IS_LESS(3,19,0) */ > > -#if LINUX_VERSION_IS_LESS(4,11,0) > +#if LINUX_VERSION_IS_LESS(4,11,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /** > * ether_addr_to_u64 - Convert an Ethernet address into a u64 value. > * @addr: Pointer to a six-byte array containing the Ethernet address > diff --git a/backport/backport-include/linux/firmware.h b/backport/backport-include/linux/firmware.h > index b5bc16befb85..9b2c01b2d8a5 100644 > --- a/backport/backport-include/linux/firmware.h > +++ b/backport/backport-include/linux/firmware.h > @@ -2,10 +2,12 @@ > #define __BACKPORT_LINUX_FIRMWARE_H > #include_next <linux/firmware.h> > > -#if LINUX_VERSION_IS_LESS(3,14,0) > +#if LINUX_VERSION_IS_LESS(3,14,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define request_firmware_direct(fw, name, device) request_firmware(fw, name, device) > #endif > -#if LINUX_VERSION_IS_LESS(4,18,0) > +#if LINUX_VERSION_IS_LESS(4,18,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define firmware_request_nowarn(fw, name, device) request_firmware(fw, name, device) > #endif > > diff --git a/backport/backport-include/linux/jiffies.h b/backport/backport-include/linux/jiffies.h > index bbadcc8cd27e..caef7db30004 100644 > --- a/backport/backport-include/linux/jiffies.h > +++ b/backport/backport-include/linux/jiffies.h > @@ -1,5 +1,10 @@ > #ifndef __BACKPORT_LNIUX_JIFFIES_H > #define __BACKPORT_LNIUX_JIFFIES_H > + > +#ifndef NSEC_PER_SEC > +#define NSEC_PER_SEC 1000000000L > +#endif > + > #include_next <linux/jiffies.h> > > #ifndef time_is_before_jiffies > diff --git a/backport/backport-include/linux/kernel.h b/backport/backport-include/linux/kernel.h > index f508166340f5..bf0889737497 100644 > --- a/backport/backport-include/linux/kernel.h > +++ b/backport/backport-include/linux/kernel.h > @@ -207,7 +207,8 @@ int __must_check kstrtobool_from_user(const char __user *s, size_t count, bool * > > #endif > > -#if LINUX_VERSION_IS_LESS(3,14,0) > +#if LINUX_VERSION_IS_LESS(3,14,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline u32 reciprocal_scale(u32 val, u32 ep_ro) > { > return (u32)(((u64) val * ep_ro) >> 32); > diff --git a/backport/backport-include/linux/ktime.h b/backport/backport-include/linux/ktime.h > index 942729682c42..6ce22657b7f3 100644 > --- a/backport/backport-include/linux/ktime.h > +++ b/backport/backport-include/linux/ktime.h > @@ -4,7 +4,9 @@ > #include <linux/timekeeping.h> > #include <linux/version.h> > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > + > #define ktime_get_raw LINUX_BACKPORT(ktime_get_raw) > extern ktime_t ktime_get_raw(void); > > diff --git a/backport/backport-include/linux/mm.h b/backport/backport-include/linux/mm.h > index 8ff7d6a62330..8b97f98cf830 100644 > --- a/backport/backport-include/linux/mm.h > +++ b/backport/backport-include/linux/mm.h > @@ -12,6 +12,61 @@ > void kvfree(const void *addr); > #endif /* < 3.15 */ > > +#if LINUX_VERSION_IS_LESS(3,20,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > +#define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked) > +long get_user_pages_locked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages, int *locked); > +#define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked) > +long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages); > +#elif LINUX_VERSION_IS_LESS(4,6,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > +static inline > +long backport_get_user_pages_locked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages, int *locked) > +{ > + return get_user_pages_locked(current, current->mm, start, nr_pages, > + write, force, pages, locked); > +} > +#define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked) > + > +static inline > +long backport_get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages) > +{ > + return get_user_pages_unlocked(current, current->mm, start, nr_pages, > + write, force, pages); > +} > +#define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked) > +#endif > + > +#if LINUX_VERSION_IS_LESS(4,6,0) > +static inline > +long backport_get_user_pages(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages, > + struct vm_area_struct **vmas) > +{ > + return get_user_pages(current, current->mm, start, nr_pages, > + write, force, pages, vmas); > +} > +#define get_user_pages LINUX_BACKPORT(get_user_pages) > +#endif > + > +#ifndef FOLL_TRIED > +#define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */ > +#endif > + > +#if LINUX_VERSION_IS_LESS(4,1,9) && \ > + LINUX_VERSION_IS_GEQ(3,6,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > +#define page_is_pfmemalloc LINUX_BACKPORT(page_is_pfmemalloc) > +static inline bool page_is_pfmemalloc(struct page *page) > +{ > + return page->pfmemalloc; > +} > +#endif /* < 4.2 */ > + This block caused problems and is not needed any more, I removed it here: https://git.kernel.org/pub/scm/linux/kernel/git/backports/backports.git/commit/?id=221755b9531d8b3395058a7a6f8a4e3b49783561 Please check if you really need it. > #if LINUX_VERSION_IS_LESS(4,12,0) > #define kvmalloc LINUX_BACKPORT(kvmalloc) > static inline void *kvmalloc(size_t size, gfp_t flags) > diff --git a/backport/backport-include/linux/netdevice.h b/backport/backport-include/linux/netdevice.h > index 76b57e4df067..dd8a103d034d 100644 > --- a/backport/backport-include/linux/netdevice.h > +++ b/backport/backport-include/linux/netdevice.h > @@ -21,7 +21,8 @@ struct inet6_dev; > */ > #include <linux/hardirq.h> > > -#if LINUX_VERSION_IS_LESS(3,14,0) > +#if LINUX_VERSION_IS_LESS(3,14,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /* > * Backports note: if in-kernel support is provided we could then just > * take the kernel's implementation of __dev_kfree_skb_irq() as it requires > @@ -237,7 +238,8 @@ static inline void backport_unregister_netdevice_many(struct list_head *head) > #define napi_alloc_frag(fragsz) netdev_alloc_frag(fragsz) > #endif > > -#if LINUX_VERSION_IS_LESS(3,19,0) > +#if LINUX_VERSION_IS_LESS(3,19,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /* RSS keys are 40 or 52 bytes long */ > #define NETDEV_RSS_KEY_LEN 52 > #define netdev_rss_key_fill LINUX_BACKPORT(netdev_rss_key_fill) > @@ -331,7 +333,8 @@ static inline void netif_tx_napi_add(struct net_device *dev, > #define NETIF_F_CSUM_MASK NETIF_F_ALL_CSUM > #endif > > -#if LINUX_VERSION_IS_LESS(4,7,0) > +#if LINUX_VERSION_IS_LESS(4,7,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define netif_trans_update LINUX_BACKPORT(netif_trans_update) > static inline void netif_trans_update(struct net_device *dev) > { > diff --git a/backport/backport-include/linux/netlink.h b/backport/backport-include/linux/netlink.h > index 0fb8e0f39b7a..f5ff9bc18598 100644 > --- a/backport/backport-include/linux/netlink.h > +++ b/backport/backport-include/linux/netlink.h > @@ -3,7 +3,8 @@ > #include_next <linux/netlink.h> > #include <linux/version.h> > > -#if LINUX_VERSION_IS_LESS(4,14,0) > +#if LINUX_VERSION_IS_LESS(4,14,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > struct nla_bitfield32 { > __u32 value; > __u32 selector; > diff --git a/backport/backport-include/linux/page_ref.h b/backport/backport-include/linux/page_ref.h > index e45734ecd96e..9c62ff2f72bb 100644 > --- a/backport/backport-include/linux/page_ref.h > +++ b/backport/backport-include/linux/page_ref.h > @@ -1,7 +1,8 @@ > #ifndef __BP_PAGE_REF_H > #define __BP_PAGE_REF_H > #include <linux/version.h> > -#if LINUX_VERSION_IS_GEQ(4,6,0) > +#if LINUX_VERSION_IS_GEQ(4,6,0) || \ > + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > #include_next <linux/page_ref.h> > #else > static inline void page_ref_inc(struct page *page) > diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h > index 1cc5f28192bb..377e9f99e5a7 100644 > --- a/backport/backport-include/linux/pci.h > +++ b/backport/backport-include/linux/pci.h > @@ -210,7 +210,8 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev, > #if LINUX_VERSION_IS_LESS(4,9,0) && \ > !LINUX_VERSION_IN_RANGE(3,12,69, 3,13,0) && \ > !LINUX_VERSION_IN_RANGE(4,4,37, 4,5,0) && \ > - !LINUX_VERSION_IN_RANGE(4,8,13, 4,9,0) > + !LINUX_VERSION_IN_RANGE(4,8,13, 4,9,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > > static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev) > { > diff --git a/backport/backport-include/linux/percpu.h b/backport/backport-include/linux/percpu.h > index 10be03cba795..16f3656f1ad9 100644 > --- a/backport/backport-include/linux/percpu.h > +++ b/backport/backport-include/linux/percpu.h > @@ -5,7 +5,8 @@ > #define __BACKPORT_PERCPU_H > #include_next <linux/percpu.h> > > -#if LINUX_VERSION_IS_LESS(3,18,0) > +#if LINUX_VERSION_IS_LESS(3,18,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline void __percpu *__alloc_gfp_warn(void) > { > WARN(1, "Cannot backport alloc_percpu_gfp"); > diff --git a/backport/backport-include/linux/pm_runtime.h b/backport/backport-include/linux/pm_runtime.h > index e16cd30bf5c7..0e77292f53ea 100644 > --- a/backport/backport-include/linux/pm_runtime.h > +++ b/backport/backport-include/linux/pm_runtime.h > @@ -16,7 +16,8 @@ static inline bool pm_runtime_active(struct device *dev) { return true; } > > #endif /* LINUX_VERSION_IS_LESS(3,9,0) */ > > -#if LINUX_VERSION_IS_LESS(3,15,0) > +#if LINUX_VERSION_IS_LESS(3,15,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline int pm_runtime_force_suspend(struct device *dev) > { > #ifdef CONFIG_PM > diff --git a/backport/backport-include/linux/property.h b/backport/backport-include/linux/property.h > index a0d7bed12af3..cef521c07863 100644 > --- a/backport/backport-include/linux/property.h > +++ b/backport/backport-include/linux/property.h > @@ -1,7 +1,8 @@ > #ifndef __BACKPORT_LINUX_PROPERTY_H_ > #define __BACKPORT_LINUX_PROPERTY_H_ > #include <linux/version.h> > -#if LINUX_VERSION_IS_GEQ(3,18,17) > +#if LINUX_VERSION_IS_GEQ(3,18,17) || \ > + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > #include_next <linux/property.h> > #endif > > diff --git a/backport/backport-include/linux/rtnetlink.h b/backport/backport-include/linux/rtnetlink.h > index 59beffa8316a..5b9eea64b7e6 100644 > --- a/backport/backport-include/linux/rtnetlink.h > +++ b/backport/backport-include/linux/rtnetlink.h > @@ -19,7 +19,8 @@ > #endif > > #if LINUX_VERSION_IS_LESS(3,13,0) && \ > - !defined(CONFIG_PROVE_LOCKING) > + !defined(CONFIG_PROVE_LOCKING) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline bool lockdep_rtnl_is_held(void) > { > return true; > diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h > index 42b048ad14bf..8af34146432e 100644 > --- a/backport/backport-include/linux/skbuff.h > +++ b/backport/backport-include/linux/skbuff.h > @@ -300,7 +300,8 @@ int skb_ensure_writable(struct sk_buff *skb, int write_len); > > #endif /* LINUX_VERSION_IS_LESS(3,19,0) */ > > -#if LINUX_VERSION_IS_LESS(4,2,0) > +#if LINUX_VERSION_IS_LESS(4,2,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline void skb_free_frag(void *data) > { > put_page(virt_to_head_page(data)); > @@ -329,7 +330,8 @@ static inline u32 skb_get_hash_perturb(struct sk_buff *skb, u32 key) > #endif /* LINUX_VERSION_IS_LESS(3,3,0) */ > #endif /* LINUX_VERSION_IS_LESS(4,2,0) */ > > -#if LINUX_VERSION_IS_LESS(4,13,0) > +#if LINUX_VERSION_IS_LESS(4,13,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline void *backport_skb_put(struct sk_buff *skb, unsigned int len) > { > return skb_put(skb, len); > diff --git a/backport/backport-include/linux/time.h b/backport/backport-include/linux/time.h > index 3191047dcfbc..c3a902ebd268 100644 > --- a/backport/backport-include/linux/time.h > +++ b/backport/backport-include/linux/time.h > @@ -1,5 +1,11 @@ > #ifndef __BACKPORT_LINUX_TIME_H > #define __BACKPORT_LINUX_TIME_H > + > +#if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > +#include_next <linux/time64.h> > +#include <uapi/linux/time.h> > +#endif > + Something is strange with the time header file handling. > #include_next <linux/time.h> > > #include <linux/time64.h> > diff --git a/backport/backport-include/linux/time64.h b/backport/backport-include/linux/time64.h > index 49805da9dfce..62a7a1947f48 100644 > --- a/backport/backport-include/linux/time64.h > +++ b/backport/backport-include/linux/time64.h > @@ -6,7 +6,8 @@ > #include <linux/time.h> > #endif > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define timespec64_equal timespec_equal > #define timespec64_compare timespec_compare > #define set_normalized_timespec64 set_normalized_timespec > diff --git a/backport/backport-include/linux/timekeeping.h b/backport/backport-include/linux/timekeeping.h > index 25ceaf3eec77..3f4a211721b2 100644 > --- a/backport/backport-include/linux/timekeeping.h > +++ b/backport/backport-include/linux/timekeeping.h > @@ -3,11 +3,13 @@ > #include <linux/version.h> > #include <linux/types.h> > > -#if LINUX_VERSION_IS_GEQ(3,17,0) > +#if LINUX_VERSION_IS_GEQ(3,17,0) || \ > + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > #include_next <linux/timekeeping.h> > #endif > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define ktime_get_ns LINUX_BACKPORT(ktime_get_ns) > extern ktime_t ktime_get(void); > #define ktime_get_ns LINUX_BACKPORT(ktime_get_ns) > @@ -54,14 +56,16 @@ static inline time64_t ktime_get_real_seconds(void) > } > #endif > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline void ktime_get_ts64(struct timespec64 *ts) > { > ktime_get_ts(ts); > } > #endif > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /* This was introduced in 4.15, but we only need it in the > * ktime_get_raw_ts64 backport() for < 3.17. > */ > @@ -83,7 +87,8 @@ static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) > #endif > #endif /* < 3.17 */ > > -#if LINUX_VERSION_IS_LESS(4,18,0) > +#if LINUX_VERSION_IS_LESS(4,18,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define ktime_get_raw_ts64 LINUX_BACKPORT(ktime_get_raw_ts64) > static inline void ktime_get_raw_ts64(struct timespec64 *ts) > { > diff --git a/backport/backport-include/linux/u64_stats_sync.h b/backport/backport-include/linux/u64_stats_sync.h > index 251373a74139..33278d509863 100644 > --- a/backport/backport-include/linux/u64_stats_sync.h > +++ b/backport/backport-include/linux/u64_stats_sync.h > @@ -115,7 +115,8 @@ static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, > #endif /* LINUX_VERSION_IS_GEQ(3,6,0) */ > > #if LINUX_VERSION_IS_LESS(3,15,0) && \ > - !(LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) > + !(LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp) > { > #if BITS_PER_LONG==32 && defined(CONFIG_SMP) > diff --git a/backport/backport-include/linux/uuid.h b/backport/backport-include/linux/uuid.h > index bc6fbe17cb08..69f7d8c8b733 100644 > --- a/backport/backport-include/linux/uuid.h > +++ b/backport/backport-include/linux/uuid.h > @@ -11,7 +11,8 @@ > #define UUID_STRING_LEN 36 > #endif > > -#if LINUX_VERSION_IS_LESS(4,13,0) > +#if LINUX_VERSION_IS_LESS(4,13,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define guid_t uuid_le > #define uuid_t uuid_be > > diff --git a/backport/backport-include/linux/wait.h b/backport/backport-include/linux/wait.h > index 15a674cfe019..fc5b52c4d457 100644 > --- a/backport/backport-include/linux/wait.h > +++ b/backport/backport-include/linux/wait.h > @@ -2,7 +2,8 @@ > #define __BACKPORT_LINUX_WAIT_H > #include_next <linux/wait.h> > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > extern int bit_wait(void *); > extern int bit_wait_io(void *); > > diff --git a/backport/backport-include/net/genetlink.h b/backport/backport-include/net/genetlink.h > index 747b6dac2df5..e6b78e02afe3 100644 > --- a/backport/backport-include/net/genetlink.h > +++ b/backport/backport-include/net/genetlink.h > @@ -27,7 +27,8 @@ static inline int genl_err_attr(struct genl_info *info, int err, > /* this is for patches we apply */ > static inline struct netlink_ext_ack *genl_info_extack(struct genl_info *info) > { > -#if LINUX_VERSION_IS_GEQ(4,12,0) > +#if LINUX_VERSION_IS_GEQ(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > return info->extack; > #else > return info->userhdr; > diff --git a/backport/backport-include/net/iw_handler.h b/backport/backport-include/net/iw_handler.h > index 84d63b30953e..f908446661c4 100644 > --- a/backport/backport-include/net/iw_handler.h > +++ b/backport/backport-include/net/iw_handler.h > @@ -2,7 +2,8 @@ > #define __BACKPORT_IW_HANDLER_H > #include_next <net/iw_handler.h> > > -#if LINUX_VERSION_IS_LESS(4,1,0) > +#if LINUX_VERSION_IS_LESS(4,1,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline char * > iwe_stream_add_event_check(struct iw_request_info *info, char *stream, > char *ends, struct iw_event *iwe, int event_len) > diff --git a/backport/backport-include/net/net_namespace.h b/backport/backport-include/net/net_namespace.h > index 1e84297c9476..e8438cbcd4df 100644 > --- a/backport/backport-include/net/net_namespace.h > +++ b/backport/backport-include/net/net_namespace.h > @@ -14,7 +14,8 @@ static inline struct net *get_net_ns_by_fd(int fd) > } > #endif > > -#if LINUX_VERSION_IS_LESS(4,1,0) > +#if LINUX_VERSION_IS_LESS(4,1,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > typedef struct { > #ifdef CONFIG_NET_NS > struct net *net; > diff --git a/backport/backport-include/net/netlink.h b/backport/backport-include/net/netlink.h > index b2045e44737a..bc24adfb4d63 100644 > --- a/backport/backport-include/net/netlink.h > +++ b/backport/backport-include/net/netlink.h > @@ -557,7 +557,8 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value) > #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) > #endif > > -#if LINUX_VERSION_IS_LESS(4,1,0) > +#if LINUX_VERSION_IS_LESS(4,1,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > #define nla_put_in_addr LINUX_BACKPORT(nla_put_in_addr) > static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype, > __be32 addr) > @@ -706,7 +707,8 @@ static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value, > } > #endif /* < 4.7 */ > > -#if LINUX_VERSION_IS_LESS(4,10,0) > +#if LINUX_VERSION_IS_LESS(4,10,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > /** > * nla_memdup - duplicate attribute memory (kmemdup) > * @src: netlink attribute to duplicate from > diff --git a/backport/compat/backport-3.11.c b/backport/compat/backport-3.11.c > index 7f9ff3419344..a3d4ea54e3eb 100644 > --- a/backport/compat/backport-3.11.c > +++ b/backport/compat/backport-3.11.c > @@ -11,6 +11,7 @@ > #include <linux/module.h> > #include <linux/scatterlist.h> > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static bool sg_miter_get_next_page(struct sg_mapping_iter *miter) > { > if (!miter->__remaining) { > @@ -122,3 +123,4 @@ size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf, > return offset; > } > EXPORT_SYMBOL_GPL(sg_copy_buffer); > +#endif > diff --git a/backport/compat/backport-3.17.c b/backport/compat/backport-3.17.c > index bf6027cbeb5e..adabec1b5367 100644 > --- a/backport/compat/backport-3.17.c > +++ b/backport/compat/backport-3.17.c > @@ -15,6 +15,7 @@ > #include <linux/jiffies.h> > #include <linux/moduleparam.h> > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > int bit_wait(void *word) > { > schedule(); > @@ -28,6 +29,7 @@ int bit_wait_io(void *word) > return 0; > } > EXPORT_SYMBOL_GPL(bit_wait_io); > +#endif > > /** > * ktime_get_raw - Returns the raw monotonic time in ktime_t format > diff --git a/backport/compat/backport-3.19.c b/backport/compat/backport-3.19.c > index 019644dfab42..ec44130e1dbd 100644 > --- a/backport/compat/backport-3.19.c > +++ b/backport/compat/backport-3.19.c > @@ -83,6 +83,7 @@ int woken_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key) > EXPORT_SYMBOL(woken_wake_function); > #endif > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static u8 netdev_rss_key[NETDEV_RSS_KEY_LEN]; > > void netdev_rss_key_fill(void *buffer, size_t len) > @@ -96,6 +97,7 @@ void netdev_rss_key_fill(void *buffer, size_t len) > #endif > } > EXPORT_SYMBOL_GPL(netdev_rss_key_fill); > +#endif > > #if defined(CONFIG_DEBUG_FS) > struct debugfs_devm_entry { > diff --git a/backport/compat/backport-4.0.c b/backport/compat/backport-4.0.c > index fbe0ddbc3bdd..d6e22d37a91e 100644 > --- a/backport/compat/backport-4.0.c > +++ b/backport/compat/backport-4.0.c > @@ -18,6 +18,185 @@ > #include <linux/ftrace_event.h> > #include <asm/unaligned.h> > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > + static __always_inline long __get_user_pages_locked(struct task_struct *tsk, > + struct mm_struct *mm, > + unsigned long start, > + unsigned long nr_pages, > + int write, int force, > + struct page **pages, > + struct vm_area_struct **vmas, > + int *locked, bool notify_drop, > + unsigned int flags) > +{ > + long ret, pages_done; > + bool lock_dropped; > + > + if (locked) { > + /* if VM_FAULT_RETRY can be returned, vmas become invalid */ > + BUG_ON(vmas); > + /* check caller initialized locked */ > + BUG_ON(*locked != 1); > + } > + > + if (pages) > + flags |= FOLL_GET; > + if (write) > + flags |= FOLL_WRITE; > + if (force) > + flags |= FOLL_FORCE; > + > + pages_done = 0; > + lock_dropped = false; > + for (;;) { > + ret = __get_user_pages(tsk, mm, start, nr_pages, flags, pages, > + vmas, locked); > + if (!locked) > + /* VM_FAULT_RETRY couldn't trigger, bypass */ > + return ret; > + > + /* VM_FAULT_RETRY cannot return errors */ > + if (!*locked) { > + BUG_ON(ret < 0); > + BUG_ON(ret >= nr_pages); > + } > + > + if (!pages) > + /* If it's a prefault don't insist harder */ > + return ret; > + > + if (ret > 0) { > + nr_pages -= ret; > + pages_done += ret; > + if (!nr_pages) > + break; > + } > + if (*locked) { > + /* VM_FAULT_RETRY didn't trigger */ > + if (!pages_done) > + pages_done = ret; > + break; > + } > + /* VM_FAULT_RETRY triggered, so seek to the faulting offset */ > + pages += ret; > + start += ret << PAGE_SHIFT; > + > + /* > + * Repeat on the address that fired VM_FAULT_RETRY > + * without FAULT_FLAG_ALLOW_RETRY but with > + * FAULT_FLAG_TRIED. > + */ > + *locked = 1; > + lock_dropped = true; > + down_read(&mm->mmap_sem); > + ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, > + pages, NULL, NULL); > + if (ret != 1) { > + BUG_ON(ret > 1); > + if (!pages_done) > + pages_done = ret; > + break; > + } > + nr_pages--; > + pages_done++; > + if (!nr_pages) > + break; > + pages++; > + start += PAGE_SIZE; > + } > + if (notify_drop && lock_dropped && *locked) { > + /* > + * We must let the caller know we temporarily dropped the lock > + * and so the critical section protected by it was lost. > + */ > + up_read(&mm->mmap_sem); > + *locked = 0; > + } > + return pages_done; > +} > + > +/* > + * We can leverage the VM_FAULT_RETRY functionality in the page fault > + * paths better by using either get_user_pages_locked() or > + * get_user_pages_unlocked(). > + * > + * get_user_pages_locked() is suitable to replace the form: > + * > + * down_read(&mm->mmap_sem); > + * do_something() > + * get_user_pages(tsk, mm, ..., pages, NULL); > + * up_read(&mm->mmap_sem); > + * > + * to: > + * > + * int locked = 1; > + * down_read(&mm->mmap_sem); > + * do_something() > + * get_user_pages_locked(tsk, mm, ..., pages, &locked); > + * if (locked) > + * up_read(&mm->mmap_sem); > + */ > +long get_user_pages_locked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages, > + int *locked) > +{ > + return __get_user_pages_locked(current, current->mm, start, nr_pages, > + write, force, pages, NULL, locked, true, > + FOLL_TOUCH); > +} > +EXPORT_SYMBOL_GPL(get_user_pages_locked); > + > +/* > + * Same as get_user_pages_unlocked(...., FOLL_TOUCH) but it allows to > + * pass additional gup_flags as last parameter (like FOLL_HWPOISON). > + * > + * NOTE: here FOLL_TOUCH is not set implicitly and must be set by the > + * caller if required (just like with __get_user_pages). "FOLL_GET", > + * "FOLL_WRITE" and "FOLL_FORCE" are set implicitly as needed > + * according to the parameters "pages", "write", "force" > + * respectively. > + */ > +static __always_inline long __get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm, > + unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages, > + unsigned int gup_flags) > +{ > + long ret; > + int locked = 1; > + down_read(&mm->mmap_sem); > + ret = __get_user_pages_locked(tsk, mm, start, nr_pages, write, force, > + pages, NULL, &locked, false, gup_flags); > + if (locked) > + up_read(&mm->mmap_sem); > + return ret; > +} > + > +/* > + * get_user_pages_unlocked() is suitable to replace the form: > + * > + * down_read(&mm->mmap_sem); > + * get_user_pages(tsk, mm, ..., pages, NULL); > + * up_read(&mm->mmap_sem); > + * > + * with: > + * > + * get_user_pages_unlocked(tsk, mm, ..., pages); > + * > + * It is functionally equivalent to get_user_pages_fast so > + * get_user_pages_fast should be used instead, if the two parameters > + * "tsk" and "mm" are respectively equal to current and current->mm, > + * or if "force" shall be set to 1 (get_user_pages_fast misses the > + * "force" parameter). > + */ > +long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, > + int write, int force, struct page **pages) > +{ > + return __get_user_pages_unlocked(current, current->mm, start, nr_pages, > + write, force, pages, FOLL_TOUCH); > +} > +EXPORT_SYMBOL_GPL(get_user_pages_unlocked); > +#endif > + Please check if this is needed at all. > /** > * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory > * @buf: data blob to dump > @@ -146,7 +325,8 @@ overflow1: > } > EXPORT_SYMBOL_GPL(hex_dump_to_buffer); > > -#if LINUX_VERSION_IS_LESS(3,17,0) > +#if LINUX_VERSION_IS_LESS(3,17,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static inline unsigned char * > trace_seq_buffer_ptr(struct trace_seq *s) > { > diff --git a/backport/compat/backport-4.2.c b/backport/compat/backport-4.2.c > index b275d349f7eb..85c7d594f05f 100644 > --- a/backport/compat/backport-4.2.c > +++ b/backport/compat/backport-4.2.c > @@ -11,7 +11,8 @@ > #include <crypto/scatterwalk.h> > #include <crypto/aead.h> > > -static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > + static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], Why did you add a space? > struct scatterlist *src, > unsigned int len) > { > @@ -32,6 +33,7 @@ static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], > > return dst; > } > +#endif > > struct aead_old_request { > struct scatterlist srcbuf[2]; > diff --git a/backport/compat/backport-4.4.c b/backport/compat/backport-4.4.c > index 7966e94928e7..1782a03486fb 100644 > --- a/backport/compat/backport-4.4.c > +++ b/backport/compat/backport-4.4.c > @@ -21,7 +21,8 @@ > #include <asm/unaligned.h> > > #ifdef CONFIG_DEBUG_FS > -#if LINUX_VERSION_IS_LESS(4,3,0) > +#if LINUX_VERSION_IS_LESS(4,3,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf, > size_t count, loff_t *ppos) > { > diff --git a/backport/compat/backport-genetlink.c b/backport/compat/backport-genetlink.c > index 4707858990e2..c7f350f6f33e 100644 > --- a/backport/compat/backport-genetlink.c > +++ b/backport/compat/backport-genetlink.c > @@ -17,6 +17,7 @@ > #include <net/netlink.h> > #include <net/sock.h> > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > static const struct genl_family *find_family_real_ops(__genl_const struct genl_ops **ops) > { > const struct genl_family *family; > @@ -33,7 +34,8 @@ static const struct genl_family *find_family_real_ops(__genl_const struct genl_o > return family; > } > > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > enum nlmsgerr_attrs { > NLMSGERR_ATTR_UNUSED, > NLMSGERR_ATTR_MSG, > @@ -154,7 +156,8 @@ static int backport_pre_doit(__genl_const struct genl_ops *ops, > { > const struct genl_family *family = find_family_real_ops(&ops); > int err; > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > struct netlink_ext_ack *extack = kzalloc(sizeof(*extack), GFP_KERNEL); > > if (!extack) > @@ -179,7 +182,8 @@ static int backport_pre_doit(__genl_const struct genl_ops *ops, > if (!err && family->pre_doit) > err = family->pre_doit(ops, skb, info); > > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > if (err) { > /* signal to do nothing */ > extack->__bp_doit = NULL; > @@ -204,7 +208,8 @@ static void backport_post_doit(__genl_const struct genl_ops *ops, > { > const struct genl_family *family = find_family_real_ops(&ops); > > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > if (genl_info_extack(info)->__bp_doit) > #else > if (1) > @@ -212,11 +217,13 @@ static void backport_post_doit(__genl_const struct genl_ops *ops, > if (family->post_doit) > family->post_doit(ops, skb, info); > > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > kfree(__bp_genl_info_userhdr(info)); > #endif > } > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > int backport_genl_register_family(struct genl_family *family) > { > struct genl_ops *ops; > @@ -237,7 +244,8 @@ int backport_genl_register_family(struct genl_family *family) > * memory layout isn't compatible with the old version > */ > for (i = 0; i < family->n_ops; i++) { > -#if LINUX_VERSION_IS_LESS(4,12,0) > +#if LINUX_VERSION_IS_LESS(4,12,0) && \ > + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > if (ops[i].doit) > ops[i].doit = extack_doit; > #endif > @@ -311,6 +319,7 @@ int backport_genl_unregister_family(struct genl_family *family) > return __real_backport_genl_unregister_family(&family->family); > } > EXPORT_SYMBOL_GPL(backport_genl_unregister_family); > +#endif > > #define INVALID_GROUP 0xffffffff > > @@ -441,3 +450,4 @@ int backport_genlmsg_multicast_allns(const struct genl_family *family, > return genlmsg_mcast(skb, portid, group, flags); > } > EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); > +#endif /* RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) */ Please check again if all these ifdefs for redhat are needed in this function. It looks like there are some bigger ifdes around most of the code in here. > diff --git a/patches/0028-select_queue/mac80211.patch b/patches/0028-select_queue/mac80211.patch > index f488589dd379..45cf0faa09f4 100644 > --- a/patches/0028-select_queue/mac80211.patch > +++ b/patches/0028-select_queue/mac80211.patch > @@ -1,6 +1,6 @@ > --- a/net/mac80211/iface.c > +++ b/net/mac80211/iface.c > -@@ -1128,9 +1128,29 @@ static void ieee80211_uninit(struct net_ > +@@ -1128,9 +1128,30 @@ static void ieee80211_uninit(struct net_ > ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev)); > } > > @@ -14,7 +14,8 @@ > + struct net_device *sb_dev, > + select_queue_fallback_t fallback) > +#elif LINUX_VERSION_IS_GEQ(3,14,0) || \ > -+ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) > ++ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) || \ > ++ RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > +static u16 ieee80211_netdev_select_queue(struct net_device *dev, > + struct sk_buff *skb, > + void *accel_priv, > @@ -30,7 +31,7 @@ > { > return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); > } > -@@ -1173,9 +1193,29 @@ static const struct net_device_ops ieee8 > +@@ -1173,9 +1193,30 @@ static const struct net_device_ops ieee8 > .ndo_get_stats64 = ieee80211_get_stats64, > }; > > @@ -44,7 +45,8 @@ > + struct net_device *sb_dev, > + select_queue_fallback_t fallback) > +#elif LINUX_VERSION_IS_GEQ(3,14,0) || \ > -+ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) > ++ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) || \ > ++ RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > +static u16 ieee80211_monitor_select_queue(struct net_device *dev, > + struct sk_buff *skb, > + void *accel_priv, > diff --git a/patches/0073-netdevice-mtu-range.cocci b/patches/0073-netdevice-mtu-range.cocci > index 7a4b65322803..7f902c7a09eb 100644 > --- a/patches/0073-netdevice-mtu-range.cocci > +++ b/patches/0073-netdevice-mtu-range.cocci > @@ -73,7 +73,7 @@ func(...) { > constant r1.e1,r1.e2; > identifier r.OPS; > @@ > -+#if LINUX_VERSION_IS_LESS(4,10,0) > ++#if LINUX_VERSION_IS_LESS(4,10,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > + static int __change_mtu(struct net_device *ndev, int new_mtu) > + { > + if (new_mtu < e1 || new_mtu > e2) > @@ -92,7 +92,7 @@ identifier OPS; > @@ > > struct net_device_ops OPS = { > -+#if LINUX_VERSION_IS_LESS(4,10,0) > ++#if LINUX_VERSION_IS_LESS(4,10,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > + .ndo_change_mtu = __change_mtu, > +#endif > ... > diff --git a/patches/0075-ndo-stats-64.cocci b/patches/0075-ndo-stats-64.cocci > index 8971a97c7209..f23059f3ba10 100644 > --- a/patches/0075-ndo-stats-64.cocci > +++ b/patches/0075-ndo-stats-64.cocci > @@ -5,7 +5,7 @@ fresh identifier stats64_fn_wrap = "bp_" ## stats64_fn; > position p; > @@ > struct net_device_ops OPS@p = { > -+#if LINUX_VERSION_IS_GEQ(4,11,0) > ++#if LINUX_VERSION_IS_GEQ(4,11,0) || RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > .ndo_get_stats64 = stats64_fn, > +#else > + .ndo_get_stats64 = stats64_fn_wrap, > @@ -17,7 +17,7 @@ identifier r.stats64_fn_wrap; > identifier r.stats64_fn; > @@ > void stats64_fn(...) {...} > -+#if LINUX_VERSION_IS_LESS(4,11,0) > ++#if LINUX_VERSION_IS_LESS(4,11,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > +/* Just declare it here to keep sparse happy */ > +struct rtnl_link_stats64 * > +stats64_fn_wrap(struct net_device *dev, >
On Sun, 2020-02-23 at 23:24 +0100, Hauke Mehrtens wrote: > On 2/21/20 9:56 AM, Johannes Berg wrote: > > From: Luca Coelho <luciano.coelho@intel.com> > > > > RHEL 7.6 uses kernel v3.10 with a lot of backports from newer > > kernels. This causes compilation to break in many places when the > > backports project is used. To solve the issue, check for RHEL release > > code 7.6 where appropriate. This doesn't take into consideration > > lower versions of the kernel (i.e. < 7.6), because it's very difficult > > to find the information about when each feature was backported. > > > > type=maint > > ticket=none Good catch :) Did you reply below anything else? I didn't read past the long quote ... johannes -- To unsubscribe from this list: send the line "unsubscribe backports" in
On 2/24/20 9:40 AM, Johannes Berg wrote: > On Sun, 2020-02-23 at 23:24 +0100, Hauke Mehrtens wrote: >> On 2/21/20 9:56 AM, Johannes Berg wrote: >>> From: Luca Coelho <luciano.coelho@intel.com> >>> >>> RHEL 7.6 uses kernel v3.10 with a lot of backports from newer >>> kernels. This causes compilation to break in many places when the >>> backports project is used. To solve the issue, check for RHEL release >>> code 7.6 where appropriate. This doesn't take into consideration >>> lower versions of the kernel (i.e. < 7.6), because it's very difficult >>> to find the information about when each feature was backported. >>> >>> type=maint >>> ticket=none > > Good catch :) I saw this in multiple of these patches. > Did you reply below anything else? I didn't read past the long quote ... There are some other comments in this patch. Hauke
On Sun, 2020-02-23 at 23:24 +0100, Hauke Mehrtens wrote: > > +++ b/backport/backport-include/linux/time.h > > @@ -1,5 +1,11 @@ > > #ifndef __BACKPORT_LINUX_TIME_H > > #define __BACKPORT_LINUX_TIME_H > > + > > +#if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) > > +#include_next <linux/time64.h> > > +#include <uapi/linux/time.h> > > +#endif > > + > > Something is strange with the time header file handling. Too many changes in this area, I guess ;-) (I'd appreciate if you trimmed your quoting a bit, it's hard to find your responses in the pages-long text) > > +EXPORT_SYMBOL_GPL(get_user_pages_unlocked); > > +#endif > > + > > Please check if this is needed at all. I guess we can > > -static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], > > +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) > > + static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], > > Why did you add a space? Heh. > > @@ -441,3 +450,4 @@ int backport_genlmsg_multicast_allns(const struct genl_family *family, > > return genlmsg_mcast(skb, portid, group, flags); > > } > > EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); > > +#endif /* RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) */ > > Please check again if all these ifdefs for redhat are needed in this > function. It looks like there are some bigger ifdes around most of the > code in here. This stuff is very tricky, and they tend to backport pieces of it ... johannes -- To unsubscribe from this list: send the line "unsubscribe backports" in
diff --git a/backport/backport-include/linux/bp-devcoredump.h b/backport/backport-include/linux/bp-devcoredump.h index 1e4abf646d65..8826cc1fee4b 100644 --- a/backport/backport-include/linux/bp-devcoredump.h +++ b/backport/backport-include/linux/bp-devcoredump.h @@ -7,7 +7,8 @@ * 4.6, outside that we can let our BPAUTO mechanism handle it. */ #if (LINUX_VERSION_IS_GEQ(3,18,0) && \ - LINUX_VERSION_IS_LESS(4,7,0)) + LINUX_VERSION_IS_LESS(4,7,0)) || \ + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) static inline void backport_dev_coredumpm(struct device *dev, struct module *owner, void *data, size_t datalen, gfp_t gfp, diff --git a/backport/backport-include/linux/etherdevice.h b/backport/backport-include/linux/etherdevice.h index a00e66608eae..6bb7467c4ce1 100644 --- a/backport/backport-include/linux/etherdevice.h +++ b/backport/backport-include/linux/etherdevice.h @@ -80,7 +80,8 @@ extern int eth_prepare_mac_addr_change(struct net_device *dev, void *p); extern void eth_commit_mac_addr_change(struct net_device *dev, void *p); #endif /* < 3.9 */ -#if LINUX_VERSION_IS_LESS(3,12,0) +#if LINUX_VERSION_IS_LESS(3,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /** * eth_hw_addr_inherit - Copy dev_addr from another net_device * @dst: pointer to net_device to copy dev_addr to @@ -193,7 +194,8 @@ static inline int eth_skb_pad(struct sk_buff *skb) } #endif /* LINUX_VERSION_IS_LESS(3,19,0) */ -#if LINUX_VERSION_IS_LESS(4,11,0) +#if LINUX_VERSION_IS_LESS(4,11,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /** * ether_addr_to_u64 - Convert an Ethernet address into a u64 value. * @addr: Pointer to a six-byte array containing the Ethernet address diff --git a/backport/backport-include/linux/firmware.h b/backport/backport-include/linux/firmware.h index b5bc16befb85..9b2c01b2d8a5 100644 --- a/backport/backport-include/linux/firmware.h +++ b/backport/backport-include/linux/firmware.h @@ -2,10 +2,12 @@ #define __BACKPORT_LINUX_FIRMWARE_H #include_next <linux/firmware.h> -#if LINUX_VERSION_IS_LESS(3,14,0) +#if LINUX_VERSION_IS_LESS(3,14,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define request_firmware_direct(fw, name, device) request_firmware(fw, name, device) #endif -#if LINUX_VERSION_IS_LESS(4,18,0) +#if LINUX_VERSION_IS_LESS(4,18,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define firmware_request_nowarn(fw, name, device) request_firmware(fw, name, device) #endif diff --git a/backport/backport-include/linux/jiffies.h b/backport/backport-include/linux/jiffies.h index bbadcc8cd27e..caef7db30004 100644 --- a/backport/backport-include/linux/jiffies.h +++ b/backport/backport-include/linux/jiffies.h @@ -1,5 +1,10 @@ #ifndef __BACKPORT_LNIUX_JIFFIES_H #define __BACKPORT_LNIUX_JIFFIES_H + +#ifndef NSEC_PER_SEC +#define NSEC_PER_SEC 1000000000L +#endif + #include_next <linux/jiffies.h> #ifndef time_is_before_jiffies diff --git a/backport/backport-include/linux/kernel.h b/backport/backport-include/linux/kernel.h index f508166340f5..bf0889737497 100644 --- a/backport/backport-include/linux/kernel.h +++ b/backport/backport-include/linux/kernel.h @@ -207,7 +207,8 @@ int __must_check kstrtobool_from_user(const char __user *s, size_t count, bool * #endif -#if LINUX_VERSION_IS_LESS(3,14,0) +#if LINUX_VERSION_IS_LESS(3,14,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline u32 reciprocal_scale(u32 val, u32 ep_ro) { return (u32)(((u64) val * ep_ro) >> 32); diff --git a/backport/backport-include/linux/ktime.h b/backport/backport-include/linux/ktime.h index 942729682c42..6ce22657b7f3 100644 --- a/backport/backport-include/linux/ktime.h +++ b/backport/backport-include/linux/ktime.h @@ -4,7 +4,9 @@ #include <linux/timekeeping.h> #include <linux/version.h> -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) + #define ktime_get_raw LINUX_BACKPORT(ktime_get_raw) extern ktime_t ktime_get_raw(void); diff --git a/backport/backport-include/linux/mm.h b/backport/backport-include/linux/mm.h index 8ff7d6a62330..8b97f98cf830 100644 --- a/backport/backport-include/linux/mm.h +++ b/backport/backport-include/linux/mm.h @@ -12,6 +12,61 @@ void kvfree(const void *addr); #endif /* < 3.15 */ +#if LINUX_VERSION_IS_LESS(3,20,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) +#define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked) +long get_user_pages_locked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages, int *locked); +#define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked) +long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages); +#elif LINUX_VERSION_IS_LESS(4,6,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) +static inline +long backport_get_user_pages_locked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages, int *locked) +{ + return get_user_pages_locked(current, current->mm, start, nr_pages, + write, force, pages, locked); +} +#define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked) + +static inline +long backport_get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages) +{ + return get_user_pages_unlocked(current, current->mm, start, nr_pages, + write, force, pages); +} +#define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked) +#endif + +#if LINUX_VERSION_IS_LESS(4,6,0) +static inline +long backport_get_user_pages(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages, + struct vm_area_struct **vmas) +{ + return get_user_pages(current, current->mm, start, nr_pages, + write, force, pages, vmas); +} +#define get_user_pages LINUX_BACKPORT(get_user_pages) +#endif + +#ifndef FOLL_TRIED +#define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */ +#endif + +#if LINUX_VERSION_IS_LESS(4,1,9) && \ + LINUX_VERSION_IS_GEQ(3,6,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) +#define page_is_pfmemalloc LINUX_BACKPORT(page_is_pfmemalloc) +static inline bool page_is_pfmemalloc(struct page *page) +{ + return page->pfmemalloc; +} +#endif /* < 4.2 */ + #if LINUX_VERSION_IS_LESS(4,12,0) #define kvmalloc LINUX_BACKPORT(kvmalloc) static inline void *kvmalloc(size_t size, gfp_t flags) diff --git a/backport/backport-include/linux/netdevice.h b/backport/backport-include/linux/netdevice.h index 76b57e4df067..dd8a103d034d 100644 --- a/backport/backport-include/linux/netdevice.h +++ b/backport/backport-include/linux/netdevice.h @@ -21,7 +21,8 @@ struct inet6_dev; */ #include <linux/hardirq.h> -#if LINUX_VERSION_IS_LESS(3,14,0) +#if LINUX_VERSION_IS_LESS(3,14,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /* * Backports note: if in-kernel support is provided we could then just * take the kernel's implementation of __dev_kfree_skb_irq() as it requires @@ -237,7 +238,8 @@ static inline void backport_unregister_netdevice_many(struct list_head *head) #define napi_alloc_frag(fragsz) netdev_alloc_frag(fragsz) #endif -#if LINUX_VERSION_IS_LESS(3,19,0) +#if LINUX_VERSION_IS_LESS(3,19,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /* RSS keys are 40 or 52 bytes long */ #define NETDEV_RSS_KEY_LEN 52 #define netdev_rss_key_fill LINUX_BACKPORT(netdev_rss_key_fill) @@ -331,7 +333,8 @@ static inline void netif_tx_napi_add(struct net_device *dev, #define NETIF_F_CSUM_MASK NETIF_F_ALL_CSUM #endif -#if LINUX_VERSION_IS_LESS(4,7,0) +#if LINUX_VERSION_IS_LESS(4,7,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define netif_trans_update LINUX_BACKPORT(netif_trans_update) static inline void netif_trans_update(struct net_device *dev) { diff --git a/backport/backport-include/linux/netlink.h b/backport/backport-include/linux/netlink.h index 0fb8e0f39b7a..f5ff9bc18598 100644 --- a/backport/backport-include/linux/netlink.h +++ b/backport/backport-include/linux/netlink.h @@ -3,7 +3,8 @@ #include_next <linux/netlink.h> #include <linux/version.h> -#if LINUX_VERSION_IS_LESS(4,14,0) +#if LINUX_VERSION_IS_LESS(4,14,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) struct nla_bitfield32 { __u32 value; __u32 selector; diff --git a/backport/backport-include/linux/page_ref.h b/backport/backport-include/linux/page_ref.h index e45734ecd96e..9c62ff2f72bb 100644 --- a/backport/backport-include/linux/page_ref.h +++ b/backport/backport-include/linux/page_ref.h @@ -1,7 +1,8 @@ #ifndef __BP_PAGE_REF_H #define __BP_PAGE_REF_H #include <linux/version.h> -#if LINUX_VERSION_IS_GEQ(4,6,0) +#if LINUX_VERSION_IS_GEQ(4,6,0) || \ + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) #include_next <linux/page_ref.h> #else static inline void page_ref_inc(struct page *page) diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h index 1cc5f28192bb..377e9f99e5a7 100644 --- a/backport/backport-include/linux/pci.h +++ b/backport/backport-include/linux/pci.h @@ -210,7 +210,8 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev, #if LINUX_VERSION_IS_LESS(4,9,0) && \ !LINUX_VERSION_IN_RANGE(3,12,69, 3,13,0) && \ !LINUX_VERSION_IN_RANGE(4,4,37, 4,5,0) && \ - !LINUX_VERSION_IN_RANGE(4,8,13, 4,9,0) + !LINUX_VERSION_IN_RANGE(4,8,13, 4,9,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev) { diff --git a/backport/backport-include/linux/percpu.h b/backport/backport-include/linux/percpu.h index 10be03cba795..16f3656f1ad9 100644 --- a/backport/backport-include/linux/percpu.h +++ b/backport/backport-include/linux/percpu.h @@ -5,7 +5,8 @@ #define __BACKPORT_PERCPU_H #include_next <linux/percpu.h> -#if LINUX_VERSION_IS_LESS(3,18,0) +#if LINUX_VERSION_IS_LESS(3,18,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline void __percpu *__alloc_gfp_warn(void) { WARN(1, "Cannot backport alloc_percpu_gfp"); diff --git a/backport/backport-include/linux/pm_runtime.h b/backport/backport-include/linux/pm_runtime.h index e16cd30bf5c7..0e77292f53ea 100644 --- a/backport/backport-include/linux/pm_runtime.h +++ b/backport/backport-include/linux/pm_runtime.h @@ -16,7 +16,8 @@ static inline bool pm_runtime_active(struct device *dev) { return true; } #endif /* LINUX_VERSION_IS_LESS(3,9,0) */ -#if LINUX_VERSION_IS_LESS(3,15,0) +#if LINUX_VERSION_IS_LESS(3,15,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline int pm_runtime_force_suspend(struct device *dev) { #ifdef CONFIG_PM diff --git a/backport/backport-include/linux/property.h b/backport/backport-include/linux/property.h index a0d7bed12af3..cef521c07863 100644 --- a/backport/backport-include/linux/property.h +++ b/backport/backport-include/linux/property.h @@ -1,7 +1,8 @@ #ifndef __BACKPORT_LINUX_PROPERTY_H_ #define __BACKPORT_LINUX_PROPERTY_H_ #include <linux/version.h> -#if LINUX_VERSION_IS_GEQ(3,18,17) +#if LINUX_VERSION_IS_GEQ(3,18,17) || \ + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) #include_next <linux/property.h> #endif diff --git a/backport/backport-include/linux/rtnetlink.h b/backport/backport-include/linux/rtnetlink.h index 59beffa8316a..5b9eea64b7e6 100644 --- a/backport/backport-include/linux/rtnetlink.h +++ b/backport/backport-include/linux/rtnetlink.h @@ -19,7 +19,8 @@ #endif #if LINUX_VERSION_IS_LESS(3,13,0) && \ - !defined(CONFIG_PROVE_LOCKING) + !defined(CONFIG_PROVE_LOCKING) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline bool lockdep_rtnl_is_held(void) { return true; diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h index 42b048ad14bf..8af34146432e 100644 --- a/backport/backport-include/linux/skbuff.h +++ b/backport/backport-include/linux/skbuff.h @@ -300,7 +300,8 @@ int skb_ensure_writable(struct sk_buff *skb, int write_len); #endif /* LINUX_VERSION_IS_LESS(3,19,0) */ -#if LINUX_VERSION_IS_LESS(4,2,0) +#if LINUX_VERSION_IS_LESS(4,2,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline void skb_free_frag(void *data) { put_page(virt_to_head_page(data)); @@ -329,7 +330,8 @@ static inline u32 skb_get_hash_perturb(struct sk_buff *skb, u32 key) #endif /* LINUX_VERSION_IS_LESS(3,3,0) */ #endif /* LINUX_VERSION_IS_LESS(4,2,0) */ -#if LINUX_VERSION_IS_LESS(4,13,0) +#if LINUX_VERSION_IS_LESS(4,13,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline void *backport_skb_put(struct sk_buff *skb, unsigned int len) { return skb_put(skb, len); diff --git a/backport/backport-include/linux/time.h b/backport/backport-include/linux/time.h index 3191047dcfbc..c3a902ebd268 100644 --- a/backport/backport-include/linux/time.h +++ b/backport/backport-include/linux/time.h @@ -1,5 +1,11 @@ #ifndef __BACKPORT_LINUX_TIME_H #define __BACKPORT_LINUX_TIME_H + +#if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) +#include_next <linux/time64.h> +#include <uapi/linux/time.h> +#endif + #include_next <linux/time.h> #include <linux/time64.h> diff --git a/backport/backport-include/linux/time64.h b/backport/backport-include/linux/time64.h index 49805da9dfce..62a7a1947f48 100644 --- a/backport/backport-include/linux/time64.h +++ b/backport/backport-include/linux/time64.h @@ -6,7 +6,8 @@ #include <linux/time.h> #endif -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define timespec64_equal timespec_equal #define timespec64_compare timespec_compare #define set_normalized_timespec64 set_normalized_timespec diff --git a/backport/backport-include/linux/timekeeping.h b/backport/backport-include/linux/timekeeping.h index 25ceaf3eec77..3f4a211721b2 100644 --- a/backport/backport-include/linux/timekeeping.h +++ b/backport/backport-include/linux/timekeeping.h @@ -3,11 +3,13 @@ #include <linux/version.h> #include <linux/types.h> -#if LINUX_VERSION_IS_GEQ(3,17,0) +#if LINUX_VERSION_IS_GEQ(3,17,0) || \ + RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) #include_next <linux/timekeeping.h> #endif -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define ktime_get_ns LINUX_BACKPORT(ktime_get_ns) extern ktime_t ktime_get(void); #define ktime_get_ns LINUX_BACKPORT(ktime_get_ns) @@ -54,14 +56,16 @@ static inline time64_t ktime_get_real_seconds(void) } #endif -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline void ktime_get_ts64(struct timespec64 *ts) { ktime_get_ts(ts); } #endif -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /* This was introduced in 4.15, but we only need it in the * ktime_get_raw_ts64 backport() for < 3.17. */ @@ -83,7 +87,8 @@ static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) #endif #endif /* < 3.17 */ -#if LINUX_VERSION_IS_LESS(4,18,0) +#if LINUX_VERSION_IS_LESS(4,18,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define ktime_get_raw_ts64 LINUX_BACKPORT(ktime_get_raw_ts64) static inline void ktime_get_raw_ts64(struct timespec64 *ts) { diff --git a/backport/backport-include/linux/u64_stats_sync.h b/backport/backport-include/linux/u64_stats_sync.h index 251373a74139..33278d509863 100644 --- a/backport/backport-include/linux/u64_stats_sync.h +++ b/backport/backport-include/linux/u64_stats_sync.h @@ -115,7 +115,8 @@ static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, #endif /* LINUX_VERSION_IS_GEQ(3,6,0) */ #if LINUX_VERSION_IS_LESS(3,15,0) && \ - !(LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) + !(LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp) { #if BITS_PER_LONG==32 && defined(CONFIG_SMP) diff --git a/backport/backport-include/linux/uuid.h b/backport/backport-include/linux/uuid.h index bc6fbe17cb08..69f7d8c8b733 100644 --- a/backport/backport-include/linux/uuid.h +++ b/backport/backport-include/linux/uuid.h @@ -11,7 +11,8 @@ #define UUID_STRING_LEN 36 #endif -#if LINUX_VERSION_IS_LESS(4,13,0) +#if LINUX_VERSION_IS_LESS(4,13,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define guid_t uuid_le #define uuid_t uuid_be diff --git a/backport/backport-include/linux/wait.h b/backport/backport-include/linux/wait.h index 15a674cfe019..fc5b52c4d457 100644 --- a/backport/backport-include/linux/wait.h +++ b/backport/backport-include/linux/wait.h @@ -2,7 +2,8 @@ #define __BACKPORT_LINUX_WAIT_H #include_next <linux/wait.h> -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) extern int bit_wait(void *); extern int bit_wait_io(void *); diff --git a/backport/backport-include/net/genetlink.h b/backport/backport-include/net/genetlink.h index 747b6dac2df5..e6b78e02afe3 100644 --- a/backport/backport-include/net/genetlink.h +++ b/backport/backport-include/net/genetlink.h @@ -27,7 +27,8 @@ static inline int genl_err_attr(struct genl_info *info, int err, /* this is for patches we apply */ static inline struct netlink_ext_ack *genl_info_extack(struct genl_info *info) { -#if LINUX_VERSION_IS_GEQ(4,12,0) +#if LINUX_VERSION_IS_GEQ(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) return info->extack; #else return info->userhdr; diff --git a/backport/backport-include/net/iw_handler.h b/backport/backport-include/net/iw_handler.h index 84d63b30953e..f908446661c4 100644 --- a/backport/backport-include/net/iw_handler.h +++ b/backport/backport-include/net/iw_handler.h @@ -2,7 +2,8 @@ #define __BACKPORT_IW_HANDLER_H #include_next <net/iw_handler.h> -#if LINUX_VERSION_IS_LESS(4,1,0) +#if LINUX_VERSION_IS_LESS(4,1,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline char * iwe_stream_add_event_check(struct iw_request_info *info, char *stream, char *ends, struct iw_event *iwe, int event_len) diff --git a/backport/backport-include/net/net_namespace.h b/backport/backport-include/net/net_namespace.h index 1e84297c9476..e8438cbcd4df 100644 --- a/backport/backport-include/net/net_namespace.h +++ b/backport/backport-include/net/net_namespace.h @@ -14,7 +14,8 @@ static inline struct net *get_net_ns_by_fd(int fd) } #endif -#if LINUX_VERSION_IS_LESS(4,1,0) +#if LINUX_VERSION_IS_LESS(4,1,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) typedef struct { #ifdef CONFIG_NET_NS struct net *net; diff --git a/backport/backport-include/net/netlink.h b/backport/backport-include/net/netlink.h index b2045e44737a..bc24adfb4d63 100644 --- a/backport/backport-include/net/netlink.h +++ b/backport/backport-include/net/netlink.h @@ -557,7 +557,8 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value) #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) #endif -#if LINUX_VERSION_IS_LESS(4,1,0) +#if LINUX_VERSION_IS_LESS(4,1,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) #define nla_put_in_addr LINUX_BACKPORT(nla_put_in_addr) static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype, __be32 addr) @@ -706,7 +707,8 @@ static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value, } #endif /* < 4.7 */ -#if LINUX_VERSION_IS_LESS(4,10,0) +#if LINUX_VERSION_IS_LESS(4,10,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) /** * nla_memdup - duplicate attribute memory (kmemdup) * @src: netlink attribute to duplicate from diff --git a/backport/compat/backport-3.11.c b/backport/compat/backport-3.11.c index 7f9ff3419344..a3d4ea54e3eb 100644 --- a/backport/compat/backport-3.11.c +++ b/backport/compat/backport-3.11.c @@ -11,6 +11,7 @@ #include <linux/module.h> #include <linux/scatterlist.h> +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static bool sg_miter_get_next_page(struct sg_mapping_iter *miter) { if (!miter->__remaining) { @@ -122,3 +123,4 @@ size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf, return offset; } EXPORT_SYMBOL_GPL(sg_copy_buffer); +#endif diff --git a/backport/compat/backport-3.17.c b/backport/compat/backport-3.17.c index bf6027cbeb5e..adabec1b5367 100644 --- a/backport/compat/backport-3.17.c +++ b/backport/compat/backport-3.17.c @@ -15,6 +15,7 @@ #include <linux/jiffies.h> #include <linux/moduleparam.h> +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) int bit_wait(void *word) { schedule(); @@ -28,6 +29,7 @@ int bit_wait_io(void *word) return 0; } EXPORT_SYMBOL_GPL(bit_wait_io); +#endif /** * ktime_get_raw - Returns the raw monotonic time in ktime_t format diff --git a/backport/compat/backport-3.19.c b/backport/compat/backport-3.19.c index 019644dfab42..ec44130e1dbd 100644 --- a/backport/compat/backport-3.19.c +++ b/backport/compat/backport-3.19.c @@ -83,6 +83,7 @@ int woken_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key) EXPORT_SYMBOL(woken_wake_function); #endif +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static u8 netdev_rss_key[NETDEV_RSS_KEY_LEN]; void netdev_rss_key_fill(void *buffer, size_t len) @@ -96,6 +97,7 @@ void netdev_rss_key_fill(void *buffer, size_t len) #endif } EXPORT_SYMBOL_GPL(netdev_rss_key_fill); +#endif #if defined(CONFIG_DEBUG_FS) struct debugfs_devm_entry { diff --git a/backport/compat/backport-4.0.c b/backport/compat/backport-4.0.c index fbe0ddbc3bdd..d6e22d37a91e 100644 --- a/backport/compat/backport-4.0.c +++ b/backport/compat/backport-4.0.c @@ -18,6 +18,185 @@ #include <linux/ftrace_event.h> #include <asm/unaligned.h> +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) + static __always_inline long __get_user_pages_locked(struct task_struct *tsk, + struct mm_struct *mm, + unsigned long start, + unsigned long nr_pages, + int write, int force, + struct page **pages, + struct vm_area_struct **vmas, + int *locked, bool notify_drop, + unsigned int flags) +{ + long ret, pages_done; + bool lock_dropped; + + if (locked) { + /* if VM_FAULT_RETRY can be returned, vmas become invalid */ + BUG_ON(vmas); + /* check caller initialized locked */ + BUG_ON(*locked != 1); + } + + if (pages) + flags |= FOLL_GET; + if (write) + flags |= FOLL_WRITE; + if (force) + flags |= FOLL_FORCE; + + pages_done = 0; + lock_dropped = false; + for (;;) { + ret = __get_user_pages(tsk, mm, start, nr_pages, flags, pages, + vmas, locked); + if (!locked) + /* VM_FAULT_RETRY couldn't trigger, bypass */ + return ret; + + /* VM_FAULT_RETRY cannot return errors */ + if (!*locked) { + BUG_ON(ret < 0); + BUG_ON(ret >= nr_pages); + } + + if (!pages) + /* If it's a prefault don't insist harder */ + return ret; + + if (ret > 0) { + nr_pages -= ret; + pages_done += ret; + if (!nr_pages) + break; + } + if (*locked) { + /* VM_FAULT_RETRY didn't trigger */ + if (!pages_done) + pages_done = ret; + break; + } + /* VM_FAULT_RETRY triggered, so seek to the faulting offset */ + pages += ret; + start += ret << PAGE_SHIFT; + + /* + * Repeat on the address that fired VM_FAULT_RETRY + * without FAULT_FLAG_ALLOW_RETRY but with + * FAULT_FLAG_TRIED. + */ + *locked = 1; + lock_dropped = true; + down_read(&mm->mmap_sem); + ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, + pages, NULL, NULL); + if (ret != 1) { + BUG_ON(ret > 1); + if (!pages_done) + pages_done = ret; + break; + } + nr_pages--; + pages_done++; + if (!nr_pages) + break; + pages++; + start += PAGE_SIZE; + } + if (notify_drop && lock_dropped && *locked) { + /* + * We must let the caller know we temporarily dropped the lock + * and so the critical section protected by it was lost. + */ + up_read(&mm->mmap_sem); + *locked = 0; + } + return pages_done; +} + +/* + * We can leverage the VM_FAULT_RETRY functionality in the page fault + * paths better by using either get_user_pages_locked() or + * get_user_pages_unlocked(). + * + * get_user_pages_locked() is suitable to replace the form: + * + * down_read(&mm->mmap_sem); + * do_something() + * get_user_pages(tsk, mm, ..., pages, NULL); + * up_read(&mm->mmap_sem); + * + * to: + * + * int locked = 1; + * down_read(&mm->mmap_sem); + * do_something() + * get_user_pages_locked(tsk, mm, ..., pages, &locked); + * if (locked) + * up_read(&mm->mmap_sem); + */ +long get_user_pages_locked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages, + int *locked) +{ + return __get_user_pages_locked(current, current->mm, start, nr_pages, + write, force, pages, NULL, locked, true, + FOLL_TOUCH); +} +EXPORT_SYMBOL_GPL(get_user_pages_locked); + +/* + * Same as get_user_pages_unlocked(...., FOLL_TOUCH) but it allows to + * pass additional gup_flags as last parameter (like FOLL_HWPOISON). + * + * NOTE: here FOLL_TOUCH is not set implicitly and must be set by the + * caller if required (just like with __get_user_pages). "FOLL_GET", + * "FOLL_WRITE" and "FOLL_FORCE" are set implicitly as needed + * according to the parameters "pages", "write", "force" + * respectively. + */ +static __always_inline long __get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm, + unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages, + unsigned int gup_flags) +{ + long ret; + int locked = 1; + down_read(&mm->mmap_sem); + ret = __get_user_pages_locked(tsk, mm, start, nr_pages, write, force, + pages, NULL, &locked, false, gup_flags); + if (locked) + up_read(&mm->mmap_sem); + return ret; +} + +/* + * get_user_pages_unlocked() is suitable to replace the form: + * + * down_read(&mm->mmap_sem); + * get_user_pages(tsk, mm, ..., pages, NULL); + * up_read(&mm->mmap_sem); + * + * with: + * + * get_user_pages_unlocked(tsk, mm, ..., pages); + * + * It is functionally equivalent to get_user_pages_fast so + * get_user_pages_fast should be used instead, if the two parameters + * "tsk" and "mm" are respectively equal to current and current->mm, + * or if "force" shall be set to 1 (get_user_pages_fast misses the + * "force" parameter). + */ +long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, + int write, int force, struct page **pages) +{ + return __get_user_pages_unlocked(current, current->mm, start, nr_pages, + write, force, pages, FOLL_TOUCH); +} +EXPORT_SYMBOL_GPL(get_user_pages_unlocked); +#endif + /** * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory * @buf: data blob to dump @@ -146,7 +325,8 @@ overflow1: } EXPORT_SYMBOL_GPL(hex_dump_to_buffer); -#if LINUX_VERSION_IS_LESS(3,17,0) +#if LINUX_VERSION_IS_LESS(3,17,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static inline unsigned char * trace_seq_buffer_ptr(struct trace_seq *s) { diff --git a/backport/compat/backport-4.2.c b/backport/compat/backport-4.2.c index b275d349f7eb..85c7d594f05f 100644 --- a/backport/compat/backport-4.2.c +++ b/backport/compat/backport-4.2.c @@ -11,7 +11,8 @@ #include <crypto/scatterwalk.h> #include <crypto/aead.h> -static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) + static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], struct scatterlist *src, unsigned int len) { @@ -32,6 +33,7 @@ static struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], return dst; } +#endif struct aead_old_request { struct scatterlist srcbuf[2]; diff --git a/backport/compat/backport-4.4.c b/backport/compat/backport-4.4.c index 7966e94928e7..1782a03486fb 100644 --- a/backport/compat/backport-4.4.c +++ b/backport/compat/backport-4.4.c @@ -21,7 +21,8 @@ #include <asm/unaligned.h> #ifdef CONFIG_DEBUG_FS -#if LINUX_VERSION_IS_LESS(4,3,0) +#if LINUX_VERSION_IS_LESS(4,3,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { diff --git a/backport/compat/backport-genetlink.c b/backport/compat/backport-genetlink.c index 4707858990e2..c7f350f6f33e 100644 --- a/backport/compat/backport-genetlink.c +++ b/backport/compat/backport-genetlink.c @@ -17,6 +17,7 @@ #include <net/netlink.h> #include <net/sock.h> +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) static const struct genl_family *find_family_real_ops(__genl_const struct genl_ops **ops) { const struct genl_family *family; @@ -33,7 +34,8 @@ static const struct genl_family *find_family_real_ops(__genl_const struct genl_o return family; } -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) enum nlmsgerr_attrs { NLMSGERR_ATTR_UNUSED, NLMSGERR_ATTR_MSG, @@ -154,7 +156,8 @@ static int backport_pre_doit(__genl_const struct genl_ops *ops, { const struct genl_family *family = find_family_real_ops(&ops); int err; -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) struct netlink_ext_ack *extack = kzalloc(sizeof(*extack), GFP_KERNEL); if (!extack) @@ -179,7 +182,8 @@ static int backport_pre_doit(__genl_const struct genl_ops *ops, if (!err && family->pre_doit) err = family->pre_doit(ops, skb, info); -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) if (err) { /* signal to do nothing */ extack->__bp_doit = NULL; @@ -204,7 +208,8 @@ static void backport_post_doit(__genl_const struct genl_ops *ops, { const struct genl_family *family = find_family_real_ops(&ops); -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) if (genl_info_extack(info)->__bp_doit) #else if (1) @@ -212,11 +217,13 @@ static void backport_post_doit(__genl_const struct genl_ops *ops, if (family->post_doit) family->post_doit(ops, skb, info); -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) kfree(__bp_genl_info_userhdr(info)); #endif } +#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) int backport_genl_register_family(struct genl_family *family) { struct genl_ops *ops; @@ -237,7 +244,8 @@ int backport_genl_register_family(struct genl_family *family) * memory layout isn't compatible with the old version */ for (i = 0; i < family->n_ops; i++) { -#if LINUX_VERSION_IS_LESS(4,12,0) +#if LINUX_VERSION_IS_LESS(4,12,0) && \ + RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) if (ops[i].doit) ops[i].doit = extack_doit; #endif @@ -311,6 +319,7 @@ int backport_genl_unregister_family(struct genl_family *family) return __real_backport_genl_unregister_family(&family->family); } EXPORT_SYMBOL_GPL(backport_genl_unregister_family); +#endif #define INVALID_GROUP 0xffffffff @@ -441,3 +450,4 @@ int backport_genlmsg_multicast_allns(const struct genl_family *family, return genlmsg_mcast(skb, portid, group, flags); } EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); +#endif /* RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) */ diff --git a/patches/0028-select_queue/mac80211.patch b/patches/0028-select_queue/mac80211.patch index f488589dd379..45cf0faa09f4 100644 --- a/patches/0028-select_queue/mac80211.patch +++ b/patches/0028-select_queue/mac80211.patch @@ -1,6 +1,6 @@ --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c -@@ -1128,9 +1128,29 @@ static void ieee80211_uninit(struct net_ +@@ -1128,9 +1128,30 @@ static void ieee80211_uninit(struct net_ ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev)); } @@ -14,7 +14,8 @@ + struct net_device *sb_dev, + select_queue_fallback_t fallback) +#elif LINUX_VERSION_IS_GEQ(3,14,0) || \ -+ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) ++ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) || \ ++ RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) +static u16 ieee80211_netdev_select_queue(struct net_device *dev, + struct sk_buff *skb, + void *accel_priv, @@ -30,7 +31,7 @@ { return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); } -@@ -1173,9 +1193,29 @@ static const struct net_device_ops ieee8 +@@ -1173,9 +1193,30 @@ static const struct net_device_ops ieee8 .ndo_get_stats64 = ieee80211_get_stats64, }; @@ -44,7 +45,8 @@ + struct net_device *sb_dev, + select_queue_fallback_t fallback) +#elif LINUX_VERSION_IS_GEQ(3,14,0) || \ -+ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) ++ (LINUX_VERSION_CODE == KERNEL_VERSION(3,13,11) && UTS_UBUNTU_RELEASE_ABI > 30) || \ ++ RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) +static u16 ieee80211_monitor_select_queue(struct net_device *dev, + struct sk_buff *skb, + void *accel_priv, diff --git a/patches/0073-netdevice-mtu-range.cocci b/patches/0073-netdevice-mtu-range.cocci index 7a4b65322803..7f902c7a09eb 100644 --- a/patches/0073-netdevice-mtu-range.cocci +++ b/patches/0073-netdevice-mtu-range.cocci @@ -73,7 +73,7 @@ func(...) { constant r1.e1,r1.e2; identifier r.OPS; @@ -+#if LINUX_VERSION_IS_LESS(4,10,0) ++#if LINUX_VERSION_IS_LESS(4,10,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) + static int __change_mtu(struct net_device *ndev, int new_mtu) + { + if (new_mtu < e1 || new_mtu > e2) @@ -92,7 +92,7 @@ identifier OPS; @@ struct net_device_ops OPS = { -+#if LINUX_VERSION_IS_LESS(4,10,0) ++#if LINUX_VERSION_IS_LESS(4,10,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) + .ndo_change_mtu = __change_mtu, +#endif ... diff --git a/patches/0075-ndo-stats-64.cocci b/patches/0075-ndo-stats-64.cocci index 8971a97c7209..f23059f3ba10 100644 --- a/patches/0075-ndo-stats-64.cocci +++ b/patches/0075-ndo-stats-64.cocci @@ -5,7 +5,7 @@ fresh identifier stats64_fn_wrap = "bp_" ## stats64_fn; position p; @@ struct net_device_ops OPS@p = { -+#if LINUX_VERSION_IS_GEQ(4,11,0) ++#if LINUX_VERSION_IS_GEQ(4,11,0) || RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,6) .ndo_get_stats64 = stats64_fn, +#else + .ndo_get_stats64 = stats64_fn_wrap, @@ -17,7 +17,7 @@ identifier r.stats64_fn_wrap; identifier r.stats64_fn; @@ void stats64_fn(...) {...} -+#if LINUX_VERSION_IS_LESS(4,11,0) ++#if LINUX_VERSION_IS_LESS(4,11,0) && RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,6) +/* Just declare it here to keep sparse happy */ +struct rtnl_link_stats64 * +stats64_fn_wrap(struct net_device *dev,