1. 问题描述

(1)Using the SD card to burn the version of KK.Wi-Fi tethering turn ON is OK. (2)Using the SD card to burn the version of L. Wi-Fi tethering turn ON is OK. (3)Plug in charge. (4)Waiting for a few minutes. Wi-Fi tethering turn ON is fail.
When we restart the Phone that the problem will not reappear.


2. 问题分析

16:11:39.848 2 859:1185 KERN_ERR wireless/wcnss/wcnss_prealloc.c(86) [ 422.147325] wcnss: wcnss_prealloc_get: prealloc not available for size: 84480 16:11:39.856 2 859:1185 KERN_WARNING /android/kernel/mm/page_alloc.c(2063) [ 422.155532] WifiStateMachin: page allocation failure: order:5, mode:0x40d0
3.修改方案

diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 70fd0c7..899d0c9 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -190,9 +190,14 @@ static eHalStatus initSmeCmdList(tpAniSirGlobal pMac)                                                &pMac->sme.smeCmdFreeList)))          goto end;    -    pCmd = vos_mem_malloc(sizeof(tSmeCmd) * pMac->sme.totalSmeCmd); +    pCmd = (tSmeCmd *) vos_mem_vmalloc(sizeof(tSmeCmd) * pMac->sme.totalSmeCmd);       if ( NULL == pCmd ) +    { +       VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, +                 FL("fail to allocate memory %lu"), +                    (unsigned long)(sizeof(tSmeCmd) * pMac->sme.totalSmeCmd));          status = eHAL_STATUS_FAILURE; +    }       else       {          status = eHAL_STATUS_SUCCESS; @@ -338,7 +343,7 @@ static eHalStatus freeSmeCmdList(tpAniSirGlobal pMac)          if(NULL != pMac->sme.pSmeCmdBufAddr)       { -        vos_mem_free(pMac->sme.pSmeCmdBufAddr); +        vos_mem_vfree(pMac->sme.pSmeCmdBufAddr);           pMac->sme.pSmeCmdBufAddr = NULL;       }    diff --git a/CORE/VOSS/inc/vos_memory.h b/CORE/VOSS/inc/vos_memory.h index 85847d1..69e97d3 100644 --- a/CORE/VOSS/inc/vos_memory.h +++ b/CORE/VOSS/inc/vos_memory.h @@ -1,5 +1,5 @@   /* - * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.    *    * Previously licensed under the ISC license by Qualcomm Atheros, Inc.    * @@ -304,4 +304,32 @@ v_VOID_t vos_mem_dma_free( v_VOID_t *ptr );     --------------------------------------------------------------------------*/   v_VOID_t vos_mem_set_dma_ptr(unsigned char *dmaBuffer);   #endif /* DMA_DIRECT_ACCESS */ + + +/*---------------------------------------------------------------------------- + +  \brief vos_mem_vmalloc() - allocate memory which is virtually contiguous + +  Wrapper function for vmalloc + +  \param size memory size to be allocated + +  \return on success returns starting address of allocated memory or NULL + +  --------------------------------------------------------------------------*/ +v_VOID_t * vos_mem_vmalloc(v_SIZE_t size); + +/*---------------------------------------------------------------------------- + +  \brief vos_mem_vfree() - free memory allocated by vmalloc + +  Wrapper function for vfree + +  \param address starting address of the memory to be freed + +  \return Nothing + +  --------------------------------------------------------------------------*/ +v_VOID_t vos_mem_vfree(void *addr); +   #endif // __VOSS_LOCK_H diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c index 7690c1b..2db0ca6 100644 --- a/CORE/VOSS/src/vos_memory.c +++ b/CORE/VOSS/src/vos_memory.c @@ -1,5 +1,5 @@   /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.    *    * Previously licensed under the ISC license by Qualcomm Atheros, Inc.    * @@ -58,6 +58,7 @@    * ------------------------------------------------------------------------*/   #include "vos_memory.h"   #include "vos_trace.h" +#include       #ifdef CONFIG_WCNSS_MEM_PRE_ALLOC   #include  @@ -337,6 +338,31 @@ v_VOID_t vos_mem_free( v_VOID_t *ptr )   }   #endif    +v_VOID_t * vos_mem_vmalloc(v_SIZE_t size) +{ +    if (size == 0 || size >= (1024*1024)) +    { +        VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, +                  "%s invalid size: %u", __func__, size); +        return NULL; +    } + +    return vmalloc(size); +} + +v_VOID_t vos_mem_vfree(void *addr) +{ +    if (addr == NULL) +    { +        VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, +                  "%s NULL address passed to free", __func__); +        return; +    } + +    vfree(addr); +    return; +} +   v_VOID_t vos_mem_set( v_VOID_t *ptr, v_SIZE_t numBytes, v_BYTE_t value )   {      if (ptr == NULL) -- 





更多相关文章

  1. http://dl-ssl.google.com/android上不去解决方案
  2. Android 读取TXT 文件中文乱码 解决方案
  3. android解决方案链接
  4. Android解决禁止使用http协议的方案
  5. android Sqlite多线程访问异常解决方案
  6. Android 完美扩大ImageView的点击范围方案
  7. Android加载大图Bitmap发生OOM(Out Of Memmory Error)解决方案
  8. Android SDK Manager国内无法更新的解决方案
  9. Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1

随机推荐

  1. Android(安卓)升级到android studio 2.2
  2. Android Support v4、v7、v13的区别和应
  3. Android4.4支持使用DevTools对原生Androi
  4. Android MediaStore数据之增删查改剖析
  5. 让Android中的webview支持页面中的文件上
  6. Android之——多线程下载示例
  7. Android倒计时Button
  8. Android的调试原理--学习笔记
  9. Windows Phone 7 不温不火学习之《ListBo
  10. android 调用系统 录像,录音等