RE: DSPBRIDGE: Reclaim all pending buffer on resource cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>-----Original Message-----
>From: Ramirez Luna, Omar
>Sent: Tuesday, February 16, 2010 12:13 PM
>To: Guzman Lugo, Fernando
>Cc: linux-omap; Hiroshi Doyu; Ameya Palande; Felipe Contreras
>Subject: Re: DSPBRIDGE: Reclaim all pending buffer on resource cleanup
>
>Hi,
>
>On 2/8/2010 4:20 PM, Guzman Lugo, Fernando wrote:
>>  From 727c83cd8b7e4aca51b214412eaa1b95cde6e4ea Mon Sep 17 00:00:00 2001
>> From: Fernando Guzman Lugo<x0095840@xxxxxx>
>> Date: Tue, 2 Feb 2010 20:38:10 -0600
>> Subject: [PATCH] DSPBRIDGE: Reclaim all pending buffer on resource
>cleanup
>>
>> Before in case of pending buffer while we try to close
>> a stream, it was doing only one reclaim, in the case there
>> were more pending buffer the second STRM_Close would also
>> fail, now all the pending buffers are reclaim.
>>
>> Signed-off-by: Fernando Guzman Lugo<x0095840@xxxxxx>
>> ---
>
>Shouldn't this be like?
>Patch 1: Fix
>Patch 2: code enhancement
>
>that said, isn't this missing a STRM_Close? (look below)

Yes, you re right, that is a mistake. I will send it again.

Regards,
Fernando.
>
>>   drivers/dsp/bridge/rmgr/drv.c |   37 ++++++++++++++++------------------
>---
>>   1 files changed, 16 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/dsp/bridge/rmgr/drv.c
>b/drivers/dsp/bridge/rmgr/drv.c
>> index edd8e97..660f375 100644
>> --- a/drivers/dsp/bridge/rmgr/drv.c
>> +++ b/drivers/dsp/bridge/rmgr/drv.c
>> @@ -458,40 +458,35 @@ static DSP_STATUS  DRV_ProcFreeSTRMRes(HANDLE
>hPCtxt)
>>   {
>>   	struct PROCESS_CONTEXT *pCtxt = (struct PROCESS_CONTEXT *)hPCtxt;
>>   	DSP_STATUS status = DSP_SOK;
>> -	DSP_STATUS status1 = DSP_SOK;
>>   	u8 **apBuffer = NULL;
>> -	struct STRM_RES_OBJECT *pSTRMList = NULL;
>>   	struct STRM_RES_OBJECT *pSTRMRes = NULL;
>> +	struct STRM_INFO strm_info;
>> +	struct DSP_STREAMINFO user;
>>   	u8 *pBufPtr;
>>   	u32 ulBytes;
>>   	u32 dwArg;
>>   	s32 ulBufSize;
>>
>> -	pSTRMList = pCtxt->pSTRMList;
>> -	while (pSTRMList != NULL) {
>> -		pSTRMRes = pSTRMList;
>> -		pSTRMList = pSTRMList->next;
>> -		if (pSTRMRes->uNumBufs != 0) {
>> -			apBuffer = MEM_Alloc((pSTRMRes->uNumBufs *
>> -					    sizeof(u8 *)), MEM_NONPAGED);
>> +	pSTRMRes = pCtxt->pSTRMList;
>> +	while (pSTRMRes) {
>> +		if (pSTRMRes->uNumBufs) {
>> +			apBuffer = MEM_Alloc(pSTRMRes->uNumBufs *
>> +					    sizeof(u8 *), MEM_NONPAGED);
>> +			if (!apBuffer)
>> +				return DSP_EMEMORY;
>>   			status = STRM_FreeBuffer(pSTRMRes->hStream, apBuffer,
>>   						pSTRMRes->uNumBufs, pCtxt);
>>   			MEM_Free(apBuffer);
>>   		}
>> -		status = STRM_Close(pSTRMRes->hStream, pCtxt);
>> -		if (DSP_FAILED(status)) {
>> -			if (status == DSP_EPENDING) {
>> -				status = STRM_Reclaim(pSTRMRes->hStream,
>> -						&pBufPtr,&ulBytes,
>> -						     (u32 *)&ulBufSize,&dwArg);
>> -				if (DSP_SUCCEEDED(status))
>> -					status = STRM_Close(pSTRMRes->hStream,
>> -							pCtxt);
>> +		strm_info.pUser =&user;
>> +		user.uNumberBufsInStream = 0;
>> +		STRM_GetInfo(pSTRMRes->hStream,&strm_info, sizeof(strm_info));
>> +		while (strm_info.pUser->uNumberBufsInStream--)
>> +			STRM_Reclaim(pSTRMRes->hStream,&pBufPtr,&ulBytes,
>> +					     (u32 *)&ulBufSize,&dwArg);
>>
>
>Here.
>
>> -			}
>> -		}
>>   	}
>> -	return status1;
>> +	return status;
>>   }
>>
>>   /* Release all Stream resources and its context
>
>- omar
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux