diff options
Diffstat (limited to 'wl1271/platforms/os/linux')
-rw-r--r-- | wl1271/platforms/os/linux/inc/tracebuf.h | 2 | ||||
-rw-r--r-- | wl1271/platforms/os/linux/inc/wbuf.h | 12 | ||||
-rw-r--r-- | wl1271/platforms/os/linux/src/RxBuf.c | 3 | ||||
-rw-r--r-- | wl1271/platforms/os/linux/src/osmemapi.c | 14 |
4 files changed, 17 insertions, 14 deletions
diff --git a/wl1271/platforms/os/linux/inc/tracebuf.h b/wl1271/platforms/os/linux/inc/tracebuf.h index 249b7851..441ef1eb 100644 --- a/wl1271/platforms/os/linux/inc/tracebuf.h +++ b/wl1271/platforms/os/linux/inc/tracebuf.h @@ -40,7 +40,7 @@ #define TB_TRACE_H -#define TB_MALLOC(size) kmalloc(size, GFP_ATOMIC); +#define TB_MALLOC(size) kmalloc(size, GFP_KERNEL); #define TB_FREE kfree #define TB_PRINTF printk #define TB_ID current->pid diff --git a/wl1271/platforms/os/linux/inc/wbuf.h b/wl1271/platforms/os/linux/inc/wbuf.h index 1dbeb1d7..4894cd65 100644 --- a/wl1271/platforms/os/linux/inc/wbuf.h +++ b/wl1271/platforms/os/linux/inc/wbuf.h @@ -108,9 +108,15 @@ typedef struct */ static inline WBUF *WbufAlloc (TI_HANDLE hOs, TI_UINT32 len) { - WBUF *pWbuf = alloc_skb (len + WSPI_PAD_BYTES, GFP_ATOMIC); - WBUF_DATA (pWbuf) += WSPI_PAD_BYTES; - return pWbuf; + gfp_t flags = (in_atomic()) ? GFP_ATOMIC : GFP_KERNEL; + WBUF *pWbuf = alloc_skb(len + WSPI_PAD_BYTES, flags); + + if (!pWbuf) + { + return NULL; + } + WBUF_DATA (pWbuf) += WSPI_PAD_BYTES; + return pWbuf; } #define WbufFree(hOs, pWbuf) ( dev_kfree_skb((struct sk_buff *)pWbuf) ) diff --git a/wl1271/platforms/os/linux/src/RxBuf.c b/wl1271/platforms/os/linux/src/RxBuf.c index 4a18acf3..bda7c10e 100644 --- a/wl1271/platforms/os/linux/src/RxBuf.c +++ b/wl1271/platforms/os/linux/src/RxBuf.c @@ -51,8 +51,9 @@ void *RxBufAlloc(TI_HANDLE hOs, TI_UINT32 len,PacketClassTag_e ePacketClassTag) TI_UINT32 alloc_len = len + WSPI_PAD_BYTES + PAYLOAD_ALIGN_PAD_BYTES + RX_HEAD_LEN_ALIGNED; struct sk_buff *skb; rx_head_t *rx_head; + gfp_t flags = (in_atomic()) ? GFP_ATOMIC : GFP_KERNEL; - skb = alloc_skb(alloc_len, GFP_ATOMIC); + skb = alloc_skb(alloc_len, flags); if (!skb) { return NULL; diff --git a/wl1271/platforms/os/linux/src/osmemapi.c b/wl1271/platforms/os/linux/src/osmemapi.c index 85a77535..e71d3030 100644 --- a/wl1271/platforms/os/linux/src/osmemapi.c +++ b/wl1271/platforms/os/linux/src/osmemapi.c @@ -99,6 +99,7 @@ os_memoryAlloc( { struct os_mem_block *blk; __u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32); + gfp_t flags = (in_atomic()) ? GFP_ATOMIC : GFP_KERNEL; #ifdef TI_MEM_ALLOC_TRACE os_printf("MTT:%s:%d ::os_memoryAlloc(0x%p, %lu) : %lu\n",__FUNCTION__, __LINE__,OsContext,Size,total_size); @@ -115,14 +116,7 @@ os_memoryAlloc( if (total_size < 2 * 4096) #endif { - if (in_atomic()) - { - blk = kmalloc(total_size, GFP_ATOMIC); - } - else - { - blk = kmalloc(total_size, GFP_KERNEL); - } + blk = kmalloc(total_size, flags); if (!blk) { printk("%s: NULL\n",__func__); @@ -303,13 +297,15 @@ os_memoryAlloc4HwDma( { struct os_mem_block *blk; __u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32); + gfp_t flags = (in_atomic()) ? GFP_ATOMIC : GFP_KERNEL; + /* if the size is greater than 2 pages then we cant allocate the memory through kmalloc so the function fails */ if (Size < 2 * OS_PAGE_SIZE) { - blk = kmalloc(total_size, GFP_ATOMIC|GFP_DMA); + blk = kmalloc(total_size, flags | GFP_DMA); if (!blk) { printk("%s: NULL\n",__func__); return NULL; |