diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2010-05-13 18:25:20 -0700 |
---|---|---|
committer | Dmitry Shmidt <dimitrysh@google.com> | 2010-05-13 18:28:15 -0700 |
commit | 4d7c6cbda8f292beb38cbf6bd0abbd05555e3e90 (patch) | |
tree | 89f09023f5c2aec59249f84039cf143aa65c8166 /wl1271/platforms | |
parent | 23f1bd9e9114d77087c7b8fafbcadf97de70c662 (diff) | |
download | wlan-tools_r7.tar.gz |
wl1271: Fix recovery mechanism and buffer allocationandroid-sdk-tools_r7android-sdk-2.2_r2android-cts-2.2_r8android-cts-2.2_r7android-cts-2.2_r6android-cts-2.2_r5android-cts-2.2_r4android-cts-2.2_r3android-cts-2.2_r2android-cts-2.2_r1android-adt-0.9.9android-adt-0.9.8android-2.2_r1.3android-2.2_r1.2android-2.2_r1.1android-2.2_r1android-2.2.3_r2.1android-2.2.3_r2android-2.2.3_r1android-2.2.2_r1android-2.2.1_r2android-2.2.1_r1tools_r9tools_r8tools_r7froyo-releasefroyo-plus-aospfroyo
Change-Id: I342dbeaeff034403d7f23398411a84996ca3eb08
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'wl1271/platforms')
-rw-r--r-- | wl1271/platforms/hw/linux/SdioAdapter.c | 4 | ||||
-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 |
5 files changed, 19 insertions, 16 deletions
diff --git a/wl1271/platforms/hw/linux/SdioAdapter.c b/wl1271/platforms/hw/linux/SdioAdapter.c index 6abed57..aa223ba 100644 --- a/wl1271/platforms/hw/linux/SdioAdapter.c +++ b/wl1271/platforms/hw/linux/SdioAdapter.c @@ -148,7 +148,7 @@ int sdioAdapt_ConnectBus (void * fCbFunc, } /* Provide the DMA buffer address to the upper layer so it will use it as the transactions host buffer. */ if (pTxDmaSrcAddr) { /* Dm: check what to do with it */ - *pTxDmaSrcAddr = kmalloc(TIWLAN_MMC_MAX_DMA, GFP_ATOMIC | GFP_DMA); + *pTxDmaSrcAddr = kmalloc(TIWLAN_MMC_MAX_DMA, GFP_KERNEL | GFP_DMA); } return 0; } @@ -309,7 +309,7 @@ int sdioAdapt_ConnectBus (void * fCbFunc, /* Allocate a DMA-able buffer and provide it to the upper layer to be used for all read and write transactions */ if (pDmaBufAddr == 0) /* allocate only once (in case this function is called multiple times) */ { - pDmaBufAddr = kmalloc (MAX_BUS_TXN_SIZE, GFP_ATOMIC | GFP_DMA); + pDmaBufAddr = kmalloc(MAX_BUS_TXN_SIZE, GFP_KERNEL | GFP_DMA); if (pDmaBufAddr == 0) { iStatus = -1; diff --git a/wl1271/platforms/os/linux/inc/tracebuf.h b/wl1271/platforms/os/linux/inc/tracebuf.h index 249b785..441ef1e 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 1dbeb1d..4894cd6 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 4a18acf..bda7c10 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 85a7753..e71d303 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; |