Android Tethering can't been open(QCOM平台)
16lz
2021-01-23
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 |
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) -- |
更多相关文章
- http://dl-ssl.google.com/android上不去解决方案
- Android 读取TXT 文件中文乱码 解决方案
- android解决方案链接
- Android解决禁止使用http协议的方案
- android Sqlite多线程访问异常解决方案
- Android 完美扩大ImageView的点击范围方案
- Android加载大图Bitmap发生OOM(Out Of Memmory Error)解决方案
- Android SDK Manager国内无法更新的解决方案
- Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1