diff options
| -rw-r--r-- | qdf/linux/src/qdf_nbuf.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 6606df6a4cbf..2b2690785109 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -286,8 +286,18 @@ struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve, if (align) size += (align - 1); - if (in_interrupt() || irqs_disabled() || in_atomic()) + if (in_interrupt() || irqs_disabled() || in_atomic()) { flags = GFP_ATOMIC; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) + /* + * Observed that kcompactd burns out CPU to make order-3 page. + *__netdev_alloc_skb has 4k page fallback option just in case of + * failing high order page allocation so we don't need to be + * hard. Make kcompactd rest in piece. + */ + flags = flags & ~__GFP_KSWAPD_RECLAIM; +#endif + } skb = __netdev_alloc_skb(NULL, size, flags); |
