From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
Mauro Carvalho Chehab <mchehab@infradead.org>
Subject: Re: [PATCH v6 7/8] [media] media: add a debug message to warn about gobj creation/removal
Date: Mon, 24 Aug 2015 06:40:06 -0300 [thread overview]
Message-ID: <20150824064006.126b4f46@recife.lan> (raw)
In-Reply-To: <5814209.73Ea5OdygA@avalon>
Em Sat, 22 Aug 2015 01:54:07 +0300
Laurent Pinchart <laurent.pinchart@ideasonboard.com> escreveu:
> Hi Mauro,
>
> On Friday 21 August 2015 18:09:31 Mauro Carvalho Chehab wrote:
> > Em Fri, 21 Aug 2015 20:54:29 +0300 Laurent Pinchart escreveu:
> > > On Friday 21 August 2015 07:19:21 Mauro Carvalho Chehab wrote:
> > >> Em Fri, 21 Aug 2015 04:32:51 +0300 Laurent Pinchart escreveu:
> > >>> On Wednesday 19 August 2015 08:01:54 Mauro Carvalho Chehab wrote:
> > >>>> It helps to check if the media controller is doing the
> > >>>> right thing with the object creation and removal.
> > >>>>
> > >>>> No extra code/data will be produced if DEBUG or
> > >>>> CONFIG_DYNAMIC_DEBUG is not enabled.
> > >>>
> > >>> CONFIG_DYNAMIC_DEBUG is often enabled.
> > >>
> > >> True, but once a driver/core is properly debugged, images without DEBUG
> > >> could be used in production, if the amount of memory constraints are
> > >> too tight.
> > >>
> > >> > You're more or less adding function call tracing in this patch, isn't
> > >> > that something that ftrace is supposed to do ?
> > >>
> > >> Ftrace is a great infrastructure and helps a lot when we need to
> > >> identify bottlenecks and other performance related stuff, but it
> > >> doesn't replace debug functions.
> > >>
> > >> There are some fundamental differences on what you could do with ftrace
> > >> and what you can't.
> > >>
> > >> At least on this stage, what I need is something that will provide
> > >> output via serial console when the driver gets loaded, and that provides
> > >> a synchronous output with the other Kernel messages.
> > >>
> > >> This is the only way to debug certain OOPSes that are happening during
> > >> the development of the patches.
> > >>
> > >> This is something you cannot do with ftrace, but dynamic DEBUG works
> > >> like a charm.
> > >
> > > I understand the need for debug messages during development of a patch
> > > series, but I don't think this level of debugging belongs to mainline.
> > > Debug messages for function call tracing, even more in patch 6/8 and 7/8,
> > > is frowned upon in the kernel.
> > >
> > > Or maybe I got it wrong and patches 6/8 and 7/8 are only for development
> > > and you don't plan to get them in mainline ?
> >
> > As we've agreed, the first phase won't have dynamic support. Both patches
> > 6/8 and 7/8 are important until then.
>
> Why are they more important with dynamic support ?
Because it helps to identify if the creation/removal of the objects are
being done at the right order. If the media_device got unregistered
and kfreed before unregistering the devices, things will go bad.
Also, a PAD can't be destroyed if any links that reference it still
exists.
I got tons of troubles like that during the development of the PATCH v7
series.
> > So, they should reach mainline together with the first MC new gen series.
>
> Patch 6/8 states in its commit message that
>
> "We can only free the media device after being sure that no graph object is
> used. In order to help tracking it, let's add debug messages that will print
> when the media controller gets registered or unregistered."
>
> Instead of debug messages that need to be enabled and tracked manually, why
> not detecting the condition and issuing a WARN_ON() ?
Because I'm not sure how to write such patch ;) I don't know any
algorithm that could be used to detect that a kfree() happening at the
wrong order.
My old proposal were to use kref() for that, but neither you nor Lars
saw the need for that. Also, after looking deeper in the code, adding
a kref() for the graph objects isn't trivial.
My original idea to support dynamic objects is to have a code at
media_graph_init() that would increment the kref() count for the
created object and for the referenced objects (like the two pads
on a data link and the media_device), and decrementing kref() at
media_graph_remove(). The actual function that would free the memory
would be called when kref() count reaches zero.
In other words, if we add a kref() count for the objects and for
media_device, then we can get rid of patch 6/8, but we're not there
yet.
For that to work, there are several changes that would be needed:
- The media_device should be dynamically allocated;
- All graph objects can only be created after having the media
device created, and should not be embedded;
- The PAD allocation should be moved to the MC core.
IMO, that's the best solution if we were starting to design MC
right now. However, changing the drivers at this moment to do
that will require retest the MC there, with means that the
driver maintainer should very likely be helping. That's an
unlikely scenario, unfortunately.
So, I guess we'll need to find another way. That's why we need
to keep patch 6/8 until we figure out a solution for that.
Regards,
Mauro
next prev parent reply other threads:[~2015-08-24 9:40 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-19 11:01 [PATCH v6 0/8] MC preparation patches Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 1/8] [media] media: create a macro to get entity ID Mauro Carvalho Chehab
2015-08-19 11:01 ` Mauro Carvalho Chehab
2015-08-21 0:40 ` Laurent Pinchart
2015-08-21 0:40 ` Laurent Pinchart
2015-08-21 8:42 ` Mauro Carvalho Chehab
2015-08-21 8:42 ` Mauro Carvalho Chehab
2015-08-21 17:27 ` Laurent Pinchart
2015-08-21 17:27 ` Laurent Pinchart
2015-08-21 17:45 ` Mauro Carvalho Chehab
2015-08-21 17:45 ` Mauro Carvalho Chehab
2015-08-21 18:11 ` Laurent Pinchart
2015-08-21 18:11 ` Laurent Pinchart
2015-08-21 20:46 ` Mauro Carvalho Chehab
2015-08-21 20:46 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 2/8] [media] media: add a common struct to be embed on media graph objects Mauro Carvalho Chehab
2015-08-19 11:09 ` Hans Verkuil
2015-08-21 1:02 ` Laurent Pinchart
2015-08-21 8:07 ` Hans Verkuil
2015-09-07 21:49 ` Laurent Pinchart
2015-09-08 10:05 ` Mauro Carvalho Chehab
2015-08-21 9:57 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 3/8] [media] media: use media_gobj inside entities Mauro Carvalho Chehab
2015-08-21 1:10 ` Laurent Pinchart
2015-08-21 10:09 ` Mauro Carvalho Chehab
2015-08-21 17:51 ` Laurent Pinchart
2015-08-21 21:01 ` Mauro Carvalho Chehab
2015-08-21 22:47 ` Laurent Pinchart
2015-08-24 9:18 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 4/8] [media] media: use media_gobj inside pads Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 5/8] [media] media: use media_gobj inside links Mauro Carvalho Chehab
2015-08-19 11:11 ` Hans Verkuil
2015-08-19 11:01 ` [PATCH v6 6/8] [media] media: add messages when media device gets (un)registered Mauro Carvalho Chehab
2015-08-19 11:11 ` Hans Verkuil
2015-08-21 1:35 ` Laurent Pinchart
2015-08-21 10:25 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` [PATCH v6 7/8] [media] media: add a debug message to warn about gobj creation/removal Mauro Carvalho Chehab
2015-08-19 11:12 ` Hans Verkuil
2015-08-21 1:32 ` Laurent Pinchart
2015-08-21 10:19 ` Mauro Carvalho Chehab
2015-08-21 17:54 ` Laurent Pinchart
2015-08-21 21:09 ` Mauro Carvalho Chehab
2015-08-21 22:54 ` Laurent Pinchart
2015-08-24 9:40 ` Mauro Carvalho Chehab [this message]
2015-08-19 11:01 ` [PATCH v6 8/8] [media] media: rename the function that create pad links Mauro Carvalho Chehab
2015-08-19 11:01 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` Mauro Carvalho Chehab
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=20150824064006.126b4f46@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@infradead.org \
/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.