当前位置: 技术问答>linux和unix
嵌入式2.6.8对自旋锁分配内存失败
来源: 互联网 发布时间:2016-03-02
本文导语: 小弟最近在升级一个无线芯片的驱动程序,从嵌入式Linux的2.4.18到2.6.8,碰到了一个调用kmalloc分配内存失败的情况,具体的我先帖一小段代码: tSize = sizeof(spinlock_t);// Allocate memory for the spinlock tStatus = ...
小弟最近在升级一个无线芯片的驱动程序,从嵌入式Linux的2.4.18到2.6.8,碰到了一个调用kmalloc分配内存失败的情况,具体的我先帖一小段代码:
tSize = sizeof(spinlock_t);// Allocate memory for the spinlock
tStatus = PhgOsalMalloc(pvAdapterHandle, (UINT32*)&tSize,0, &pLockCtx->pvLockObj);
似乎是给自旋锁分配内存的时候出错了,下面贴出PhgOsalMalloc函数原型
UINT8 PhgOsalMalloc(IN PHG_OSAL_PCB pvHosalHandle, IN UINT32 *pSize,
IN UINT32 u32ParamFlags, IN OUT PVOID *ppvPtr )
{ UINT32 u32Flags = 0;
if (0 == *pSize)
{
DBG_MSG_VBOSE("Failed! Leaving...n");
return OSAL_STATUS_FAILURE;
}
u32Flags = (u32ParamFlags == OSA_MEM_DMA)?
GFP_ATOMIC | GFP_DMA: GFP_ATOMIC;
*ppvPtr = kmalloc(*pSize,u32Flags);
if (*ppvPtr == NULL)
{ DBG_MSG_ERRO("Failed! Leaving...n");
return OSAL_STATUS_FAILURE;
}
return OSAL_STATUS_SUCCESS;
}
先初步确定是在*ppvPtr = kmalloc(*pSize,u32Flags);这行出错了(调试信息"Failed! Leaving...n"输出了);,在我原来的嵌入式Linux的2.4.18的平台上没有问题,现在升级到2.6.8就出错了,我对自旋锁这方面不太理解,请高手帮忙看看啊,先谢了。
tSize = sizeof(spinlock_t);// Allocate memory for the spinlock
tStatus = PhgOsalMalloc(pvAdapterHandle, (UINT32*)&tSize,0, &pLockCtx->pvLockObj);
似乎是给自旋锁分配内存的时候出错了,下面贴出PhgOsalMalloc函数原型
UINT8 PhgOsalMalloc(IN PHG_OSAL_PCB pvHosalHandle, IN UINT32 *pSize,
IN UINT32 u32ParamFlags, IN OUT PVOID *ppvPtr )
{ UINT32 u32Flags = 0;
if (0 == *pSize)
{
DBG_MSG_VBOSE("Failed! Leaving...n");
return OSAL_STATUS_FAILURE;
}
u32Flags = (u32ParamFlags == OSA_MEM_DMA)?
GFP_ATOMIC | GFP_DMA: GFP_ATOMIC;
*ppvPtr = kmalloc(*pSize,u32Flags);
if (*ppvPtr == NULL)
{ DBG_MSG_ERRO("Failed! Leaving...n");
return OSAL_STATUS_FAILURE;
}
return OSAL_STATUS_SUCCESS;
}
先初步确定是在*ppvPtr = kmalloc(*pSize,u32Flags);这行出错了(调试信息"Failed! Leaving...n"输出了);,在我原来的嵌入式Linux的2.4.18的平台上没有问题,现在升级到2.6.8就出错了,我对自旋锁这方面不太理解,请高手帮忙看看啊,先谢了。
|
和自旋锁应该没有关系,建议检查一下pLockCtx->pvLockObj,或者用局部变量替代测试一下。另外2个地方的调试信息好像都是"Failed! Leaving...n",应该确认过是后者了吧,呵呵。
BTW,看起来你用的是NXP的BGWxxx芯片,请注意其driver(for 2.4)还是有挺多bugs的。
BTW,看起来你用的是NXP的BGWxxx芯片,请注意其driver(for 2.4)还是有挺多bugs的。