From: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
To: Andres Salomon <dilinger-pFFUokh25LWsTnJN9+BGXg@public.gmane.org>
Cc: Samuel Ortiz <sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Mark Brown
<broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>,
khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org,
ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org,
Peter Korsgaard <jacmet-OfajU3CKLf1/SzgSGea1oA@public.gmane.org>,
Mauro Carvalho Chehab
<mchehab-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
David Brownell
<dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Mocean Laboratories
<info-l7gf1WXxx3uGw+nKnLezzg@public.gmane.org>
Subject: Re: [PATCH 07/19] timberdale: mfd_cell is now implicitly available to drivers
Date: Fri, 1 Apr 2011 11:56:35 -0600 [thread overview]
Message-ID: <BANLkTi=bCd_+f=EG-O=U5VH_ZNjFhxkziQ@mail.gmail.com> (raw)
In-Reply-To: <20110401104756.2f5c6f7a@debxo>
On Fri, Apr 1, 2011 at 11:47 AM, Andres Salomon <dilinger-pFFUokh25LWsTnJN9+BGXg@public.gmane.org> wrote:
> On Fri, 1 Apr 2011 13:20:31 +0200
> Samuel Ortiz <sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> wrote:
>
>> Hi Grant,
>>
>> On Thu, Mar 31, 2011 at 05:05:22PM -0600, Grant Likely wrote:
> [...]
>> > Gah. Not all devices instantiated via mfd will be an mfd device,
>> > which means that the driver may very well expect an *entirely
>> > different* platform_device pointer; which further means a very high
>> > potential of incorrectly dereferenced structures (as evidenced by a
>> > patch series that is not bisectable). For instance, the xilinx ip
>> > cores are used by more than just mfd.
>> I agree. Since the vast majority of the MFD subdevices are MFD
>> specific IPs, I overlooked that part. The impacted drivers are the
>> timberdale and the DaVinci voice codec ones.
Another option is you could do this for MFD devices:
struct mfd_device {
struct platform_devce pdev;
struct mfd_cell *cell;
};
However, that requires that drivers using the mfd_cell will *never*
get instantiated outside of the mfd infrastructure, and there is no
way to protect against this so it is probably a bad idea.
Or, mfd_cell could be added to platform_device directly which would
*by far* be the safest option at the cost of every platform_device
having a mostly unused mfd_cell pointer. Not a significant cost in my
opinion.
One last option is I'm prototyping a way to add type-safe structure
pointers to a device, but that requires nasty CPP tricks and it's not
complete yet. The cure might be worse than the disease here.
g.
>
> Can you please provide pointers to what you're referring to? The only
> code that I could find that created platform devices prefixed with
> 'timb-' or named 'xilinx_spi' was drivers/mfd/timberdale.c.
>
>
>
>> To fix that problem I propose 2 alternatives:
>>
>> 1) When declaring the sub devices cells, the MFD driver should
>> specify an mfd_data_size value for sub devices that are not MFD
>> specific. It's the MFD driver responsibility to set the cell
>> properly, and the non MFD specific drivers are kept MFD agnostic.
>> See my patch below for the timberdale case.
This approach worries me because it changes the behaviour on a
per-device basis. That could be difficult to maintain a mental model
for. I'd rather see consistent behaviour.
>>
>> 2) Revert the mfd_get_data() call for getting sub devices platform
>> data pointers. That was introduced to ease the MFD cell sharing work,
>> so if we take this route we'll need the cs5535 MFD driver to pass its
>> cells as platform_data pointer. Andres, can you confirm that this
>> would be fine for the mfd_clone_cell() routine to keep working ?
>
> It would break mfd_clone_cell, as it uses mfd_get_cell to grab the one
> to clone. We could change it to accept the cell as an argument. It
> would also break mfd_cell_enable/disable, of course.
>
>
>
>>
>> Patch for solution 1:
>>
>>
>> drivers/mfd/mfd-core.c | 13 ++++++++++---
>> drivers/mfd/timberdale.c | 11 +++++++++++
>> include/linux/mfd/core.h | 1 +
>> drivers/i2c/busses/i2c-ocores.c | 3 +--
>> drivers/i2c/busses/i2c-xiic.c | 3 +--
>> drivers/net/ks8842.c | 3 +--
>> drivers/spi/xilinx_spi.c | 3 +--
>> 7 files changed, 26 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
>> index d01574d..8abe510 100644
>> --- a/drivers/mfd/mfd-core.c
>> +++ b/drivers/mfd/mfd-core.c
>> @@ -75,9 +75,16 @@ static int mfd_add_device(struct device *parent,
>> int id,
>> pdev->dev.parent = parent;
>>
>> - ret = platform_device_add_data(pdev, cell, sizeof(*cell));
>> - if (ret)
>> - goto fail_res;
>> + if (cell->mfd_data_size > 0) {
>> + ret = platform_device_add_data(pdev,
>> + cell->mfd_data,
>> cell->mfd_data_size);
>> + if (ret)
>> + goto fail_res;
>> + } else {
>> + ret = platform_device_add_data(pdev, cell,
>> sizeof(*cell));
>> + if (ret)
>> + goto fail_res;
>> + }
>>
>> for (r = 0; r < cell->num_resources; r++) {
>> res[r].name = cell->resources[r].name;
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
next prev parent reply other threads:[~2011-04-01 17:56 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20110202195417.228e2656@queued.net>
[not found] ` <20110202195417.228e2656-pFFUokh25LWsTnJN9+BGXg@public.gmane.org>
2011-02-03 4:08 ` [PATCH 07/19] timberdale: mfd_cell is now implicitly available to drivers Andres Salomon
2011-03-31 23:05 ` Grant Likely
[not found] ` <20110331230522.GI437-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-04-01 11:20 ` Samuel Ortiz
2011-04-01 17:47 ` Andres Salomon
2011-04-01 17:56 ` Grant Likely [this message]
2011-04-01 18:00 ` Grant Likely
[not found] ` <BANLkTi=bCd_+f=EG-O=U5VH_ZNjFhxkziQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-01 23:52 ` Samuel Ortiz
2011-04-01 23:58 ` Grant Likely
[not found] ` <BANLkTi=bq=OGzXFp7qiBr7x_BnGOWf=DRQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-02 0:10 ` Andres Salomon
2011-04-04 10:03 ` Samuel Ortiz
2011-04-05 3:04 ` Grant Likely
2011-04-06 15:23 ` Samuel Ortiz
2011-04-06 15:58 ` Greg KH
2011-04-06 17:05 ` Samuel Ortiz
2011-04-06 17:16 ` Ben Hutchings
2011-04-06 17:51 ` Samuel Ortiz
2011-04-06 18:07 ` Ben Hutchings
2011-04-06 17:56 ` Greg KH
2011-04-06 18:25 ` Andres Salomon
2011-04-06 18:38 ` Greg KH
[not found] ` <20110406183854.GA10058-l3A5Bk7waGM@public.gmane.org>
2011-04-07 8:04 ` Grant Likely
2011-04-06 18:47 ` Samuel Ortiz
2011-04-06 18:59 ` Felipe Balbi
[not found] ` <20110406185902.GN25654-UiBtZHVXSwEVvW8u9ZQWYwjfymiNCTlR@public.gmane.org>
2011-04-06 22:09 ` Greg KH
2011-04-07 8:09 ` Felipe Balbi
2011-04-07 13:40 ` Samuel Ortiz
2011-04-07 14:35 ` Grant Likely
[not found] ` <20110407143515.GC26452-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2011-04-07 15:03 ` Samuel Ortiz
2011-04-07 18:06 ` Grant Likely
2011-04-07 16:24 ` Grant Likely
2011-04-01 18:26 ` Samuel Ortiz
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='BANLkTi=bCd_+f=EG-O=U5VH_ZNjFhxkziQ@mail.gmail.com' \
--to=grant.likely-s3s/wqlpoipyb63q8fvjnq@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \
--cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=dilinger-pFFUokh25LWsTnJN9+BGXg@public.gmane.org \
--cc=info-l7gf1WXxx3uGw+nKnLezzg@public.gmane.org \
--cc=jacmet-OfajU3CKLf1/SzgSGea1oA@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mchehab-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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 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).