From c6d785d033fb3c5bcc83d65597561af744b903f6 Mon Sep 17 00:00:00 2001 From: Houston Hoffman Date: Mon, 16 Oct 2017 15:23:52 -0700 Subject: [PATCH] qcacmn: Support non atomic skb allocation Improve reliability of skb allocations from non atomic callers by letting them sleep. Change-Id: If5a594519902ebe549fbc1ebd8c0eb97679cdcae CRs-Fixed: 2127770 --- qdf/linux/src/qdf_nbuf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 835106056c87..ef168cd147f4 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -384,11 +384,15 @@ struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve, { struct sk_buff *skb; unsigned long offset; + int flags = GFP_KERNEL; if (align) size += (align - 1); - skb = dev_alloc_skb(size); + if (in_interrupt() || irqs_disabled() || in_atomic()) + flags = GFP_ATOMIC; + + skb = __netdev_alloc_skb(NULL, size, flags); if (skb) goto skb_alloc;