@@ -10,4 +10,16 @@
#define __GFP_KSWAPD_RECLAIM ((__force gfp_t)___GFP_KSWAPD_RECLAIM) /* kswapd can wake */
#endif
+#if LINUX_VERSION_IS_LESS(4,10,0) && LINUX_VERSION_IS_GEQ(4,2,0)
+#define page_frag_alloc LINUX_BACKPORT(page_frag_alloc)
+static inline void *page_frag_alloc(struct page_frag_cache *nc,
+ unsigned int fragsz, gfp_t gfp_mask)
+{
+ return __alloc_page_frag(nc, fragsz, gfp_mask);
+}
+
+#define __page_frag_cache_drain LINUX_BACKPORT(__page_frag_cache_drain)
+void __page_frag_cache_drain(struct page *page, unsigned int count);
+#endif /* < 4.10 && >= 4.2 */
+
#endif /* __BACKPORT_LINUX_GFP_H */
@@ -12,6 +12,8 @@
#include <linux/netdevice.h>
#include <linux/ethtool.h>
#include <linux/mii.h>
+#include <linux/page_ref.h>
+#include <linux/gfp.h>
#if LINUX_VERSION_IS_GEQ(4,6,0)
#if LINUX_VERSION_IS_LESS(4,7,0)
@@ -252,3 +254,23 @@ int mii_ethtool_get_link_ksettings(struct mii_if_info *mii,
}
EXPORT_SYMBOL(mii_ethtool_get_link_ksettings);
#endif /* LINUX_VERSION_IS_GEQ(4,6,0) */
+
+#if LINUX_VERSION_IS_GEQ(4,2,0)
+void __page_frag_cache_drain(struct page *page, unsigned int count)
+{
+ VM_BUG_ON_PAGE(page_ref_count(page) == 0, page);
+
+ if (page_ref_sub_and_test(page, count)) {
+ unsigned int order = compound_order(page);
+
+ /*
+ * __free_pages_ok() is not exported so call
+ * __free_pages() which decrements the ref counter
+ * and increment the ref counter before.
+ */
+ page_ref_inc(page);
+ __free_pages(page, order);
+ }
+}
+EXPORT_SYMBOL_GPL(__page_frag_cache_drain);
+#endif
@@ -71,11 +71,12 @@ RSI_SDIO 3.13
# For Coexsitence the BT driver has to export rsi_bt_ops
RSI_COEX 4.17
-# depends on devm_led_classdev_register()
+# depends on devm_led_classdev_register() and struct page_frag_cache
# (can't use MT76_CORE for this as it's selected)
-MT76x0U 4.1
-MT76x2E 4.1
-MT76x2U 4.1
+MT76x0U 4.2
+MT76x0E 4.2
+MT76x2E 4.2
+MT76x2U 4.2
# select_queue_fallback_t is missing
RTL8723BS 3.14
This was introduced in kernel commit 8c2dd3e4a4b ("mm: rename __alloc_page_frag to page_frag_alloc and __free_page_frag to page_frag_free") and commit 44fdffd7050 ("mm: add support for releasing multiple instances of a page") and is used by the mt76 driver. Backporting it to kernel older than 4.2 is harder so just do it till that version. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- backport/backport-include/linux/gfp.h | 12 ++++++++++++ backport/compat/backport-4.10.c | 22 ++++++++++++++++++++++ dependencies | 9 +++++---- 3 files changed, 39 insertions(+), 4 deletions(-)