From: Ameya Palande <ameya.palande@nokia.com>
To: "ext Ramos Falcon, Ernesto" <ernesto@ti.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"Doyu Hiroshi (Nokia-D/Helsinki)" <hiroshi.doyu@nokia.com>,
"Guzman Lugo, Fernando" <x0095840@ti.com>,
"Ramirez Luna, Omar" <omar.ramirez@ti.com>,
"Tereshonkov Roman (Nokia-D/Helsinki)"
<roman.tereshonkov@nokia.com>, "Moogi, Suyog" <suyog@ti.com>
Subject: Re: [PATCH 2/3] DSPBRIDGE: Move resource cleanup to bridge_release
Date: Thu, 06 Aug 2009 00:52:26 +0300 [thread overview]
Message-ID: <4A79FF1A.6080307@nokia.com> (raw)
In-Reply-To: <B852767254C5C94EBB1040EE0EFA06006821961B@dlee01.ent.ti.com>
Hi Ernesto,
ext Ramos Falcon, Ernesto wrote:
> Hi,
>
> We have detected a use case where if an application creates a child process using fork call, and then the child and father processes call DSPProcessor_Attach() and create a new process context with new tgid; when the processes are terminated, only the last process calls bridge_release cleaning only the resources in the father process, leaving the child resources unreleased.
>
> One solution we have seen is to perform goes through the entire process context list, clean up all the resources for all terminated processes or in "zombie" state, as below,
>
> DRV_GetProcCtxtList(&pCtxtclosed, (struct DRV_OBJECT *)hDrvObject);
> while (pCtxtclosed != NULL) {
> printk("pCtxtclosed->pid = %d\n",pCtxtclosed->pid);
> tsk = find_task_by_pid(pCtxtclosed->pid);
>
> if ((tsk == NULL) || (tsk->exit_state == EXIT_ZOMBIE)) {
>
> GT_1trace(driverTrace, GT_5CLASS,
> "***Task structure not existing for "
> "process***%d\n", pCtxtclosed->pid);
> DRV_RemoveAllResources(pCtxtclosed);
> if (pCtxtclosed->hProcessor != NULL) {
> PROC_Detach
> (pCtxtclosed->hProcessor);
> }
> pTmp = pCtxtclosed->next;
> DRV_RemoveProcContext((struct DRV_OBJECT *)hDrvObject,
> pCtxtclosed,
> (void *)pCtxtclosed->pid);
> } else {
> pTmp = pCtxtclosed->next;
> }
> pCtxtclosed = pTmp;
> }
>
> Please let me know your comments.
>
> /Ernesto
Good point :)
I would like to simplify this use case ;)
If we call DSPProcessor_Attach() twice in the same process and kill the process,
then it will leak memory for 1st instance of PROCESSOR object.
When we call open() on /dev/DspBridge a new PROCESS_CONTEXT is allocated, and it
should be allocated **only once** in bridge_open() unlike in NODE_Allocate() and
PROC_Attach(). PROCESS_CONTEXT tracks all the resources allocated on behalf of
an open file handle(and not the process / thread). When this handle is closed
all these resources should be freed in bridge_release(). Accountability of
resources should be done using PROCESS_CONTEXT and **not pid (which will be
different for different thread) / tgid (which will be different for parent and
child).
Above problem occurs because PROCESS_CONTEXT by design tracks only one PROCESSOR
object which gets freed in bridge_release().
Let me know your comments on this, and then we can proceed to fix this issue.
Cheers,
Ameya.
next prev parent reply other threads:[~2009-08-05 21:52 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-05 13:25 [PATCH 1/3] DSPBRIDGE: Cleanup bridge_release and remove DSP_Close Ameya Palande
2009-08-05 13:25 ` [PATCH 2/3] DSPBRIDGE: Move resource cleanup to bridge_release Ameya Palande
2009-08-05 13:25 ` [PATCH 3/3] DSPBRIDGE: Use TGID instead of PID for resource accounting Ameya Palande
2009-08-05 19:20 ` [PATCH 2/3] DSPBRIDGE: Move resource cleanup to bridge_release Ramos Falcon, Ernesto
2009-08-05 21:52 ` Ameya Palande [this message]
2009-08-06 18:06 ` Ramos Falcon, Ernesto
2009-08-06 18:12 ` Ameya Palande
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A79FF1A.6080307@nokia.com \
--to=ameya.palande@nokia.com \
--cc=ernesto@ti.com \
--cc=hiroshi.doyu@nokia.com \
--cc=linux-omap@vger.kernel.org \
--cc=omar.ramirez@ti.com \
--cc=roman.tereshonkov@nokia.com \
--cc=suyog@ti.com \
--cc=x0095840@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.