diff --git a/backport/Kconfig.sources b/backport/Kconfig.sources
index b4083a6d..93ca3cd8 100644
--- a/backport/Kconfig.sources
+++ b/backport/Kconfig.sources
@@ -4,9 +4,7 @@ source "$BACKPORT_DIR/compat/Kconfig"
 # these are copied from the kernel
 source "$BACKPORT_DIR/net/wireless/Kconfig"
 source "$BACKPORT_DIR/net/mac80211/Kconfig"
-source "$BACKPORT_DIR/net/bluetooth/Kconfig"
 source "$BACKPORT_DIR/drivers/net/wireless/Kconfig"
-source "$BACKPORT_DIR/drivers/net/ethernet/Kconfig"
 source "$BACKPORT_DIR/drivers/net/usb/Kconfig"
 
 source "$BACKPORT_DIR/drivers/ssb/Kconfig"
@@ -14,8 +12,6 @@ source "$BACKPORT_DIR/drivers/bcma/Kconfig"
 
 source "$BACKPORT_DIR/net/nfc/Kconfig"
 
-source "$BACKPORT_DIR/drivers/media/Kconfig"
-
 source "$BACKPORT_DIR/drivers/usb/class/Kconfig"
 
 source "$BACKPORT_DIR/drivers/staging/Kconfig"
diff --git a/backport/Makefile.kernel b/backport/Makefile.kernel
index 6eb62cb9..a8aad0b1 100644
--- a/backport/Makefile.kernel
+++ b/backport/Makefile.kernel
@@ -40,15 +40,11 @@ obj-y += compat/
 obj-$(CPTCFG_CFG80211) += net/wireless/
 obj-$(CPTCFG_MAC80211) += net/mac80211/
 obj-$(CPTCFG_WLAN) += drivers/net/wireless/
-obj-$(CPTCFG_BT) += net/bluetooth/
-obj-$(CPTCFG_BT) += drivers/bluetooth/
 obj-$(CPTCFG_SSB) += drivers/ssb/
 obj-$(CPTCFG_BCMA) += drivers/bcma/
-obj-$(CPTCFG_ETHERNET) += drivers/net/ethernet/
 obj-$(CPTCFG_USB_NET_RNDIS_WLAN) += drivers/net/usb/
 obj-$(CPTCFG_NFC) += net/nfc/
 obj-$(CPTCFG_NFC) += drivers/nfc/
-obj-$(CPTCFG_MEDIA_SUPPORT) += drivers/media/
 
 obj-$(CPTCFG_USB_WDM) += drivers/usb/class/
 obj-$(CPTCFG_USB_USBNET) += drivers/net/usb/
diff --git a/backport/backport-include/linux/freezer.h b/backport/backport-include/linux/freezer.h
deleted file mode 100644
index c6053f30..00000000
--- a/backport/backport-include/linux/freezer.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef __BACKPORT_FREEZER_H_INCLUDED
-#define __BACKPORT_FREEZER_H_INCLUDED
-#include_next <linux/freezer.h>
-
-#ifdef CONFIG_FREEZER
-#if LINUX_VERSION_IS_LESS(3,11,0)
-/*
- * Like schedule_hrtimeout_range(), but should not block the freezer.  Do not
- * call this with locks held.
- */
-#define freezable_schedule_hrtimeout_range LINUX_BACKPORT(freezable_schedule_hrtimeout_range)
-static inline int freezable_schedule_hrtimeout_range(ktime_t *expires,
-		unsigned long delta, const enum hrtimer_mode mode)
-{
-	int __retval;
-	freezer_do_not_count();
-	__retval = schedule_hrtimeout_range(expires, delta, mode);
-	freezer_count();
-	return __retval;
-}
-#endif /* LINUX_VERSION_IS_LESS(3,11,0) */
-
-#else /* !CONFIG_FREEZER */
-
-#ifndef freezable_schedule_hrtimeout_range
-#define freezable_schedule_hrtimeout_range(expires, delta, mode)	\
-	schedule_hrtimeout_range(expires, delta, mode)
-#endif
-
-#endif /* !CONFIG_FREEZER */
-
-#endif /* __BACKPORT_FREEZER_H_INCLUDED */
diff --git a/backport/backport-include/linux/mm.h b/backport/backport-include/linux/mm.h
index 6ee5c7d8..7e69b873 100644
--- a/backport/backport-include/linux/mm.h
+++ b/backport/backport-include/linux/mm.h
@@ -73,50 +73,6 @@ long backport_get_user_pages(unsigned long start, unsigned long nr_pages,
 #define FOLL_TRIED	0x800	/* a retry, previous pass started an IO */
 #endif
 
-#ifdef CPTCFG_BPAUTO_BUILD_FRAME_VECTOR
-/* Container for pinned pfns / pages */
-struct frame_vector {
-	unsigned int nr_allocated;	/* Number of frames we have space for */
-	unsigned int nr_frames;	/* Number of frames stored in ptrs array */
-	bool got_ref;		/* Did we pin pages by getting page ref? */
-	bool is_pfns;		/* Does array contain pages or pfns? */
-	void *ptrs[0];		/* Array of pinned pfns / pages. Use
-				 * pfns_vector_pages() or pfns_vector_pfns()
-				 * for access */
-};
-
-struct frame_vector *frame_vector_create(unsigned int nr_frames);
-void frame_vector_destroy(struct frame_vector *vec);
-int get_vaddr_frames(unsigned long start, unsigned int nr_pfns,
-		     bool write, bool force, struct frame_vector *vec);
-void put_vaddr_frames(struct frame_vector *vec);
-int frame_vector_to_pages(struct frame_vector *vec);
-void frame_vector_to_pfns(struct frame_vector *vec);
-
-static inline unsigned int frame_vector_count(struct frame_vector *vec)
-{
-	return vec->nr_frames;
-}
-
-static inline struct page **frame_vector_pages(struct frame_vector *vec)
-{
-	if (vec->is_pfns) {
-		int err = frame_vector_to_pages(vec);
-
-		if (err)
-			return ERR_PTR(err);
-	}
-	return (struct page **)(vec->ptrs);
-}
-
-static inline unsigned long *frame_vector_pfns(struct frame_vector *vec)
-{
-	if (!vec->is_pfns)
-		frame_vector_to_pfns(vec);
-	return (unsigned long *)(vec->ptrs);
-}
-#endif
-
 #if LINUX_VERSION_IS_LESS(4,1,9) && \
      LINUX_VERSION_IS_GEQ(3,6,0)
 #define page_is_pfmemalloc LINUX_BACKPORT(page_is_pfmemalloc)
diff --git a/backport/backport-include/linux/platform_data/media/si4713.h b/backport/backport-include/linux/platform_data/media/si4713.h
deleted file mode 100644
index 3d49c32f..00000000
--- a/backport/backport-include/linux/platform_data/media/si4713.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __BACKPORT_SI4713_H
-#define __BACKPORT_SI4713_H
-#include <linux/version.h>
-#if LINUX_VERSION_IS_GEQ(4,5,0)
-#include_next <linux/platform_data/media/si4713.h>
-#else
-#include <media/si4713.h>
-#endif /* < 4.5 */
-
-#endif /* __BACKPORT_SI4713_H */
diff --git a/backport/backport-include/linux/platform_data/media/soc_camera_platform.h b/backport/backport-include/linux/platform_data/media/soc_camera_platform.h
deleted file mode 100644
index 927bf8fa..00000000
--- a/backport/backport-include/linux/platform_data/media/soc_camera_platform.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __BACKPORT_SOC_CAMERA_H__
-#define __BACKPORT_SOC_CAMERA_H__
-#include <linux/version.h>
-#if LINUX_VERSION_IS_GEQ(4,5,0)
-#include_next <linux/platform_data/media/soc_camera_platform.h>
-#else
-#include <media/soc_camera_platform.h>
-#endif /* < 4.5 */
-
-#endif /* __BACKPORT_SOC_CAMERA_H__ */
diff --git a/backport/backport-include/linux/platform_data/media/timb_radio.h b/backport/backport-include/linux/platform_data/media/timb_radio.h
deleted file mode 100644
index f1fb47a2..00000000
--- a/backport/backport-include/linux/platform_data/media/timb_radio.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __BACKPORT_TIMB_RADIO_
-#define __BACKPORT_TIMB_RADIO_
-#include <linux/version.h>
-#if LINUX_VERSION_IS_GEQ(4,5,0)
-#include_next <linux/platform_data/media/timb_radio.h>
-#else
-#include <media/timb_radio.h>
-#endif /* < 4.5 */
-
-#endif /* __BACKPORT_TIMB_RADIO_ */
diff --git a/backport/backport-include/linux/platform_data/media/timb_video.h b/backport/backport-include/linux/platform_data/media/timb_video.h
deleted file mode 100644
index 82ff7887..00000000
--- a/backport/backport-include/linux/platform_data/media/timb_video.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __BACKPORT_TIMB_VIDEO_
-#define __BACKPORT_TIMB_VIDEO_
-#include <linux/version.h>
-#if LINUX_VERSION_IS_GEQ(4,5,0)
-#include_next <linux/platform_data/media/timb_video.h>
-#else
-#include <media/timb_video.h>
-#endif /* < 4.5 */
-
-#endif /* __BACKPORT_TIMB_VIDEO_ */
diff --git a/backport/backport-include/linux/regulator/driver.h b/backport/backport-include/linux/regulator/driver.h
deleted file mode 100644
index f88d9bef..00000000
--- a/backport/backport-include/linux/regulator/driver.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * driver.h -- SoC Regulator driver support.
- *
- * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
- *
- * Author: Liam Girdwood <lrg@slimlogic.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Regulator Driver Interface.
- */
-
-#ifndef __BACKPORT_LINUX_REGULATOR_DRIVER_H_
-#define __BACKPORT_LINUX_REGULATOR_DRIVER_H_
-
-#include <linux/version.h>
-#include_next <linux/regulator/driver.h>
-
-#if LINUX_VERSION_IS_LESS(3,13,0) && \
-    LINUX_VERSION_IS_GEQ(3,5,0)
-#define devm_regulator_register LINUX_BACKPORT(devm_regulator_register)
-struct regulator_dev *
-devm_regulator_register(struct device *dev,
-			const struct regulator_desc *regulator_desc,
-			const struct regulator_config *config);
-#define devm_regulator_unregister LINUX_BACKPORT(devm_regulator_unregister)
-void devm_regulator_unregister(struct device *dev, struct regulator_dev *rdev);
-#endif /* LINUX_VERSION_IS_LESS(3,13,0) &&
-	  LINUX_VERSION_IS_GEQ(3,5,0) */
-
-#endif /* __BACKPORT_LINUX_REGULATOR_DRIVER_H_ */
diff --git a/backport/backport-include/sound/core.h b/backport/backport-include/sound/core.h
deleted file mode 100644
index 79f8b319..00000000
--- a/backport/backport-include/sound/core.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _BACKPORT_SOUND_CORE_H
-#define _BACKPORT_SOUND_CORE_H
-#include_next <sound/core.h>
-
-#if LINUX_VERSION_IS_LESS(3,15,0)
-#define snd_card_new LINUX_BACKPORT(snd_card_new)
-static inline
-int snd_card_new(struct device *parent, int idx, const char *xid,
-		 struct module *module, int extra_size,
-		 struct snd_card **card_ret)
-{
-	int ret;
-
-	ret = snd_card_create(idx, xid, module, extra_size, card_ret);
-	snd_card_set_dev(*card_ret, parent);
-	return ret;
-}
-#endif
-
-#endif /* _BACKPORT_SOUND_CORE_H */
diff --git a/backport/backport-include/sound/pcm.h b/backport/backport-include/sound/pcm.h
deleted file mode 100644
index d5794ef9..00000000
--- a/backport/backport-include/sound/pcm.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __BACKPORT_SOUND_PCM_H
-#define __BACKPORT_SOUND_PCM_H
-#include_next <sound/pcm.h>
-#include <linux/version.h>
-
-#if LINUX_VERSION_IS_LESS(3,19,0)
-/**
- * snd_pcm_stop_xrun - stop the running streams as XRUN
- * @substream: the PCM substream instance
- *
- * This stops the given running substream (and all linked substreams) as XRUN.
- * Unlike snd_pcm_stop(), this function takes the substream lock by itself.
- *
- * Return: Zero if successful, or a negative error code.
- */
-static inline int snd_pcm_stop_xrun(struct snd_pcm_substream *substream)
-{
-	unsigned long flags;
-	int ret = 0;
-
-	snd_pcm_stream_lock_irqsave(substream, flags);
-	if (snd_pcm_running(substream))
-		ret = snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
-	snd_pcm_stream_unlock_irqrestore(substream, flags);
-	return ret;
-}
-#endif /* LINUX_VERSION_IS_LESS(3,19,0) */
-
-#endif /* __BACKPORT_SOUND_PCM_H */
diff --git a/backport/compat/Kconfig b/backport/compat/Kconfig
index d73e9a9e..ed3a5872 100644
--- a/backport/compat/Kconfig
+++ b/backport/compat/Kconfig
@@ -139,31 +139,6 @@ config BPAUTO_BUCKET_LOCKS
 	default y if BPAUTO_RHASHTABLE
 	#c-file lib/bucket_locks.c
 
-config BPAUTO_BUILD_HDMI
-	bool
-	# the hdmi driver got some new apis like hdmi_infoframe_unpack() in
-	# kernel 4.0 which are used by some drivers
-	depends on KERNEL_4_0
-	#h-file linux/hdmi.h
-	#c-file drivers/video/hdmi.c
-
-config BPAUTO_HDMI
-	bool
-	select BPAUTO_BUILD_HDMI if KERNEL_4_0
-	# these drivers are using the new features of the hdmi driver.
-	default y if BACKPORTED_VIDEO_ADV7511
-	default y if BACKPORTED_VIDEO_ADV7604
-	default y if BACKPORTED_VIDEO_ADV7842
-
-config BPAUTO_FRAME_VECTOR
-	bool
-
-config BPAUTO_BUILD_FRAME_VECTOR
-	bool
-	default n if FRAME_VECTOR
-	default y if BPAUTO_FRAME_VECTOR
-	#c-file mm/frame_vector.c
-
 config BPAUTO_REFCOUNT
 	bool
 	default y
diff --git a/backport/compat/backport-3.13.c b/backport/compat/backport-3.13.c
index 496bee60..9e5076fb 100644
--- a/backport/compat/backport-3.13.c
+++ b/backport/compat/backport-3.13.c
@@ -17,81 +17,6 @@
 #include <linux/device.h>
 #include <linux/hwmon.h>
 
-#if LINUX_VERSION_IS_GEQ(3,5,0)
-#ifdef CONFIG_REGULATOR
-#include <linux/module.h>
-#include <linux/regulator/driver.h>
-#include <linux/device.h>
-#include <linux/static_key.h>
-
-static void devm_rdev_release(struct device *dev, void *res)
-{
-	regulator_unregister(*(struct regulator_dev **)res);
-}
-
-/**
- * devm_regulator_register - Resource managed regulator_register()
- * @regulator_desc: regulator to register
- * @config: runtime configuration for regulator
- *
- * Called by regulator drivers to register a regulator.  Returns a
- * valid pointer to struct regulator_dev on success or an ERR_PTR() on
- * error.  The regulator will automatically be released when the device
- * is unbound.
- */
-struct regulator_dev *devm_regulator_register(struct device *dev,
-				  const struct regulator_desc *regulator_desc,
-				  const struct regulator_config *config)
-{
-	struct regulator_dev **ptr, *rdev;
-
-	ptr = devres_alloc(devm_rdev_release, sizeof(*ptr),
-			   GFP_KERNEL);
-	if (!ptr)
-		return ERR_PTR(-ENOMEM);
-
-	rdev = regulator_register(regulator_desc, config);
-	if (!IS_ERR(rdev)) {
-		*ptr = rdev;
-		devres_add(dev, ptr);
-	} else {
-		devres_free(ptr);
-	}
-
-	return rdev;
-}
-EXPORT_SYMBOL_GPL(devm_regulator_register);
-
-static int devm_rdev_match(struct device *dev, void *res, void *data)
-{
-	struct regulator_dev **r = res;
-	if (!r || !*r) {
-		WARN_ON(!r || !*r);
-		return 0;
-	}
-	return *r == data;
-}
-
-/**
- * devm_regulator_unregister - Resource managed regulator_unregister()
- * @regulator: regulator to free
- *
- * Unregister a regulator registered with devm_regulator_register().
- * Normally this function will not need to be called and the resource
- * management code will ensure that the resource is freed.
- */
-void devm_regulator_unregister(struct device *dev, struct regulator_dev *rdev)
-{
-	int rc;
-
-	rc = devres_release(dev, devm_rdev_release, devm_rdev_match, rdev);
-	if (rc != 0)
-		WARN_ON(rc);
-}
-EXPORT_SYMBOL_GPL(devm_regulator_unregister);
-#endif /* CONFIG_REGULATOR */
-#endif /* LINUX_VERSION_IS_GEQ(3,5,0) */
-
 /************* generic netlink backport *****************/
 #if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,0)
 
diff --git a/dependencies b/dependencies
index 80e72c8a..628f82bd 100644
--- a/dependencies
+++ b/dependencies
@@ -1,8 +1,6 @@
 # List the minimum kernel version required for each
 # of the listed Kconfig symbols
 
-ATL1C 3.5
-
 # depends on -EPROBE_DEFER and others now
 WL1251_SPI 3.5
 
@@ -22,37 +20,11 @@ HOSTAP 3.10
 AIRO 3.9
 AIRO_CS 3.9
 
-# Media
-MEDIA_SUPPORT 3.8
-# someone has to backport "firewire: introduce fw_driver.probe and .remove methods"
-DVB_FIREDTV 3.11
-
-SOC_CAMERA_PLATFORM 3.9
-
-# missing linux/gpio/consumer.h
-# consumer.h cannot be backported currently, as functions rely
-# on in-kernel functionality (GPIO_DEVRES), we can now backport
-# in-kernel functionality but we'd need to make that depend on
-# integration only and figure out a way to easily split that.
-# This does not seem like a good test desirable test case to
-# start that work with.
-VIDEO_ADP1653 3.13
-VIDEO_TC358743 3.13
-VIDEO_MT9P031 3.13
-
 # missing linux/property.h
 NFC_ST95HF 3.18
 
 # missing devm_gpiod_get_optional()
 # this needs devm_gpiod_get_optional() with 3 arguments.
-I2C_SI4713 3.17
-USB_SI4713 3.17
-PLATFORM_SI4713 3.17
-SOC_CAMERA_OV2640 3.17
-VIDEO_ADV7604 3.17
-VIDEO_COBALT 3.17
-VIDEO_TVP5150 3.17
-VIDEO_EM28XX_V4L2 3.17
 NFC_PN544_I2C 3.17
 NFC_TRF7970A 3.17
 
@@ -76,17 +48,6 @@ NFC_ST_NCI_I2C 3.19
 NFC_ST_NCI_SPI 3.19
 NFC_PN544_I2C 3.19
 
-# for whoever wants to backport this: GPIOF_EXPORT was redefined via commit
-# 79a9becd on v3.13-rc1~120^2~15, before this it was redefined via commit
-# f567fde2 on v3.5-rc7~32^2~4 and finally added via commit fc3a1f04 on
-# v3.5-rc1~93^2~25. We don't address any of these changes yet so we require
-# the latest interpretation.
-VIDEO_S5K6AA 3.13
-VIDEO_S5K6A3 3.13
-
-# this needs arch_phys_wc_add(), arch_phys_wc_del() and pat_enabled()
-VIDEO_FB_IVTV 4.2
-
 BCMA_DRIVER_MIPS 3.3
 SSB_DRIVER_MIPS 3.3
 # needs GPIO stuff we didn't backport
@@ -100,9 +61,6 @@ BCMA_HOST_SOC 3.7
 
 # Uses gpiochip_get_data()
 BCMA_DRIVER_GPIO 4.5
-VIDEO_EM28XX_DVB 4.5
-DVB_CXD2820R 4.5
-DVB_USB_ANYSEE 4.5
 
 # NFC core needs PF_NFC defined in socket.h which was
 # only introduced in kernel 3.1
@@ -124,12 +82,6 @@ NFC_MEI_PHY 4.10
 NFC_PN544_I2C 3.13
 NFC_FDP 3.13
 
-IR_IMG 3.5
-
-# missing include/linux/mfd/syscon.h file
-IR_HIX5HD2 3.7
-IR_HIX5HD2 kconfig: CONFIG_MFD_SYSCON
-
 # tracing results in compile errors
 ATH10K_TRACING 3.4
 ATH_TRACEPOINTS 3.1
@@ -137,13 +89,6 @@ ATH_TRACEPOINTS 3.1
 # missigng add_hwgenerator_randomness()
 ATH9K_HWRNG 3.17
 
-# depends on netdev_rss_key_fill() which uses net_get_random_once()
-# and since net_get_random_once() depends on static keys we've decided
-# to backport that only down to 3.5. For full details refer to backports
-# commit 8cb8816d
-# mpls_features was added with kernel 3.11
-IGB 3.11
-
 # This driver needs mmc_hw_reset() which was added in kernel version 3.2
 MWIFIEX_SDIO 3.2
 
diff --git a/patches/0001-v4l2-dma_mmap_coherent-revert.patch b/patches/0001-v4l2-dma_mmap_coherent-revert.patch
deleted file mode 100644
index 85c1bb01..00000000
--- a/patches/0001-v4l2-dma_mmap_coherent-revert.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-Commit c60520fa needs to be reverted for older kernels because
-although we can backport some new DMA changes some other
-larger changes ended up extending some core dma data
-structures, for details see bca0fa5f as an example. We're
-aided with this revert by having added vb2_mmap_pfn_range() to
-compat. The main reason to revert is usage of the new
-dma_mmap_coherent() and core changes required via
-bca0fa5f.
-
-commit c60520fa50cd86d64bc8ebb34300ddc4ca91393d
-Author: Marek Szyprowski <m.szyprowski@samsung.com>
-Date:   Thu Jun 14 11:32:21 2012 -0300
-
-    [media] v4l: vb2-dma-contig: let mmap method to use dma_mmap_coherent call
-    
-    Let mmap method to use dma_mmap_coherent call.  Moreover, this patch removes
-    vb2_mmap_pfn_range from videobuf2 helpers as it was suggested by Laurent
-    Pinchart.  The function is no longer used in vb2 code.
-    
-    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
-    Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
-    Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-    Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
-    Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-
---- a/drivers/media/v4l2-core/videobuf2-dma-contig.c
-+++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c
-@@ -177,6 +177,52 @@ static void *vb2_dc_alloc(void *alloc_ct
- 	return buf;
- }
- 
-+#if LINUX_VERSION_IS_LESS(3,9,0)
-+#if LINUX_VERSION_IS_GEQ(3,2,0)
-+static int
-+backport_vb2_mmap_pfn_range(struct vm_area_struct *vma, unsigned long paddr,
-+			    unsigned long size,
-+			    const struct vm_operations_struct *vm_ops,
-+			    void *priv)
-+{
-+	int ret;
-+
-+	size = min_t(unsigned long, vma->vm_end - vma->vm_start, size);
-+
-+	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-+	ret = remap_pfn_range(vma, vma->vm_start, paddr >> PAGE_SHIFT,
-+				size, vma->vm_page_prot);
-+	if (ret) {
-+		printk(KERN_ERR "Remapping memory failed, error: %d\n", ret);
-+		return ret;
-+	}
-+
-+	vma->vm_flags		|= VM_DONTEXPAND | VM_DONTDUMP;
-+	vma->vm_private_data	= priv;
-+	vma->vm_ops		= vm_ops;
-+
-+	vma->vm_ops->open(vma);
-+
-+	pr_debug("%s: mapped paddr 0x%08lx at 0x%08lx, size %ld\n",
-+			__func__, paddr, vma->vm_start, size);
-+
-+	return 0;
-+}
-+
-+static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma)
-+{
-+	struct vb2_dc_buf *buf = buf_priv;
-+
-+	if (!buf) {
-+		printk(KERN_ERR "No buffer to map\n");
-+		return -EINVAL;
-+	}
-+
-+	return backport_vb2_mmap_pfn_range(vma, buf->dma_addr, buf->size,
-+					   &vb2_common_vm_ops, &buf->handler);
-+}
-+#endif /* LINUX_VERSION_IS_GEQ(3,2,0) */
-+#else
- static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma)
- {
- 	struct vb2_dc_buf *buf = buf_priv;
-@@ -213,6 +259,7 @@ static int vb2_dc_mmap(void *buf_priv, s
- 
- 	return 0;
- }
-+#endif /* LINUX_VERSION_IS_LESS(3,9,0) */
- 
- /*********************************************/
- /*         DMABUF ops for exporters          */
diff --git a/patches/0013-fix-makefile-includes/bluetooth.patch b/patches/0013-fix-makefile-includes/bluetooth.patch
deleted file mode 100644
index db732995..00000000
--- a/patches/0013-fix-makefile-includes/bluetooth.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/net/bluetooth/6lowpan.c
-+++ b/net/bluetooth/6lowpan.c
-@@ -18,6 +18,7 @@
- #include <linux/debugfs.h>
- 
- #include <net/ipv6.h>
-+#include <net/ip6_fib.h>
- #include <net/ip6_route.h>
- #include <net/addrconf.h>
- 
diff --git a/patches/0013-fix-makefile-includes/frame_vector.patch b/patches/0013-fix-makefile-includes/frame_vector.patch
deleted file mode 100644
index 66d9eaf3..00000000
--- a/patches/0013-fix-makefile-includes/frame_vector.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compat/mm-frame_vector.c
-+++ b/compat/mm-frame_vector.c
-@@ -6,6 +6,7 @@
- #include <linux/vmalloc.h>
- #include <linux/pagemap.h>
- #include <linux/sched.h>
-+#include <linux/export.h>
- 
- /**
-  * get_vaddr_frames() - map virtual addresses to pfns
diff --git a/patches/0013-fix-makefile-includes/igb.patch b/patches/0013-fix-makefile-includes/igb.patch
deleted file mode 100644
index a0804dc8..00000000
--- a/patches/0013-fix-makefile-includes/igb.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
-index 55a1405c..1409e20 100644
---- a/drivers/net/ethernet/intel/igb/igb_main.c
-+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -34,6 +34,7 @@
- #include <linux/slab.h>
- #include <net/checksum.h>
- #include <net/ip6_checksum.h>
-+#include <net/ipv6.h>
- #include <linux/net_tstamp.h>
- #include <linux/mii.h>
- #include <linux/ethtool.h>
diff --git a/patches/0020-tty-termios/net_bluetooth_hci_ldisc.patch b/patches/0020-tty-termios/net_bluetooth_hci_ldisc.patch
deleted file mode 100644
index 81371523..00000000
--- a/patches/0020-tty-termios/net_bluetooth_hci_ldisc.patch
+++ /dev/null
@@ -1,67 +0,0 @@
---- a/drivers/bluetooth/hci_ldisc.c
-+++ b/drivers/bluetooth/hci_ldisc.c
-@@ -24,6 +24,7 @@
-  */
- 
- #include <linux/module.h>
-+#include <linux/version.h>
- 
- #include <linux/kernel.h>
- #include <linux/init.h>
-@@ -269,7 +270,11 @@ void hci_uart_set_flow_control(struct hc
- 
- 	if (enable) {
- 		/* Disable hardware flow control */
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 		ktermios = tty->termios;
-+#else
-+		ktermios = *tty->termios;
-+#endif
- 		ktermios.c_cflag &= ~CRTSCTS;
- 		status = tty_set_termios(tty, &ktermios);
- 		BT_DBG("Disabling hardware flow control: %s",
-@@ -303,7 +308,11 @@ void hci_uart_set_flow_control(struct hc
- 		BT_DBG("Setting RTS: %s", status ? "failed" : "success");
- 
- 		/* Re-enable hardware flow control */
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 		ktermios = tty->termios;
-+#else
-+		ktermios = *tty->termios;
-+#endif
- 		ktermios.c_cflag |= CRTSCTS;
- 		status = tty_set_termios(tty, &ktermios);
- 		BT_DBG("Enabling hardware flow control: %s",
-@@ -324,7 +333,11 @@ void hci_uart_init_tty(struct hci_uart *
- 	struct ktermios ktermios;
- 
- 	/* Bring the UART into a known 8 bits no parity hw fc state */
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 	ktermios = tty->termios;
-+#else
-+	ktermios = *tty->termios;
-+#endif
- 	ktermios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP |
- 			      INLCR | IGNCR | ICRNL | IXON);
- 	ktermios.c_oflag &= ~OPOST;
-@@ -342,7 +355,11 @@ void hci_uart_set_baudrate(struct hci_ua
- 	struct tty_struct *tty = hu->tty;
- 	struct ktermios ktermios;
- 
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 	ktermios = tty->termios;
-+#else
-+	ktermios = *tty->termios;
-+#endif
- 	ktermios.c_cflag &= ~CBAUD;
- 	tty_termios_encode_baud_rate(&ktermios, speed, speed);
- 
-@@ -350,7 +367,7 @@ void hci_uart_set_baudrate(struct hci_ua
- 	tty_set_termios(tty, &ktermios);
- 
- 	BT_DBG("%s: New tty speeds: %d/%d", hu->hdev->name,
--	       tty->termios.c_ispeed, tty->termios.c_ospeed);
-+	       ktermios.c_ispeed, ktermios.c_ospeed);
- }
- 
- static int hci_uart_setup(struct hci_dev *hdev)
diff --git a/patches/0020-tty-termios/net_bluetooth_rfcomm_tty.patch b/patches/0020-tty-termios/net_bluetooth_rfcomm_tty.patch
deleted file mode 100644
index 71aa75dd..00000000
--- a/patches/0020-tty-termios/net_bluetooth_rfcomm_tty.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/net/bluetooth/rfcomm/tty.c
-+++ b/net/bluetooth/rfcomm/tty.c
-@@ -869,7 +869,11 @@ static int rfcomm_tty_ioctl(struct tty_s
- 
- static void rfcomm_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
- {
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 	struct ktermios *new = &tty->termios;
-+#else
-+	struct ktermios *new = tty->termios;
-+#endif
- 	int old_baud_rate = tty_termios_baud_rate(old);
- 	int new_baud_rate = tty_termios_baud_rate(new);
- 
diff --git a/patches/0021-umode_t-api-change/drivers_net_wireless_ath_ath9k_debug.patch b/patches/0021-umode_t-api-change/drivers_net_wireless_ath_ath9k_debug.patch
deleted file mode 100644
index a64c0290..00000000
--- a/patches/0021-umode_t-api-change/drivers_net_wireless_ath_ath9k_debug.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/spectral.c
-+++ b/drivers/net/wireless/ath/ath9k/spectral.c
-@@ -478,7 +478,11 @@ static const struct file_operations fops
- 
- static struct dentry *create_buf_file_handler(const char *filename,
- 					      struct dentry *parent,
-+#if LINUX_VERSION_IS_GEQ(3,3,0)
- 					      umode_t mode,
-+#else
-+					      int mode,
-+#endif
- 					      struct rchan_buf *buf,
- 					      int *is_global)
- {
diff --git a/patches/0029-struct_hid_ll_driver-extensions/net_bluetooth_hidp_core.patch b/patches/0029-struct_hid_ll_driver-extensions/net_bluetooth_hidp_core.patch
deleted file mode 100644
index 6cccf460..00000000
--- a/patches/0029-struct_hid_ll_driver-extensions/net_bluetooth_hidp_core.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/net/bluetooth/hidp/core.c
-+++ b/net/bluetooth/hidp/core.c
-@@ -224,6 +224,7 @@ static void hidp_input_report(struct hid
- 	input_sync(dev);
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- static int hidp_get_raw_report(struct hid_device *hid,
- 		unsigned char report_number,
- 		unsigned char *data, size_t count,
-@@ -396,6 +397,7 @@ static int hidp_raw_request(struct hid_d
- 		return -EIO;
- 	}
- }
-+#endif
- 
- static void hidp_idle_timeout(unsigned long arg)
- {
-@@ -739,8 +741,10 @@ static struct hid_ll_driver hidp_hid_dri
- 	.stop = hidp_stop,
- 	.open  = hidp_open,
- 	.close = hidp_close,
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- 	.raw_request = hidp_raw_request,
- 	.output_report = hidp_output_report,
-+#endif
- };
- 
- /* This function sets up the hid device. It does not add it
diff --git a/patches/0030-qdisc_tx_busylock/bluetooth.patch b/patches/0030-qdisc_tx_busylock/bluetooth.patch
deleted file mode 100644
index 1025f03b..00000000
--- a/patches/0030-qdisc_tx_busylock/bluetooth.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/net/bluetooth/6lowpan.c
-+++ b/net/bluetooth/6lowpan.c
-@@ -628,7 +628,9 @@ static netdev_tx_t bt_xmit(struct sk_buf
- 	return err < 0 ? NET_XMIT_DROP : err;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- static struct lock_class_key bt_tx_busylock;
-+#endif
- static struct lock_class_key bt_netdev_xmit_lock_key;
- 
- static void bt_set_lockdep_class_one(struct net_device *dev,
-@@ -641,7 +643,9 @@ static void bt_set_lockdep_class_one(str
- static int bt_dev_init(struct net_device *dev)
- {
- 	netdev_for_each_tx_queue(dev, bt_set_lockdep_class_one, NULL);
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- 	dev->qdisc_tx_busylock = &bt_tx_busylock;
-+#endif
- 
- 	return 0;
- }
diff --git a/patches/0032-sriov_configure/igb_sriov_configure.patch b/patches/0032-sriov_configure/igb_sriov_configure.patch
deleted file mode 100644
index 77e5eac9..00000000
--- a/patches/0032-sriov_configure/igb_sriov_configure.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb_main.c
-+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -7682,6 +7682,7 @@ static int igb_sriov_reinit(struct pci_d
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,8,0)
- static int igb_pci_disable_sriov(struct pci_dev *dev)
- {
- 	int err = igb_disable_sriov(dev);
-@@ -7691,6 +7692,7 @@ static int igb_pci_disable_sriov(struct
- 
- 	return err;
- }
-+#endif /* LINUX_VERSION_IS_GEQ(3,8,0) */
- 
- static int igb_pci_enable_sriov(struct pci_dev *dev, int num_vfs)
- {
diff --git a/patches/0033-ndo_vlan_rx_vid/igb_ndo_vlan_rx_vid.patch b/patches/0033-ndo_vlan_rx_vid/igb_ndo_vlan_rx_vid.patch
deleted file mode 100644
index 093af647..00000000
--- a/patches/0033-ndo_vlan_rx_vid/igb_ndo_vlan_rx_vid.patch
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb_main.c
-+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -158,8 +158,16 @@ static void igb_tx_timeout(struct net_de
- static void igb_reset_task(struct work_struct *);
- static void igb_vlan_mode(struct net_device *netdev,
- 			  netdev_features_t features);
-+#if LINUX_VERSION_IS_GEQ(3,10,0)
- static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
- static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
-+#elif LINUX_VERSION_IS_GEQ(3,3,0)
-+static int igb_vlan_rx_add_vid(struct net_device *, u16);
-+static int igb_vlan_rx_kill_vid(struct net_device *, u16);
-+#else
-+static void igb_vlan_rx_add_vid(struct net_device *, u16);
-+static void igb_vlan_rx_kill_vid(struct net_device *, u16);
-+#endif /* LINUX_VERSION_IS_GEQ(3,10,0) */
- static void igb_restore_vlan(struct igb_adapter *);
- static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8);
- static void igb_ping_all_vfs(struct igb_adapter *);
-@@ -7349,8 +7357,14 @@ static void igb_vlan_mode(struct net_dev
- 	igb_set_vf_vlan_strip(adapter, adapter->vfs_allocated_count, enable);
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,10,0)
- static int igb_vlan_rx_add_vid(struct net_device *netdev,
- 			       __be16 proto, u16 vid)
-+#elif LINUX_VERSION_IS_GEQ(3,3,0)
-+static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
-+#else
-+static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
-+#endif
- {
- 	struct igb_adapter *adapter = netdev_priv(netdev);
- 	struct e1000_hw *hw = &adapter->hw;
-@@ -7362,11 +7376,19 @@ static int igb_vlan_rx_add_vid(struct ne
- 
- 	set_bit(vid, adapter->active_vlans);
- 
-+#if LINUX_VERSION_IS_GEQ(3,3,0)
- 	return 0;
-+#endif /* LINUX_VERSION_IS_GEQ(3,3,0) */
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,10,0)
- static int igb_vlan_rx_kill_vid(struct net_device *netdev,
- 				__be16 proto, u16 vid)
-+#elif LINUX_VERSION_IS_GEQ(3,3,0)
-+static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
-+#else
-+static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
-+#endif /* LINUX_VERSION_IS_GEQ(3,10,0) */
- {
- 	struct igb_adapter *adapter = netdev_priv(netdev);
- 	int pf_id = adapter->vfs_allocated_count;
-@@ -7378,7 +7400,9 @@ static int igb_vlan_rx_kill_vid(struct n
- 
- 	clear_bit(vid, adapter->active_vlans);
- 
-+#if LINUX_VERSION_IS_GEQ(3,3,0)
- 	return 0;
-+#endif /* LINUX_VERSION_IS_GEQ(3,3,0) */
- }
- 
- static void igb_restore_vlan(struct igb_adapter *adapter)
-@@ -7386,10 +7410,18 @@ static void igb_restore_vlan(struct igb_
- 	u16 vid = 1;
- 
- 	igb_vlan_mode(adapter->netdev, adapter->netdev->features);
-+#if LINUX_VERSION_IS_GEQ(3,10,0)
- 	igb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), 0);
-+#else
-+	igb_vlan_rx_add_vid(adapter->netdev, 0);
-+#endif /* LINUX_VERSION_IS_GEQ(3,10,0) */
- 
- 	for_each_set_bit_from(vid, adapter->active_vlans, VLAN_N_VID)
-+#if LINUX_VERSION_IS_GEQ(3,10,0)
- 		igb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);
-+#else
-+		igb_vlan_rx_add_vid(adapter->netdev, vid);
-+#endif /* LINUX_VERSION_IS_GEQ(3,10,0) */
- }
- 
- int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx)
diff --git a/patches/0038-ethtool_rxfh_indir/igb_rxfh_indir.patch b/patches/0038-ethtool_rxfh_indir/igb_rxfh_indir.patch
deleted file mode 100644
index 73666630..00000000
--- a/patches/0038-ethtool_rxfh_indir/igb_rxfh_indir.patch
+++ /dev/null
@@ -1,92 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
-+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
-@@ -2860,19 +2860,28 @@ static void igb_ethtool_complete(struct
- 	pm_runtime_put(&adapter->pdev->dev);
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,3,0)
- static u32 igb_get_rxfh_indir_size(struct net_device *netdev)
- {
- 	return IGB_RETA_SIZE;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- static int igb_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
- 			u8 *hfunc)
-+#elif LINUX_VERSION_IS_GEQ(3,16,0)
-+static int igb_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key)
-+#else
-+static int igb_get_rxfh(struct net_device *netdev, u32 *indir)
-+#endif
- {
- 	struct igb_adapter *adapter = netdev_priv(netdev);
- 	int i;
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	if (hfunc)
- 		*hfunc = ETH_RSS_HASH_TOP;
-+#endif
- 	if (!indir)
- 		return 0;
- 	for (i = 0; i < IGB_RETA_SIZE; i++)
-@@ -2880,6 +2889,7 @@ static int igb_get_rxfh(struct net_devic
- 
- 	return 0;
- }
-+#endif /* LINUX_VERSION_IS_GEQ(3,3,0) */
- 
- void igb_write_rss_indir_tbl(struct igb_adapter *adapter)
- {
-@@ -2916,18 +2926,28 @@ void igb_write_rss_indir_tbl(struct igb_
- 	}
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,3,0)
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- static int igb_set_rxfh(struct net_device *netdev, const u32 *indir,
- 			const u8 *key, const u8 hfunc)
-+#elif LINUX_VERSION_IS_GEQ(3,16,0)
-+static int igb_set_rxfh(struct net_device *netdev, const u32 *indir,
-+			const u8 *key)
-+#else
-+static int igb_set_rxfh(struct net_device *netdev, const u32 *indir)
-+#endif
- {
- 	struct igb_adapter *adapter = netdev_priv(netdev);
- 	struct e1000_hw *hw = &adapter->hw;
- 	int i;
- 	u32 num_queues;
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	/* We do not allow change in unsupported parameters */
- 	if (key ||
- 	    (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
- 		return -EOPNOTSUPP;
-+#endif
- 	if (!indir)
- 		return 0;
- 
-@@ -2956,6 +2976,7 @@ static int igb_set_rxfh(struct net_devic
- 
- 	return 0;
- }
-+#endif /* LINUX_VERSION_IS_GEQ(3,3,0) */
- 
- static unsigned int igb_max_channels(struct igb_adapter *adapter)
- {
-@@ -3075,9 +3096,15 @@ static const struct ethtool_ops igb_etht
- 	.set_eee		= igb_set_eee,
- 	.get_module_info	= igb_get_module_info,
- 	.get_module_eeprom	= igb_get_module_eeprom,
-+#if LINUX_VERSION_IS_GEQ(3,16,0)
- 	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
- 	.get_rxfh		= igb_get_rxfh,
- 	.set_rxfh		= igb_set_rxfh,
-+#elif LINUX_VERSION_IS_GEQ(3,3,0)
-+	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
-+	.get_rxfh_indir		= igb_get_rxfh,
-+	.set_rxfh_indir		= igb_set_rxfh,
-+#endif /* LINUX_VERSION_IS_GEQ(3,3,0) */
- 	.get_channels		= igb_get_channels,
- 	.set_channels		= igb_set_channels,
- 	.begin			= igb_ethtool_begin,
diff --git a/patches/0042-pci_error_handlers/atl1e.patch b/patches/0042-pci_error_handlers/atl1e.patch
deleted file mode 100644
index 2bfc1d5e..00000000
--- a/patches/0042-pci_error_handlers/atl1e.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-@@ -2555,7 +2555,11 @@ static void atl1e_io_resume(struct pci_d
- 	netif_device_attach(netdev);
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,7,0)
- static const struct pci_error_handlers atl1e_err_handler = {
-+#else
-+static struct pci_error_handlers atl1e_err_handler = {
-+#endif /* LINUX_VERSION_IS_GEQ(3,7,0) */
- 	.error_detected = atl1e_io_error_detected,
- 	.slot_reset = atl1e_io_slot_reset,
- 	.resume = atl1e_io_resume,
diff --git a/patches/0043-ndo_set_vf_rate/igb_set_vf_rate.patch b/patches/0043-ndo_set_vf_rate/igb_set_vf_rate.patch
deleted file mode 100644
index 5e086bff..00000000
--- a/patches/0043-ndo_set_vf_rate/igb_set_vf_rate.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb_main.c
-+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -8013,6 +8013,7 @@ static int igb_ndo_set_vf_bw(struct net_
- 	if (hw->mac.type != e1000_82576)
- 		return -EOPNOTSUPP;
- 
-+#if LINUX_VERSION_IS_GEQ(3,16,0)
- 	if (min_tx_rate)
- 		return -EINVAL;
- 
-@@ -8026,7 +8027,17 @@ static int igb_ndo_set_vf_bw(struct net_
- 	adapter->vf_rate_link_speed = actual_link_speed;
- 	adapter->vf_data[vf].tx_rate = (u16)max_tx_rate;
- 	igb_set_vf_rate_limit(hw, vf, max_tx_rate, actual_link_speed);
-+#else
-+	actual_link_speed = igb_link_mbps(adapter->link_speed);
-+	if ((vf >= adapter->vfs_allocated_count) ||
-+	    (!(rd32(E1000_STATUS) & E1000_STATUS_LU)) ||
-+	    (tx_rate < 0) || (tx_rate > actual_link_speed))
-+		return -EINVAL;
- 
-+	adapter->vf_rate_link_speed = actual_link_speed;
-+	adapter->vf_data[vf].tx_rate = (u16)tx_rate;
-+	igb_set_vf_rate_limit(hw, vf, tx_rate, actual_link_speed);
-+#endif /* LINUX_VERSION_IS_GEQ(3,16,0) */
- 	return 0;
- }
- 
diff --git a/patches/0047-write_iter/bluetooth.patch b/patches/0047-write_iter/bluetooth.patch
deleted file mode 100644
index 093b526c..00000000
--- a/patches/0047-write_iter/bluetooth.patch
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/drivers/bluetooth/hci_vhci.c
-+++ b/drivers/bluetooth/hci_vhci.c
-@@ -151,6 +151,7 @@ static int vhci_create_device(struct vhc
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,18,0)
- static inline ssize_t vhci_get_user(struct vhci_data *data,
- 				    struct iov_iter *from)
- {
-@@ -158,6 +159,17 @@ static inline ssize_t vhci_get_user(stru
- 	struct sk_buff *skb;
- 	__u8 pkt_type, opcode;
- 	int ret;
-+#else
-+static inline ssize_t vhci_get_user(struct vhci_data *data,
-+				    const struct iovec *iov,
-+				    unsigned long count)
-+{
-+	size_t len = iov_length(iov, count);
-+	struct sk_buff *skb;
-+	__u8 pkt_type, opcode;
-+	unsigned long i;
-+	int ret;
-+#endif
- 
- 	if (len < 2 || len > HCI_MAX_FRAME_SIZE)
- 		return -EINVAL;
-@@ -166,10 +178,20 @@ static inline ssize_t vhci_get_user(stru
- 	if (!skb)
- 		return -ENOMEM;
- 
-+#if LINUX_VERSION_IS_GEQ(3,18,0)
- 	if (copy_from_iter(skb_put(skb, len), len, from) != len) {
- 		kfree_skb(skb);
- 		return -EFAULT;
- 	}
-+#else
-+	for (i = 0; i < count; i++) {
-+		if (copy_from_user(skb_put(skb, iov[i].iov_len),
-+				   iov[i].iov_base, iov[i].iov_len)) {
-+			kfree_skb(skb);
-+			return -EFAULT;
-+		}
-+	}
-+#endif
- 
- 	pkt_type = *((__u8 *) skb->data);
- 	skb_pull(skb, 1);
-@@ -281,12 +303,21 @@ static ssize_t vhci_read(struct file *fi
- 	return ret;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,18,0)
- static ssize_t vhci_write(struct kiocb *iocb, struct iov_iter *from)
-+#else
-+static ssize_t vhci_write(struct kiocb *iocb, const struct iovec *iov,
-+			  unsigned long count, loff_t pos)
-+#endif
- {
- 	struct file *file = iocb->ki_filp;
- 	struct vhci_data *data = file->private_data;
- 
-+#if LINUX_VERSION_IS_GEQ(3,18,0)
- 	return vhci_get_user(data, from);
-+#else
-+	return vhci_get_user(data, iov, count);
-+#endif
- }
- 
- static unsigned int vhci_poll(struct file *file, poll_table *wait)
-@@ -351,7 +382,11 @@ static int vhci_release(struct inode *in
- static const struct file_operations vhci_fops = {
- 	.owner		= THIS_MODULE,
- 	.read		= vhci_read,
-+#if LINUX_VERSION_IS_GEQ(3,18,0)
- 	.write_iter	= vhci_write,
-+#else
-+	.aio_write	= vhci_write,
-+#endif
- 	.poll		= vhci_poll,
- 	.open		= vhci_open,
- 	.release	= vhci_release,
diff --git a/patches/0050-iov_iter/bluetooth.patch b/patches/0050-iov_iter/bluetooth.patch
deleted file mode 100644
index 87506ff1..00000000
--- a/patches/0050-iov_iter/bluetooth.patch
+++ /dev/null
@@ -1,197 +0,0 @@
---- a/include/net/bluetooth/l2cap.h
-+++ b/include/net/bluetooth/l2cap.h
-@@ -619,6 +619,12 @@ struct l2cap_ops {
- 	struct sk_buff		*(*alloc_skb) (struct l2cap_chan *chan,
- 					       unsigned long hdr_len,
- 					       unsigned long len, int nb);
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	int			(*memcpy_fromiovec) (struct l2cap_chan *chan,
-+						     unsigned char *kdata,
-+						     struct iovec *iov,
-+						     int len);
-+#endif
- };
- 
- struct l2cap_conn {
-@@ -912,6 +918,33 @@ static inline long l2cap_chan_no_get_snd
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+static inline int l2cap_chan_no_memcpy_fromiovec(struct l2cap_chan *chan,
-+						 unsigned char *kdata,
-+						 struct iovec *iov,
-+						 int len)
-+{
-+	/* Following is safe since for compiler definitions of kvec and
-+	 * iovec are identical, yielding the same in-core layout and alignment
-+	 */
-+	struct kvec *vec = (struct kvec *)iov;
-+
-+	while (len > 0) {
-+		if (vec->iov_len) {
-+			int copy = min_t(unsigned int, len, vec->iov_len);
-+			memcpy(kdata, vec->iov_base, copy);
-+			len -= copy;
-+			kdata += copy;
-+			vec->iov_base += copy;
-+			vec->iov_len -= copy;
-+		}
-+		vec++;
-+	}
-+
-+	return 0;
-+}
-+#endif
-+
- extern bool disable_ertm;
- 
- int l2cap_init_sockets(void);
---- a/net/bluetooth/6lowpan.c
-+++ b/net/bluetooth/6lowpan.c
-@@ -515,11 +515,18 @@ static int send_pkt(struct l2cap_chan *c
- 	 */
- 	chan->data = skb;
- 
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	memset(&msg, 0, sizeof(msg));
-+	msg.msg_iov = (struct iovec *) &iv;
-+	msg.msg_iovlen = 1;
-+#endif
- 	iv.iov_base = skb->data;
- 	iv.iov_len = skb->len;
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	memset(&msg, 0, sizeof(msg));
- 	iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iv, 1, skb->len);
-+#endif
- 
- 	err = l2cap_chan_send(chan, &msg, skb->len);
- 	if (err > 0) {
-@@ -1017,6 +1024,9 @@ static const struct l2cap_ops bt_6lowpan
- 	.suspend		= chan_suspend_cb,
- 	.get_sndtimeo		= chan_get_sndtimeo_cb,
- 	.alloc_skb		= chan_alloc_skb_cb,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
-+#endif
- 
- 	.teardown		= l2cap_chan_no_teardown,
- 	.defer			= l2cap_chan_no_defer,
---- a/net/bluetooth/a2mp.c
-+++ b/net/bluetooth/a2mp.c
-@@ -63,7 +63,12 @@ static void a2mp_send(struct amp_mgr *mg
- 
- 	memset(&msg, 0, sizeof(msg));
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iv, 1, total_len);
-+#else
-+	msg.msg_iov = (struct iovec *) &iv;
-+	msg.msg_iovlen = 1;
-+#endif
- 
- 	l2cap_chan_send(chan, &msg, total_len);
- 
-@@ -753,6 +758,9 @@ static const struct l2cap_ops a2mp_chan_
- 	.resume = l2cap_chan_no_resume,
- 	.set_shutdown = l2cap_chan_no_set_shutdown,
- 	.get_sndtimeo = l2cap_chan_no_get_sndtimeo,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	.memcpy_fromiovec = l2cap_chan_no_memcpy_fromiovec,
-+#endif
- };
- 
- static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn, bool locked)
---- a/net/bluetooth/l2cap_core.c
-+++ b/net/bluetooth/l2cap_core.c
-@@ -2126,7 +2126,12 @@ static inline int l2cap_skbuff_fromiovec
- 	struct sk_buff **frag;
- 	int sent = 0;
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	if (copy_from_iter(skb_put(skb, count), count, &msg->msg_iter) != count)
-+#else
-+	if (chan->ops->memcpy_fromiovec(chan, skb_put(skb, count),
-+					msg->msg_iov, count))
-+#endif
- 		return -EFAULT;
- 
- 	sent += count;
-@@ -2146,8 +2151,13 @@ static inline int l2cap_skbuff_fromiovec
- 
- 		*frag = tmp;
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 		if (copy_from_iter(skb_put(*frag, count), count,
- 				   &msg->msg_iter) != count)
-+#else
-+		if (chan->ops->memcpy_fromiovec(chan, skb_put(*frag, count),
-+						msg->msg_iov, count))
-+#endif
- 			return -EFAULT;
- 
- 		sent += count;
---- a/net/bluetooth/l2cap_sock.c
-+++ b/net/bluetooth/l2cap_sock.c
-@@ -1383,6 +1383,15 @@ static struct sk_buff *l2cap_sock_alloc_
- 	return skb;
- }
- 
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+static int l2cap_sock_memcpy_fromiovec_cb(struct l2cap_chan *chan,
-+					  unsigned char *kdata,
-+					  struct iovec *iov, int len)
-+{
-+	return memcpy_fromiovec(kdata, iov, len);
-+}
-+#endif
-+
- static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
- {
- 	struct sock *sk = chan->data;
-@@ -1467,6 +1476,9 @@ static const struct l2cap_ops l2cap_chan
- 	.set_shutdown		= l2cap_sock_set_shutdown_cb,
- 	.get_sndtimeo		= l2cap_sock_get_sndtimeo_cb,
- 	.alloc_skb		= l2cap_sock_alloc_skb_cb,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	.memcpy_fromiovec	= l2cap_sock_memcpy_fromiovec_cb,
-+#endif
- };
- 
- static void l2cap_sock_destruct(struct sock *sk)
---- a/net/bluetooth/smp.c
-+++ b/net/bluetooth/smp.c
-@@ -612,7 +612,12 @@ static void smp_send_cmd(struct l2cap_co
- 
- 	memset(&msg, 0, sizeof(msg));
- 
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 	iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, iv, 2, 1 + len);
-+#else
-+	msg.msg_iov = (struct iovec *) &iv;
-+	msg.msg_iovlen = 2;
-+#endif
- 
- 	l2cap_chan_send(chan, &msg, 1 + len);
- 
-@@ -3066,6 +3071,9 @@ static const struct l2cap_ops smp_chan_o
- 	.suspend		= l2cap_chan_no_suspend,
- 	.set_shutdown		= l2cap_chan_no_set_shutdown,
- 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
-+#endif
- };
- 
- static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
-@@ -3114,6 +3122,9 @@ static const struct l2cap_ops smp_root_c
- 	.resume			= l2cap_chan_no_resume,
- 	.set_shutdown		= l2cap_chan_no_set_shutdown,
- 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
-+#endif
- };
- 
- static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
diff --git a/patches/0052-deactivate-ptp-pin/igb.patch b/patches/0052-deactivate-ptp-pin/igb.patch
deleted file mode 100644
index a82dd754..00000000
--- a/patches/0052-deactivate-ptp-pin/igb.patch
+++ /dev/null
@@ -1,136 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb.h
-+++ b/drivers/net/ethernet/intel/igb/igb.h
-@@ -443,7 +443,9 @@ struct igb_adapter {
- 	u32 tx_hwtstamp_timeouts;
- 	u32 rx_hwtstamp_cleared;
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- 	struct ptp_pin_desc sdp_config[IGB_N_SDP];
-+#endif
- 	struct {
- 		struct timespec64 start;
- 		struct timespec64 period;
---- a/drivers/net/ethernet/intel/igb/igb_ptp.c
-+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
-@@ -115,6 +115,7 @@ static cycle_t igb_ptp_read_82580(const
- 	return val;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- /* SYSTIM read access for I210/I211 */
- static void igb_ptp_read_i210(struct igb_adapter *adapter,
- 			      struct timespec64 *ts)
-@@ -133,6 +134,7 @@ static void igb_ptp_read_i210(struct igb
- 	ts->tv_sec = sec;
- 	ts->tv_nsec = nsec;
- }
-+#endif
- 
- static void igb_ptp_write_i210(struct igb_adapter *adapter,
- 			       const struct timespec64 *ts)
-@@ -265,6 +267,7 @@ static int igb_ptp_adjtime_82576(struct
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- static int igb_ptp_adjtime_i210(struct ptp_clock_info *ptp, s64 delta)
- {
- 	struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
-@@ -282,6 +285,7 @@ static int igb_ptp_adjtime_i210(struct p
- 
- 	return 0;
- }
-+#endif
- 
- static int igb_ptp_gettime_82576(struct ptp_clock_info *ptp,
- 				 struct timespec64 *ts)
-@@ -302,6 +306,7 @@ static int igb_ptp_gettime_82576(struct
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- static int igb_ptp_gettime_i210(struct ptp_clock_info *ptp,
- 				struct timespec64 *ts)
- {
-@@ -317,6 +322,7 @@ static int igb_ptp_gettime_i210(struct p
- 
- 	return 0;
- }
-+#endif
- 
- static int igb_ptp_settime_82576(struct ptp_clock_info *ptp,
- 				 const struct timespec64 *ts)
-@@ -337,6 +343,7 @@ static int igb_ptp_settime_82576(struct
- 	return 0;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- static int igb_ptp_settime_i210(struct ptp_clock_info *ptp,
- 				const struct timespec64 *ts)
- {
-@@ -598,6 +605,7 @@ static int igb_ptp_feature_enable_i210(s
- 
- 	return -EOPNOTSUPP;
- }
-+#endif
- 
- static int igb_ptp_feature_enable(struct ptp_clock_info *ptp,
- 				  struct ptp_clock_request *rq, int on)
-@@ -605,6 +613,7 @@ static int igb_ptp_feature_enable(struct
- 	return -EOPNOTSUPP;
- }
- 
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- static int igb_ptp_verify_pin(struct ptp_clock_info *ptp, unsigned int pin,
- 			      enum ptp_pin_function func, unsigned int chan)
- {
-@@ -618,6 +627,7 @@ static int igb_ptp_verify_pin(struct ptp
- 	}
- 	return 0;
- }
-+#endif
- 
- /**
-  * igb_ptp_tx_work
-@@ -1010,7 +1020,9 @@ void igb_ptp_init(struct igb_adapter *ad
- {
- 	struct e1000_hw *hw = &adapter->hw;
- 	struct net_device *netdev = adapter->netdev;
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- 	int i;
-+#endif
- 
- 	switch (hw->mac.type) {
- 	case e1000_82576:
-@@ -1051,6 +1063,7 @@ void igb_ptp_init(struct igb_adapter *ad
- 		/* Enable the timer functions by clearing bit 31. */
- 		wr32(E1000_TSAUXC, 0x0);
- 		break;
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- 	case e1000_i210:
- 	case e1000_i211:
- 		for (i = 0; i < IGB_N_SDP; i++) {
-@@ -1077,6 +1090,7 @@ void igb_ptp_init(struct igb_adapter *ad
- 		/* Enable the timer functions by clearing bit 31. */
- 		wr32(E1000_TSAUXC, 0x0);
- 		break;
-+#endif
- 	default:
- 		adapter->ptp_clock = NULL;
- 		return;
-@@ -1088,11 +1102,14 @@ void igb_ptp_init(struct igb_adapter *ad
- 	INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work);
- 
- 	/* Initialize the clock and overflow work for devices that need it. */
-+#if LINUX_VERSION_IS_GEQ(3,15,0)
- 	if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211)) {
- 		struct timespec64 ts = ktime_to_timespec64(ktime_get_real());
- 
- 		igb_ptp_settime_i210(&adapter->ptp_caps, &ts);
--	} else {
-+	} else
-+#endif
-+	{
- 		timecounter_init(&adapter->tc, &adapter->cc,
- 				 ktime_to_ns(ktime_get_real()));
- 
diff --git a/patches/0053-remove_wait_on_bit_timeout/btusb.patch b/patches/0053-remove_wait_on_bit_timeout/btusb.patch
deleted file mode 100644
index 52ed8b12..00000000
--- a/patches/0053-remove_wait_on_bit_timeout/btusb.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -1845,8 +1845,12 @@ static void btusb_intel_bootup(struct bt
- 		return;
- 
- 	if (test_and_clear_bit(BTUSB_BOOTING, &data->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 		smp_mb__after_atomic();
- 		wake_up_bit(&data->flags, BTUSB_BOOTING);
-+#else
-+		wake_up_interruptible(&data->hdev->req_wait_q);
-+#endif
- 	}
- }
- 
-@@ -1863,8 +1867,12 @@ static void btusb_intel_secure_send_resu
- 
- 	if (test_and_clear_bit(BTUSB_DOWNLOADING, &data->flags) &&
- 	    test_bit(BTUSB_FIRMWARE_LOADED, &data->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 		smp_mb__after_atomic();
- 		wake_up_bit(&data->flags, BTUSB_DOWNLOADING);
-+#else
-+		wake_up_interruptible(&data->hdev->req_wait_q);
-+#endif
- 	}
- }
- 
-@@ -2208,6 +2216,7 @@ static int btusb_setup_intel_new(struct
- 	 * and thus just timeout if that happens and fail the setup
- 	 * of this device.
- 	 */
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	err = wait_on_bit_timeout(&data->flags, BTUSB_DOWNLOADING,
- 				  TASK_INTERRUPTIBLE,
- 				  msecs_to_jiffies(5000));
-@@ -2222,6 +2231,31 @@ static int btusb_setup_intel_new(struct
- 		err = -ETIMEDOUT;
- 		goto done;
- 	}
-+#else
-+	if (test_bit(BTUSB_DOWNLOADING, &data->flags)) {
-+		DECLARE_WAITQUEUE(wait, current);
-+		signed long timeout;
-+
-+		add_wait_queue(&hdev->req_wait_q, &wait);
-+		set_current_state(TASK_INTERRUPTIBLE);
-+
-+		timeout = schedule_timeout(msecs_to_jiffies(5000));
-+
-+		remove_wait_queue(&hdev->req_wait_q, &wait);
-+
-+		if (signal_pending(current)) {
-+			BT_ERR("%s: Firmware loading interrupted", hdev->name);
-+			err = -EINTR;
-+			goto done;
-+		}
-+
-+		if (!timeout) {
-+			BT_ERR("%s: Firmware loading timeout", hdev->name);
-+			err = -ETIMEDOUT;
-+			goto done;
-+		}
-+	}
-+#endif
- 
- 	if (test_bit(BTUSB_FIRMWARE_FAILED, &data->flags)) {
- 		BT_ERR("%s: Firmware loading failed", hdev->name);
-@@ -2261,6 +2295,7 @@ done:
- 	 */
- 	BT_INFO("%s: Waiting for device to boot", hdev->name);
- 
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	err = wait_on_bit_timeout(&data->flags, BTUSB_BOOTING,
- 				  TASK_INTERRUPTIBLE,
- 				  msecs_to_jiffies(1000));
-@@ -2274,6 +2309,33 @@ done:
- 		BT_ERR("%s: Device boot timeout", hdev->name);
- 		return -ETIMEDOUT;
- 	}
-+#else
-+	if (test_bit(BTUSB_BOOTING, &data->flags)) {
-+		DECLARE_WAITQUEUE(wait, current);
-+		signed long timeout;
-+
-+		add_wait_queue(&hdev->req_wait_q, &wait);
-+		set_current_state(TASK_INTERRUPTIBLE);
-+
-+		/* Booting into operational firmware should not take
-+		 * longer than 1 second. However if that happens, then
-+		 * just fail the setup since something went wrong.
-+		 */
-+		timeout = schedule_timeout(msecs_to_jiffies(1000));
-+
-+		remove_wait_queue(&hdev->req_wait_q, &wait);
-+
-+		if (signal_pending(current)) {
-+			BT_ERR("%s: Device boot interrupted", hdev->name);
-+			return -EINTR;
-+		}
-+
-+		if (!timeout) {
-+			BT_ERR("%s: Device boot timeout", hdev->name);
-+			return -ETIMEDOUT;
-+		}
-+	}
-+#endif
- 
- 	rettime = ktime_get();
- 	delta = ktime_sub(rettime, calltime);
diff --git a/patches/0053-remove_wait_on_bit_timeout/hci_intel.patch b/patches/0053-remove_wait_on_bit_timeout/hci_intel.patch
deleted file mode 100644
index c32df12c..00000000
--- a/patches/0053-remove_wait_on_bit_timeout/hci_intel.patch
+++ /dev/null
@@ -1,180 +0,0 @@
---- a/drivers/bluetooth/hci_intel.c
-+++ b/drivers/bluetooth/hci_intel.c
-@@ -122,8 +122,9 @@ static u8 intel_convert_speed(unsigned i
- static int intel_wait_booting(struct hci_uart *hu)
- {
- 	struct intel_data *intel = hu->priv;
--	int err;
-+	int err = 0;
- 
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	err = wait_on_bit_timeout(&intel->flags, STATE_BOOTING,
- 				  TASK_INTERRUPTIBLE,
- 				  msecs_to_jiffies(1000));
-@@ -137,6 +138,33 @@ static int intel_wait_booting(struct hci
- 		bt_dev_err(hu->hdev, "Device boot timeout");
- 		return -ETIMEDOUT;
- 	}
-+#else
-+	if (test_bit(STATE_BOOTING, &intel->flags)) {
-+		DECLARE_WAITQUEUE(wait, current);
-+		signed long timeout;
-+
-+		add_wait_queue(&hu->hdev->req_wait_q, &wait);
-+		set_current_state(TASK_INTERRUPTIBLE);
-+
-+		/* Booting into operational firmware should not take
-+		 * longer than 1 second. However if that happens, then
-+		 * just fail the setup since something went wrong.
-+		 */
-+		timeout = schedule_timeout(msecs_to_jiffies(1000));
-+
-+		remove_wait_queue(&hu->hdev->req_wait_q, &wait);
-+
-+		if (signal_pending(current)) {
-+			BT_ERR("%s: Device boot interrupted", hu->hdev->name);
-+			return -EINTR;
-+		}
-+
-+		if (!timeout) {
-+			BT_ERR("%s: Device boot timeout", hu->hdev->name);
-+			return -ETIMEDOUT;
-+		}
-+	}
-+#endif
- 
- 	return err;
- }
-@@ -145,8 +173,9 @@ static int intel_wait_booting(struct hci
- static int intel_wait_lpm_transaction(struct hci_uart *hu)
- {
- 	struct intel_data *intel = hu->priv;
--	int err;
-+	int err = 0;
- 
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	err = wait_on_bit_timeout(&intel->flags, STATE_LPM_TRANSACTION,
- 				  TASK_INTERRUPTIBLE,
- 				  msecs_to_jiffies(1000));
-@@ -160,6 +189,29 @@ static int intel_wait_lpm_transaction(st
- 		bt_dev_err(hu->hdev, "LPM transaction timeout");
- 		return -ETIMEDOUT;
- 	}
-+#else
-+	if (test_bit(STATE_LPM_TRANSACTION, &intel->flags)) {
-+		DECLARE_WAITQUEUE(wait, current);
-+		signed long timeout;
-+
-+		add_wait_queue(&hu->hdev->req_wait_q, &wait);
-+		set_current_state(TASK_INTERRUPTIBLE);
-+
-+		timeout = schedule_timeout(msecs_to_jiffies(1000));
-+
-+		remove_wait_queue(&hu->hdev->req_wait_q, &wait);
-+
-+		if (signal_pending(current)) {
-+			BT_ERR("%s: LPM transaction interrupted", hu->hdev->name);
-+			return -EINTR;
-+		}
-+
-+		if (!timeout) {
-+			BT_ERR("%s: LPM transaction timeout", hu->hdev->name);
-+			return -ETIMEDOUT;
-+		}
-+	}
-+#endif
- 
- 	return err;
- }
-@@ -812,6 +864,7 @@ static int intel_setup(struct hci_uart *
- 	 * and thus just timeout if that happens and fail the setup
- 	 * of this device.
- 	 */
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	err = wait_on_bit_timeout(&intel->flags, STATE_DOWNLOADING,
- 				  TASK_INTERRUPTIBLE,
- 				  msecs_to_jiffies(5000));
-@@ -826,6 +879,33 @@ static int intel_setup(struct hci_uart *
- 		err = -ETIMEDOUT;
- 		goto done;
- 	}
-+#else
-+	if (test_bit(STATE_DOWNLOADING, &intel->flags)) {
-+		DECLARE_WAITQUEUE(wait, current);
-+		signed long timeout;
-+
-+		add_wait_queue(&hdev->req_wait_q, &wait);
-+		set_current_state(TASK_INTERRUPTIBLE);
-+
-+		/* Booting into operational firmware should not take
-+		 * longer than 1 second. However if that happens, then
-+		 * just fail the setup since something went wrong.
-+		 */
-+		timeout = schedule_timeout(msecs_to_jiffies(5000));
-+
-+		remove_wait_queue(&hdev->req_wait_q, &wait);
-+
-+		if (signal_pending(current)) {
-+			BT_ERR("%s: Firmware loading interrupted", hdev->name);
-+			return -EINTR;
-+		}
-+
-+		if (!timeout) {
-+			BT_ERR("%s: Firmware loading timeout", hdev->name);
-+			return -ETIMEDOUT;
-+		}
-+	}
-+#endif
- 
- 	if (test_bit(STATE_FIRMWARE_FAILED, &intel->flags)) {
- 		bt_dev_err(hdev, "Firmware loading failed");
-@@ -957,8 +1037,12 @@ static int intel_recv_event(struct hci_d
- 
- 		if (test_and_clear_bit(STATE_DOWNLOADING, &intel->flags) &&
- 		    test_bit(STATE_FIRMWARE_LOADED, &intel->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 			smp_mb__after_atomic();
- 			wake_up_bit(&intel->flags, STATE_DOWNLOADING);
-+#else
-+			wake_up_interruptible(&hu->hdev->req_wait_q);
-+#endif
- 		}
- 
- 	/* When switching to the operational firmware the device
-@@ -968,8 +1052,12 @@ static int intel_recv_event(struct hci_d
- 	} else if (skb->len == 9 && hdr->evt == 0xff && hdr->plen == 0x07 &&
- 		   skb->data[2] == 0x02) {
- 		if (test_and_clear_bit(STATE_BOOTING, &intel->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 			smp_mb__after_atomic();
- 			wake_up_bit(&intel->flags, STATE_BOOTING);
-+#else
-+			wake_up_interruptible(&hu->hdev->req_wait_q);
-+#endif
- 		}
- 	}
- recv:
-@@ -1008,15 +1096,23 @@ static int intel_recv_lpm(struct hci_dev
- 	case LPM_OP_SUSPEND_ACK:
- 		set_bit(STATE_SUSPENDED, &intel->flags);
- 		if (test_and_clear_bit(STATE_LPM_TRANSACTION, &intel->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 			smp_mb__after_atomic();
- 			wake_up_bit(&intel->flags, STATE_LPM_TRANSACTION);
-+#else
-+			wake_up_interruptible(&hu->hdev->req_wait_q);
-+#endif
- 		}
- 		break;
- 	case LPM_OP_RESUME_ACK:
- 		clear_bit(STATE_SUSPENDED, &intel->flags);
- 		if (test_and_clear_bit(STATE_LPM_TRANSACTION, &intel->flags)) {
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 			smp_mb__after_atomic();
- 			wake_up_bit(&intel->flags, STATE_LPM_TRANSACTION);
-+#else
-+			wake_up_interruptible(&hu->hdev->req_wait_q);
-+#endif
- 		}
- 		break;
- 	default:
diff --git a/patches/0062-acpi-gpio-remove/hci_bcm.patch b/patches/0062-acpi-gpio-remove/hci_bcm.patch
deleted file mode 100644
index 77e343ee..00000000
--- a/patches/0062-acpi-gpio-remove/hci_bcm.patch
+++ /dev/null
@@ -1,78 +0,0 @@
---- a/drivers/bluetooth/hci_bcm.c
-+++ b/drivers/bluetooth/hci_bcm.c
-@@ -29,7 +29,9 @@
- #include <linux/acpi.h>
- #include <linux/platform_device.h>
- #include <linux/clk.h>
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- #include <linux/gpio/consumer.h>
-+#endif
- #include <linux/tty.h>
- #include <linux/interrupt.h>
- #include <linux/dmi.h>
-@@ -148,8 +150,10 @@ static int bcm_gpio_set_power(struct bcm
- 	if (powered && !IS_ERR(dev->clk) && !dev->clk_enabled)
- 		clk_enable(dev->clk);
- 
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- 	gpiod_set_value(dev->shutdown, powered);
- 	gpiod_set_value(dev->device_wakeup, powered);
-+#endif
- 
- 	if (!powered && !IS_ERR(dev->clk) && dev->clk_enabled)
- 		clk_disable(dev->clk);
-@@ -520,7 +524,9 @@ static int bcm_suspend_device(struct dev
- 
- 	/* Suspend the device */
- 	if (bdev->device_wakeup) {
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- 		gpiod_set_value(bdev->device_wakeup, false);
-+#endif
- 		bt_dev_dbg(bdev, "suspend, delaying 15 ms");
- 		mdelay(15);
- 	}
-@@ -535,7 +541,9 @@ static int bcm_resume_device(struct devi
- 	bt_dev_dbg(bdev, "");
- 
- 	if (bdev->device_wakeup) {
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- 		gpiod_set_value(bdev->device_wakeup, true);
-+#endif
- 		bt_dev_dbg(bdev, "resume, delaying 15 ms");
- 		mdelay(15);
- 	}
-@@ -618,6 +626,7 @@ unlock:
- }
- #endif
- 
-+#if defined(CONFIG_ACPI) && LINUX_VERSION_IS_GEQ(3,19,0)
- static const struct acpi_gpio_params device_wakeup_gpios = { 0, 0, false };
- static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false };
- static const struct acpi_gpio_params host_wakeup_gpios = { 2, 0, false };
-@@ -629,7 +638,6 @@ static const struct acpi_gpio_mapping ac
- 	{ },
- };
- 
--#ifdef CONFIG_ACPI
- static u8 acpi_active_low = ACPI_ACTIVE_LOW;
- 
- /* IRQ polarity of some chipsets are not defined correctly in ACPI table. */
-@@ -812,7 +820,7 @@ static const struct hci_uart_proto bcm_p
- 	.dequeue	= bcm_dequeue,
- };
- 
--#ifdef CONFIG_ACPI
-+#if defined(CONFIG_ACPI) && LINUX_VERSION_IS_GEQ(3,19,0)
- static const struct acpi_device_id bcm_acpi_match[] = {
- 	{ "BCM2E1A", 0 },
- 	{ "BCM2E39", 0 },
-@@ -843,7 +851,9 @@ static struct platform_driver bcm_driver
- 	.remove = bcm_remove,
- 	.driver = {
- 		.name = "hci_bcm",
-+#if LINUX_VERSION_IS_GEQ(3,19,0)
- 		.acpi_match_table = ACPI_PTR(bcm_acpi_match),
-+#endif
- 		.pm = &bcm_pm_ops,
- 	},
- };
diff --git a/patches/0062-acpi-gpio-remove/hci_intel.patch b/patches/0062-acpi-gpio-remove/hci_intel.patch
deleted file mode 100644
index 9237ce97..00000000
--- a/patches/0062-acpi-gpio-remove/hci_intel.patch
+++ /dev/null
@@ -1,67 +0,0 @@
---- a/drivers/bluetooth/hci_intel.c
-+++ b/drivers/bluetooth/hci_intel.c
-@@ -29,7 +29,9 @@
- #include <linux/wait.h>
- #include <linux/tty.h>
- #include <linux/platform_device.h>
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- #include <linux/gpio/consumer.h>
-+#endif
- #include <linux/acpi.h>
- #include <linux/interrupt.h>
- #include <linux/pm_runtime.h>
-@@ -379,7 +381,9 @@ static int intel_set_power(struct hci_ua
- 		BT_INFO("hu %p, Switching compatible pm device (%s) to %u",
- 			hu, dev_name(&idev->pdev->dev), powered);
- 
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- 		gpiod_set_value(idev->reset, powered);
-+#endif
- 
- 		/* Provide to idev a hu reference which is used to run LPM
- 		 * transactions (lpm suspend/resume) from PM callbacks.
-@@ -1306,14 +1310,17 @@ static int intel_probe(struct platform_d
- 
- 	idev->pdev = pdev;
- 
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	idev->reset = devm_gpiod_get_optional(&pdev->dev, "reset",
- 					      GPIOD_OUT_LOW);
- 	if (IS_ERR(idev->reset)) {
- 		dev_err(&pdev->dev, "Unable to retrieve gpio\n");
- 		return PTR_ERR(idev->reset);
- 	}
-+#endif
- 
- 	idev->irq = platform_get_irq(pdev, 0);
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- 	if (idev->irq < 0) {
- 		struct gpio_desc *host_wake;
- 
-@@ -1332,12 +1339,15 @@ static int intel_probe(struct platform_d
- 			goto no_irq;
- 		}
- 	}
-+#endif
- 
- 	/* Only enable wake-up/irq when controller is powered */
- 	device_set_wakeup_capable(&pdev->dev, true);
- 	device_wakeup_disable(&pdev->dev);
- 
-+#if LINUX_VERSION_IS_GEQ(3,17,0)
- no_irq:
-+#endif
- 	platform_set_drvdata(pdev, idev);
- 
- 	/* Place this instance on the device list */
-@@ -1345,8 +1355,10 @@ no_irq:
- 	list_add_tail(&idev->list, &intel_device_list);
- 	mutex_unlock(&intel_device_list_lock);
- 
-+#if LINUX_VERSION_IS_GEQ(3,13,0)
- 	dev_info(&pdev->dev, "registered, gpio(%d)/irq(%d).\n",
- 		 desc_to_gpio(idev->reset), idev->irq);
-+#endif
- 
- 	return 0;
- }
diff --git a/patches/0072-netdevice-ndo_fdb_add/igb.patch b/patches/0072-netdevice-ndo_fdb_add/igb.patch
deleted file mode 100644
index 9dcac3d2..00000000
--- a/patches/0072-netdevice-ndo_fdb_add/igb.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/drivers/net/ethernet/intel/igb/igb_main.c
-+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -2078,7 +2078,11 @@ static int igb_set_features(struct net_d
- 
- static int igb_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
- 			   struct net_device *dev,
-+#if LINUX_VERSION_IS_LESS(3,19,0)
-+			   const unsigned char *addr,
-+#else
- 			   const unsigned char *addr, u16 vid,
-+#endif
- 			   u16 flags)
- {
- 	/* guarantee we can provide a unique filter for the unicast address */
diff --git a/patches/flow_dissector.patch b/patches/flow_dissector.patch
deleted file mode 100644
index 189a5c7a..00000000
--- a/patches/flow_dissector.patch
+++ /dev/null
@@ -1,234 +0,0 @@
---- a/compat/net-core-flow_dissector.c
-+++ b/compat/net-core-flow_dissector.c
-@@ -177,229 +177,10 @@ ipv6:
- 
- 	flow->ip_proto = ip_proto;
- 	flow->ports = skb_flow_get_ports(skb, nhoff, ip_proto);
-+#if LINUX_VERSION_IS_GEQ(3,9,0)
- 	flow->thoff = (u16) nhoff;
-+#endif
- 
- 	return true;
- }
- EXPORT_SYMBOL(skb_flow_dissect);
--
--static u32 hashrnd __read_mostly;
--static __always_inline void __flow_hash_secret_init(void)
--{
--	net_get_random_once(&hashrnd, sizeof(hashrnd));
--}
--
--static __always_inline u32 __flow_hash_3words(u32 a, u32 b, u32 c)
--{
--	__flow_hash_secret_init();
--	return jhash_3words(a, b, c, hashrnd);
--}
--
--static __always_inline u32 __flow_hash_1word(u32 a)
--{
--	__flow_hash_secret_init();
--	return jhash_1word(a, hashrnd);
--}
--
--/*
-- * __skb_get_hash: calculate a flow hash based on src/dst addresses
-- * and src/dst port numbers.  Sets hash in skb to non-zero hash value
-- * on success, zero indicates no valid hash.  Also, sets l4_hash in skb
-- * if hash is a canonical 4-tuple hash over transport ports.
-- */
--void __skb_get_hash(struct sk_buff *skb)
--{
--	struct flow_keys keys;
--	u32 hash;
--
--	if (!skb_flow_dissect(skb, &keys))
--		return;
--
--	if (keys.ports)
--		skb->l4_hash = 1;
--
--	/* get a consistent hash (same value on both flow directions) */
--	if (((__force u32)keys.dst < (__force u32)keys.src) ||
--	    (((__force u32)keys.dst == (__force u32)keys.src) &&
--	     ((__force u16)keys.port16[1] < (__force u16)keys.port16[0]))) {
--		swap(keys.dst, keys.src);
--		swap(keys.port16[0], keys.port16[1]);
--	}
--
--	hash = __flow_hash_3words((__force u32)keys.dst,
--				  (__force u32)keys.src,
--				  (__force u32)keys.ports);
--	if (!hash)
--		hash = 1;
--
--	skb->hash = hash;
--}
--EXPORT_SYMBOL(__skb_get_hash);
--
--/*
-- * Returns a Tx hash based on the given packet descriptor a Tx queues' number
-- * to be used as a distribution range.
-- */
--u16 __skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb,
--		  unsigned int num_tx_queues)
--{
--	u32 hash;
--	u16 qoffset = 0;
--	u16 qcount = num_tx_queues;
--
--	if (skb_rx_queue_recorded(skb)) {
--		hash = skb_get_rx_queue(skb);
--		while (unlikely(hash >= num_tx_queues))
--			hash -= num_tx_queues;
--		return hash;
--	}
--
--	if (dev->num_tc) {
--		u8 tc = netdev_get_prio_tc_map(dev, skb->priority);
--		qoffset = dev->tc_to_txq[tc].offset;
--		qcount = dev->tc_to_txq[tc].count;
--	}
--
--	if (skb->sk && skb->sk->sk_hash)
--		hash = skb->sk->sk_hash;
--	else
--		hash = (__force u16) skb->protocol;
--	hash = __flow_hash_1word(hash);
--
--	return (u16) (((u64) hash * qcount) >> 32) + qoffset;
--}
--EXPORT_SYMBOL(__skb_tx_hash);
--
--/* __skb_get_poff() returns the offset to the payload as far as it could
-- * be dissected. The main user is currently BPF, so that we can dynamically
-- * truncate packets without needing to push actual payload to the user
-- * space and can analyze headers only, instead.
-- */
--u32 __skb_get_poff(const struct sk_buff *skb)
--{
--	struct flow_keys keys;
--	u32 poff = 0;
--
--	if (!skb_flow_dissect(skb, &keys))
--		return 0;
--
--	poff += keys.thoff;
--	switch (keys.ip_proto) {
--	case IPPROTO_TCP: {
--		const struct tcphdr *tcph;
--		struct tcphdr _tcph;
--
--		tcph = skb_header_pointer(skb, poff, sizeof(_tcph), &_tcph);
--		if (!tcph)
--			return poff;
--
--		poff += max_t(u32, sizeof(struct tcphdr), tcph->doff * 4);
--		break;
--	}
--	case IPPROTO_UDP:
--	case IPPROTO_UDPLITE:
--		poff += sizeof(struct udphdr);
--		break;
--	/* For the rest, we do not really care about header
--	 * extensions at this point for now.
--	 */
--	case IPPROTO_ICMP:
--		poff += sizeof(struct icmphdr);
--		break;
--	case IPPROTO_ICMPV6:
--		poff += sizeof(struct icmp6hdr);
--		break;
--	case IPPROTO_IGMP:
--		poff += sizeof(struct igmphdr);
--		break;
--	case IPPROTO_DCCP:
--		poff += sizeof(struct dccp_hdr);
--		break;
--	case IPPROTO_SCTP:
--		poff += sizeof(struct sctphdr);
--		break;
--	}
--
--	return poff;
--}
--
--static inline int get_xps_queue(struct net_device *dev, struct sk_buff *skb)
--{
--#ifdef CONFIG_XPS
--	struct xps_dev_maps *dev_maps;
--	struct xps_map *map;
--	int queue_index = -1;
--
--	rcu_read_lock();
--	dev_maps = rcu_dereference(dev->xps_maps);
--	if (dev_maps) {
--		map = rcu_dereference(
--		    dev_maps->cpu_map[raw_smp_processor_id()]);
--		if (map) {
--			if (map->len == 1)
--				queue_index = map->queues[0];
--			else {
--				u32 hash;
--				if (skb->sk && skb->sk->sk_hash)
--					hash = skb->sk->sk_hash;
--				else
--					hash = (__force u16) skb->protocol ^
--					    skb->hash;
--				hash = __flow_hash_1word(hash);
--				queue_index = map->queues[
--				    ((u64)hash * map->len) >> 32];
--			}
--			if (unlikely(queue_index >= dev->real_num_tx_queues))
--				queue_index = -1;
--		}
--	}
--	rcu_read_unlock();
--
--	return queue_index;
--#else
--	return -1;
--#endif
--}
--
--static u16 __netdev_pick_tx(struct net_device *dev, struct sk_buff *skb)
--{
--	struct sock *sk = skb->sk;
--	int queue_index = sk_tx_queue_get(sk);
--
--	if (queue_index < 0 || skb->ooo_okay ||
--	    queue_index >= dev->real_num_tx_queues) {
--		int new_index = get_xps_queue(dev, skb);
--		if (new_index < 0)
--			new_index = skb_tx_hash(dev, skb);
--
--		if (queue_index != new_index && sk &&
--		    rcu_access_pointer(sk->sk_dst_cache))
--			sk_tx_queue_set(sk, new_index);
--
--		queue_index = new_index;
--	}
--
--	return queue_index;
--}
--
--struct netdev_queue *netdev_pick_tx(struct net_device *dev,
--				    struct sk_buff *skb,
--				    void *accel_priv)
--{
--	int queue_index = 0;
--
--	if (dev->real_num_tx_queues != 1) {
--		const struct net_device_ops *ops = dev->netdev_ops;
--		if (ops->ndo_select_queue)
--			queue_index = ops->ndo_select_queue(dev, skb, accel_priv,
--							    __netdev_pick_tx);
--		else
--			queue_index = __netdev_pick_tx(dev, skb);
--
--		if (!accel_priv)
--			queue_index = netdev_cap_txqueue(dev, queue_index);
--	}
--
--	skb_set_queue_mapping(skb, queue_index);
--	return netdev_get_tx_queue(dev, queue_index);
--}
