From: ben-linux@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: Using statically allocated memory for platform_data.
Date: Mon, 2 Nov 2009 14:51:39 +0000 [thread overview]
Message-ID: <20091102145139.GA20341@fluff.org.uk> (raw)
In-Reply-To: <20091102103940.GA25282@pengutronix.de>
On Mon, Nov 02, 2009 at 11:39:40AM +0100, Uwe Kleine-K?nig wrote:
> Hello,
>
> On Mon, Nov 02, 2009 at 11:23:16AM +0100, Antonio Ospite wrote:
> > Hi,
> >
> > I noted that in some mfd drivers (drivers/mfd/ezx-pcap.c and
> > drivers/mfd/da903x.c) there is code like this:
> >
> > static int __devinit pcap_add_subdev(struct pcap_chip *pcap,
> > struct pcap_subdev *subdev)
> > {
> > struct platform_device *pdev;
> >
> > pdev = platform_device_alloc(subdev->name, subdev->id);
> > pdev->dev.parent = &pcap->spi->dev;
> > pdev->dev.platform_data = subdev->platform_data;
> >
> > return platform_device_add(pdev);
> > }
> >
> > Note the _direct_assignment_ of platform data; then in board init code
> > there are often global struct pointers passed as subdev platform data,
> > see arch/arm/mach-pxa/em-x270.c::em_x270_da9030_subdevs for instance.
> >
> > In these cases, whenever the subdev platform device is unregistered,
> > the call to platform_device_release() tries to kfree the platform data,
> > and being it statically allocated memory this triggers a bug from SLAB:
> > kernel BUG at mm/slab.c:521!
> > In my case this prevented proper device poweroff.
> >
> > The question: should these mfd drivers use platform_device_add_data()
> > which allocates dynamic memory for *a copy* of platform data? Is this
> > simple solution acceptable even if there will be more memory used?
> If you move the original data lives in .init there is no duplication.
they you can't modprobe devices after loading the kernel, so udev
autoload and the like become impossible.
--
Ben (ben at fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes'
WARNING: multiple messages have this Message-ID (diff)
From: Ben Dooks <ben-linux@fluff.org>
To: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
Cc: Antonio Ospite <ospite@studenti.unina.it>,
linux-arm-kernel@lists.infradead.org,
openezx-devel@lists.openezx.org, linux-kernel@vger.kernel.org,
Samuel Ortiz <sameo@linux.intel.com>,
Daniel Ribeiro <drwyrm@gmail.com>,
Mike Rapoport <mike@compulab.co.il>
Subject: Re: Using statically allocated memory for platform_data.
Date: Mon, 2 Nov 2009 14:51:39 +0000 [thread overview]
Message-ID: <20091102145139.GA20341@fluff.org.uk> (raw)
In-Reply-To: <20091102103940.GA25282@pengutronix.de>
On Mon, Nov 02, 2009 at 11:39:40AM +0100, Uwe Kleine-K?nig wrote:
> Hello,
>
> On Mon, Nov 02, 2009 at 11:23:16AM +0100, Antonio Ospite wrote:
> > Hi,
> >
> > I noted that in some mfd drivers (drivers/mfd/ezx-pcap.c and
> > drivers/mfd/da903x.c) there is code like this:
> >
> > static int __devinit pcap_add_subdev(struct pcap_chip *pcap,
> > struct pcap_subdev *subdev)
> > {
> > struct platform_device *pdev;
> >
> > pdev = platform_device_alloc(subdev->name, subdev->id);
> > pdev->dev.parent = &pcap->spi->dev;
> > pdev->dev.platform_data = subdev->platform_data;
> >
> > return platform_device_add(pdev);
> > }
> >
> > Note the _direct_assignment_ of platform data; then in board init code
> > there are often global struct pointers passed as subdev platform data,
> > see arch/arm/mach-pxa/em-x270.c::em_x270_da9030_subdevs for instance.
> >
> > In these cases, whenever the subdev platform device is unregistered,
> > the call to platform_device_release() tries to kfree the platform data,
> > and being it statically allocated memory this triggers a bug from SLAB:
> > kernel BUG at mm/slab.c:521!
> > In my case this prevented proper device poweroff.
> >
> > The question: should these mfd drivers use platform_device_add_data()
> > which allocates dynamic memory for *a copy* of platform data? Is this
> > simple solution acceptable even if there will be more memory used?
> If you move the original data lives in .init there is no duplication.
they you can't modprobe devices after loading the kernel, so udev
autoload and the like become impossible.
--
Ben (ben@fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes'
next prev parent reply other threads:[~2009-11-02 14:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-02 10:23 Using statically allocated memory for platform_data Antonio Ospite
2009-11-02 10:23 ` Antonio Ospite
2009-11-02 10:39 ` Uwe Kleine-König
2009-11-02 10:39 ` Uwe Kleine-König
2009-11-02 14:51 ` Ben Dooks [this message]
2009-11-02 14:51 ` Ben Dooks
2009-11-02 15:00 ` Ben Dooks
2009-11-02 15:00 ` Ben Dooks
2009-11-02 15:05 ` Russell King - ARM Linux
2009-11-02 15:05 ` Russell King - ARM Linux
2009-11-02 15:25 ` Ben Dooks
2009-11-02 15:25 ` Ben Dooks
2009-11-02 15:52 ` Ben Dooks
2009-11-02 15:52 ` Ben Dooks
2009-11-02 15:56 ` Russell King - ARM Linux
2009-11-02 15:56 ` Russell King - ARM Linux
2009-11-02 16:28 ` Ben Dooks
2009-11-02 16:28 ` Ben Dooks
2009-11-02 16:37 ` Russell King - ARM Linux
2009-11-02 16:37 ` Russell King - ARM Linux
2009-11-02 16:47 ` Ben Dooks
2009-11-02 16:47 ` Ben Dooks
2009-11-03 17:31 ` Antonio Ospite
2009-11-03 17:31 ` Antonio Ospite
2009-11-08 21:24 ` Antonio Ospite
2009-11-08 21:24 ` Antonio Ospite
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=20091102145139.GA20341@fluff.org.uk \
--to=ben-linux@fluff.org \
--cc=linux-arm-kernel@lists.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.