From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: Shuah Khan <shuahkh@osg.samsung.com>,
kyungmin.park@samsung.com, a.hajda@samsung.com,
s.nawrocki@samsung.com, kgene@kernel.org,
k.kozlowski@samsung.com, laurent.pinchart@ideasonboard.com,
hyun.kwon@xilinx.com, soren.brinkmann@xilinx.com,
gregkh@linuxfoundation.org, perex@perex.cz, tiwai@suse.com,
hans.verkuil@cisco.com, lixiubo@cmss.chinamobile.com,
javier@osg.samsung.com, g.liakhovetski@gmx.de,
chehabrafael@gmail.com, crope@iki.fi, tommi.franttila@intel.com,
dan.carpenter@oracle.com, prabhakar.csengg@gmail.com,
hamohammed.sa@gmail.com, der.herr@hofr.at,
navyasri.tech@gmail.com, Julia.Lawall@lip6.fr,
amitoj1606@gmail.com, linux-media@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, devel@driverdev.osuosl.org,
alsa-devel@alsa-project.org
Subject: Re: [PATCH] media: add GFP flag to media_*() that could get called in atomic context
Date: Wed, 16 Mar 2016 09:02:21 -0300 [thread overview]
Message-ID: <20160316090221.02d0a699@recife.lan> (raw)
In-Reply-To: <20160316082834.GX11084@valkosipuli.retiisi.org.uk>
Em Wed, 16 Mar 2016 10:28:35 +0200
Sakari Ailus <sakari.ailus@iki.fi> escreveu:
> Hi Mauro,
>
> On Tue, Mar 15, 2016 at 12:55:35PM -0300, Mauro Carvalho Chehab wrote:
> > Em Mon, 14 Mar 2016 14:09:09 +0200
> > Sakari Ailus <sakari.ailus@iki.fi> escreveu:
> >
> > > Hi Mauro,
> > >
...
> > > Notify callbacks, perhaps not, but the list is still protected by the
> > > spinlock. It perhaps is not likely that another process would change it but
> > > I don't think we can rely on that.
> >
> > I can see only 2 risks protected by the lock:
> >
> > 1) mdev gets freed while an entity is being created. This is a problem
> > with the current memory protection schema we're using. I guess the
> > only way to fix it is to use kref for mdev/entities/interfaces/links/pads.
> > This change doesn't make it better or worse.
> > Also, I don't think we have such risk with the current devices.
> >
> > 2) a notifier may be inserted or removed by another driver, while the
> > loop is running.
> >
> > To avoid (2), I see 3 alternatives:
> >
> > a) keep the loop as proposed on this patch. As the list is navigated using
> > list_for_each_entry_safe(), I guess[1] it should be safe to remove/add
> > new notify callbacks there while the loop is running by some other process.
>
> list_for_each_entry_safe() does not protect against concurrent access, only
> against adding and removing list entries by the same user. List access
> serialisation is still needed, whether you use _safe() functions or not.
>
> >
> > [1] It *is* safe if the change were done inside the loop - but I'm not
> > 100% sure that it is safe if some other CPU touches the notify list.
>
> Indeed.
>
> >
> > b) Unlock/relock the spinlock every time:
> >
> > /* previous code that locks mdev->lock spinlock */
> >
> > /* invoke entity_notify callbacks */
> > list_for_each_entry_safe(notify, next, &mdev->entity_notify, list) {
> > spin_unlock(&mdev->lock);
> > (notify)->notify(entity, notify->notify_data);
> > spin_lock(&mdev->lock);
> > }
> >
> > spin_unlock(&mdev->lock);
> >
> > c) use a separate lock for the notify list -this seems to be an overkill.
> >
> > d) Protect it with the graph traversal mutex. That sounds the worse idea,
> > IMHO, as we'll be abusing the lock.
>
> I'd simply replace the spinlock with a mutex here. As we want to get rid of
> the graph mutex anyway in the long run, let's not mix the two as they're
> well separated now. As long as the mutex users do not sleep (i.e. the
> notify() callback) the mutex is about as fast to use as the spinlock.
It could work. I added such patch on an experimental branch, where
I'm addressing a few troubles with au0828 unbind logic:
https://git.linuxtv.org/mchehab/experimental.git/log/?h=au0828-unbind-fixes
The patch itself is at:
https://git.linuxtv.org/mchehab/experimental.git/commit/?h=au0828-unbind-fixes&id=dba4d41bdfa6bb8dc51cb0f692102919b2b7c8b4
At least for au0828, it seems to work fine.
Regards,
Mauro
prev parent reply other threads:[~2016-03-16 12:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-13 1:48 [PATCH] media: add GFP flag to media_*() that could get called in atomic context Shuah Khan
2016-03-13 8:30 ` Nicholas Mc Guire
2016-03-13 11:50 ` Mauro Carvalho Chehab
2016-03-14 7:22 ` Sakari Ailus
2016-03-14 10:13 ` Mauro Carvalho Chehab
2016-03-14 10:33 ` Takashi Iwai
2016-03-14 10:52 ` Sakari Ailus
2016-03-14 11:46 ` Mauro Carvalho Chehab
2016-03-14 12:09 ` Sakari Ailus
2016-03-15 15:55 ` Mauro Carvalho Chehab
2016-03-16 8:28 ` Sakari Ailus
2016-03-16 12:02 ` Mauro Carvalho Chehab [this message]
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=20160316090221.02d0a699@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=Julia.Lawall@lip6.fr \
--cc=a.hajda@samsung.com \
--cc=alsa-devel@alsa-project.org \
--cc=amitoj1606@gmail.com \
--cc=chehabrafael@gmail.com \
--cc=crope@iki.fi \
--cc=dan.carpenter@oracle.com \
--cc=der.herr@hofr.at \
--cc=devel@driverdev.osuosl.org \
--cc=g.liakhovetski@gmx.de \
--cc=gregkh@linuxfoundation.org \
--cc=hamohammed.sa@gmail.com \
--cc=hans.verkuil@cisco.com \
--cc=hyun.kwon@xilinx.com \
--cc=javier@osg.samsung.com \
--cc=k.kozlowski@samsung.com \
--cc=kgene@kernel.org \
--cc=kyungmin.park@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=lixiubo@cmss.chinamobile.com \
--cc=navyasri.tech@gmail.com \
--cc=perex@perex.cz \
--cc=prabhakar.csengg@gmail.com \
--cc=s.nawrocki@samsung.com \
--cc=sakari.ailus@iki.fi \
--cc=shuahkh@osg.samsung.com \
--cc=soren.brinkmann@xilinx.com \
--cc=tiwai@suse.com \
--cc=tommi.franttila@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).