Android(安卓)Tethering can't been open(QCOM平台)
16lz
2021-12-04
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) -- |
更多相关文章
- ADT20新建项目Android(安卓)Support library not installed问题
- Android(安卓)Studio 3.6.3 中遇到无法创建FileHasher类型的服务
- android不能显示log的问题
- 问题小结(6)-listview滚动条相关
- 教你怎么配置Android的AndroidManifest.xml让你不用重复新建项目
- android maven 签名
- 自定义android模块不编译的问题
- Android(安卓)Studio 使用NDK编译时常见的问题
- ListView与Button的共存问题解决(点击事件)