* [PATCH] i2c: samsung: resume race fix
@ 2012-11-07 10:28 Naveen Krishna Chatradhi
2012-11-07 10:44 ` Jean Delvare
0 siblings, 1 reply; 8+ messages in thread
From: Naveen Krishna Chatradhi @ 2012-11-07 10:28 UTC (permalink / raw)
To: linux-arm-kernel
Don't unmark the device as suspended until after it's been re-setup.
The main race would be w.r.t. an i2c driver that gets resumed at the same
time (asyncronously), that is allowed to do a transfer since suspended
is set to 0 before reinit, but really should have seen the -EIO return
instead.
Signed-off-by: Olof Johansson <olofj@chromium.org>
Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
---
drivers/i2c/busses/i2c-s3c2410.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
index 3e0335f..dbaf920 100644
--- a/drivers/i2c/busses/i2c-s3c2410.c
+++ b/drivers/i2c/busses/i2c-s3c2410.c
@@ -1134,10 +1134,10 @@ static int s3c24xx_i2c_resume(struct device *dev)
struct platform_device *pdev = to_platform_device(dev);
struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
- i2c->suspended = 0;
clk_prepare_enable(i2c->clk);
s3c24xx_i2c_init(i2c);
clk_disable_unprepare(i2c->clk);
+ i2c->suspended = 0;
return 0;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2012-11-07 10:28 [PATCH] i2c: samsung: resume race fix Naveen Krishna Chatradhi
@ 2012-11-07 10:44 ` Jean Delvare
2013-01-07 12:05 ` Naveen Krishna Ch
2013-01-24 13:27 ` Wolfram Sang
0 siblings, 2 replies; 8+ messages in thread
From: Jean Delvare @ 2012-11-07 10:44 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
> Don't unmark the device as suspended until after it's been re-setup.
>
> The main race would be w.r.t. an i2c driver that gets resumed at the same
> time (asyncronously), that is allowed to do a transfer since suspended
> is set to 0 before reinit, but really should have seen the -EIO return
> instead.
I thought that the suspend order was children first and the resume
order was parent first?
If this can really happen then I am afraid this is an issue for more
than just i2c-s3c2410. The proposed solution is also not really
satisfactory, as the i2c client will certainly still fail to resume
properly (the only improvement is that now the failure is no longer
silent.)
>
> Signed-off-by: Olof Johansson <olofj@chromium.org>
> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
> ---
> drivers/i2c/busses/i2c-s3c2410.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
> index 3e0335f..dbaf920 100644
> --- a/drivers/i2c/busses/i2c-s3c2410.c
> +++ b/drivers/i2c/busses/i2c-s3c2410.c
> @@ -1134,10 +1134,10 @@ static int s3c24xx_i2c_resume(struct device *dev)
> struct platform_device *pdev = to_platform_device(dev);
> struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
>
> - i2c->suspended = 0;
> clk_prepare_enable(i2c->clk);
> s3c24xx_i2c_init(i2c);
> clk_disable_unprepare(i2c->clk);
> + i2c->suspended = 0;
>
> return 0;
> }
Acked-by: Jean Delvare <khali@linux-fr.org>
(Not perfect but still better than before.)
--
Jean Delvare
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2012-11-07 10:44 ` Jean Delvare
@ 2013-01-07 12:05 ` Naveen Krishna Ch
2013-01-07 12:25 ` Jean Delvare
2013-01-24 13:27 ` Wolfram Sang
1 sibling, 1 reply; 8+ messages in thread
From: Naveen Krishna Ch @ 2013-01-07 12:05 UTC (permalink / raw)
To: linux-arm-kernel
On 7 November 2012 16:14, Jean Delvare <khali@linux-fr.org> wrote:
> On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
>> Don't unmark the device as suspended until after it's been re-setup.
>>
>> The main race would be w.r.t. an i2c driver that gets resumed at the same
>> time (asyncronously), that is allowed to do a transfer since suspended
>> is set to 0 before reinit, but really should have seen the -EIO return
>> instead.
>
> I thought that the suspend order was children first and the resume
> order was parent first?
>
> If this can really happen then I am afraid this is an issue for more
> than just i2c-s3c2410. The proposed solution is also not really
> satisfactory, as the i2c client will certainly still fail to resume
> properly (the only improvement is that now the failure is no longer
> silent.)
>
>>
>> Signed-off-by: Olof Johansson <olofj@chromium.org>
>> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
>> ---
>> drivers/i2c/busses/i2c-s3c2410.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
>> index 3e0335f..dbaf920 100644
>> --- a/drivers/i2c/busses/i2c-s3c2410.c
>> +++ b/drivers/i2c/busses/i2c-s3c2410.c
>> @@ -1134,10 +1134,10 @@ static int s3c24xx_i2c_resume(struct device *dev)
>> struct platform_device *pdev = to_platform_device(dev);
>> struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
>>
>> - i2c->suspended = 0;
>> clk_prepare_enable(i2c->clk);
>> s3c24xx_i2c_init(i2c);
>> clk_disable_unprepare(i2c->clk);
>> + i2c->suspended = 0;
>>
>> return 0;
>> }
>
> Acked-by: Jean Delvare <khali@linux-fr.org>
I don't see this patch landed any where in linux-i2c tree, Though it was acked.
Was it missed or should i be doing something for this to be merged ??
>
> (Not perfect but still better than before.)
>
> --
> Jean Delvare
--
Shine bright,
(: Nav :)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2013-01-07 12:05 ` Naveen Krishna Ch
@ 2013-01-07 12:25 ` Jean Delvare
0 siblings, 0 replies; 8+ messages in thread
From: Jean Delvare @ 2013-01-07 12:25 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, 7 Jan 2013 17:35:25 +0530, Naveen Krishna Ch wrote:
> On 7 November 2012 16:14, Jean Delvare <khali@linux-fr.org> wrote:
> > On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
> >> Don't unmark the device as suspended until after it's been re-setup.
> >>
> >> The main race would be w.r.t. an i2c driver that gets resumed at the same
> >> time (asyncronously), that is allowed to do a transfer since suspended
> >> is set to 0 before reinit, but really should have seen the -EIO return
> >> instead.
> >>
> >> Signed-off-by: Olof Johansson <olofj@chromium.org>
> >> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
> >> ---
> >> drivers/i2c/busses/i2c-s3c2410.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
> >> index 3e0335f..dbaf920 100644
> >> --- a/drivers/i2c/busses/i2c-s3c2410.c
> >> +++ b/drivers/i2c/busses/i2c-s3c2410.c
> >> @@ -1134,10 +1134,10 @@ static int s3c24xx_i2c_resume(struct device *dev)
> >> struct platform_device *pdev = to_platform_device(dev);
> >> struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
> >>
> >> - i2c->suspended = 0;
> >> clk_prepare_enable(i2c->clk);
> >> s3c24xx_i2c_init(i2c);
> >> clk_disable_unprepare(i2c->clk);
> >> + i2c->suspended = 0;
> >>
> >> return 0;
> >> }
> >
> > Acked-by: Jean Delvare <khali@linux-fr.org>
> I don't see this patch landed any where in linux-i2c tree, Though it was acked.
> Was it missed or should i be doing something for this to be merged ??
Nothing needed from your side AFAIK, Wolfram should pick patches when I
ack them, maybe this one was simply overlooked.
--
Jean Delvare
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2012-11-07 10:44 ` Jean Delvare
2013-01-07 12:05 ` Naveen Krishna Ch
@ 2013-01-24 13:27 ` Wolfram Sang
2013-01-24 16:41 ` Olof Johansson
2013-01-24 16:42 ` Olof Johansson
1 sibling, 2 replies; 8+ messages in thread
From: Wolfram Sang @ 2013-01-24 13:27 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Nov 07, 2012 at 11:44:37AM +0100, Jean Delvare wrote:
> On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
> > Don't unmark the device as suspended until after it's been re-setup.
> >
> > The main race would be w.r.t. an i2c driver that gets resumed at the same
> > time (asyncronously), that is allowed to do a transfer since suspended
> > is set to 0 before reinit, but really should have seen the -EIO return
> > instead.
>
> I thought that the suspend order was children first and the resume
> order was parent first?
Same here, why does it not work this way?
Regards,
Wolfram
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130124/818565c5/attachment-0001.sig>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2013-01-24 13:27 ` Wolfram Sang
@ 2013-01-24 16:41 ` Olof Johansson
2013-01-24 16:44 ` Wolfram Sang
2013-01-24 16:42 ` Olof Johansson
1 sibling, 1 reply; 8+ messages in thread
From: Olof Johansson @ 2013-01-24 16:41 UTC (permalink / raw)
To: linux-arm-kernel
2013/1/24 Wolfram Sang <w.sang@pengutronix.de>
> On Wed, Nov 07, 2012 at 11:44:37AM +0100, Jean Delvare wrote:
> > On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
> > > Don't unmark the device as suspended until after it's been re-setup.
> > >
> > > The main race would be w.r.t. an i2c driver that gets resumed at the
> same
> > > time (asyncronously), that is allowed to do a transfer since suspended
> > > is set to 0 before reinit, but really should have seen the -EIO return
> > > instead.
> >
> > I thought that the suspend order was children first and the resume
> > order was parent first?
>
> Same here, why does it not work this way?
>
Sorry for being quiet on this so far, I didn't notice the controversy until
now.
This is actually about half of what the original fix was (which I wrote,
thus my signed-off-by). The original one was related to us having the GPIO
handshake for a shared bus (see separate discussions on how that should be
upstreamed, and the work on that). For reference, that patch is at:
https://gerrit.chromium.org/gerrit/#/c/28126/1/drivers/i2c/busses/i2c-s3c2410.c
.
So, I'm not sure that this patch is really needed. The significant part of
the original one was the move of our internal s3c24xx_i2c_dt_gpio_free()
below setting suspended = 1. Upstream implementation of the same
functionality will be implemented differently, most likely.
-Olof
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130124/9785789b/attachment-0001.html>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] i2c: samsung: resume race fix
2013-01-24 13:27 ` Wolfram Sang
2013-01-24 16:41 ` Olof Johansson
@ 2013-01-24 16:42 ` Olof Johansson
1 sibling, 0 replies; 8+ messages in thread
From: Olof Johansson @ 2013-01-24 16:42 UTC (permalink / raw)
To: linux-arm-kernel
[Silly gmail defaulting to html the first time around, sorry for the
re-send to those not on lists]
2013/1/24 Wolfram Sang <w.sang@pengutronix.de>:
> On Wed, Nov 07, 2012 at 11:44:37AM +0100, Jean Delvare wrote:
>> On Wed, 07 Nov 2012 15:58:26 +0530, Naveen Krishna Chatradhi wrote:
>> > Don't unmark the device as suspended until after it's been re-setup.
>> >
>> > The main race would be w.r.t. an i2c driver that gets resumed at the same
>> > time (asyncronously), that is allowed to do a transfer since suspended
>> > is set to 0 before reinit, but really should have seen the -EIO return
>> > instead.
>>
>> I thought that the suspend order was children first and the resume
>> order was parent first?
>
> Same here, why does it not work this way?
Sorry for being quiet on this so far, I didn't notice the controversy until now.
This is actually about half of what the original fix was (which I
wrote, thus my signed-off-by). The original one was related to us
having the GPIO handshake for a shared bus (see separate discussions
on how that should be upstreamed, and the work on that). For
reference, that patch is at:
https://gerrit.chromium.org/gerrit/#/c/28126/1/drivers/i2c/busses/i2c-s3c2410.c.
So, I'm not sure that this patch is really needed. The significant
part of the original one was the move of our internal
s3c24xx_i2c_dt_gpio_free() below setting suspended = 1. Upstream
implementation of the same functionality will be implemented
differently, most likely.
-Olof
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-01-24 16:44 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-07 10:28 [PATCH] i2c: samsung: resume race fix Naveen Krishna Chatradhi
2012-11-07 10:44 ` Jean Delvare
2013-01-07 12:05 ` Naveen Krishna Ch
2013-01-07 12:25 ` Jean Delvare
2013-01-24 13:27 ` Wolfram Sang
2013-01-24 16:41 ` Olof Johansson
2013-01-24 16:44 ` Wolfram Sang
2013-01-24 16:42 ` Olof Johansson
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).