* [PATCH] i2c: samsung: resume race fix
@ 2012-11-07 10:28 Naveen Krishna Chatradhi
[not found] ` <1352284106-24988-1-git-send-email-ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Naveen Krishna Chatradhi @ 2012-11-07 10:28 UTC (permalink / raw)
To: linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA
Cc: naveenkrishna.ch-Re5JQEeQqe8AvxtiuMwx3w,
ben-linux-elnMNo+KYs3YtjvyW6yDsg, khali-PUYAD+kWke1g9hUCZPvPmw,
w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
olofj-F7+t8E8rja9g9hUCZPvPmw
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-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Signed-off-by: Naveen Krishna Chatradhi <ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
---
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
* Re: [PATCH] i2c: samsung: resume race fix
[not found] ` <1352284106-24988-1-git-send-email-ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
@ 2012-11-07 10:44 ` Jean Delvare
[not found] ` <20121107114437.0a563c7e-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
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: Naveen Krishna Chatradhi
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
naveenkrishna.ch-Re5JQEeQqe8AvxtiuMwx3w,
ben-linux-elnMNo+KYs3YtjvyW6yDsg, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
olofj-F7+t8E8rja9g9hUCZPvPmw
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-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> ---
> 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-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
(Not perfect but still better than before.)
--
Jean Delvare
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] i2c: samsung: resume race fix
[not found] ` <20121107114437.0a563c7e-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2013-01-07 12:05 ` Naveen Krishna Ch
[not found] ` <CAHfPSqCQ9e3VR3En+hQGWVOt0RRGsmHzHTFvBF+h2-rEX5oXhQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Naveen Krishna Ch @ 2013-01-07 12:05 UTC (permalink / raw)
To: Jean Delvare
Cc: Naveen Krishna Chatradhi, linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
ben-linux-elnMNo+KYs3YtjvyW6yDsg, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
olofj-F7+t8E8rja9g9hUCZPvPmw
On 7 November 2012 16:14, Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.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-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
>> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> ---
>> 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-PUYAD+kWke1g9hUCZPvPmw@public.gmane.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
* Re: [PATCH] i2c: samsung: resume race fix
[not found] ` <CAHfPSqCQ9e3VR3En+hQGWVOt0RRGsmHzHTFvBF+h2-rEX5oXhQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 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: Naveen Krishna Ch, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ
Cc: Naveen Krishna Chatradhi, linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
ben-linux-elnMNo+KYs3YtjvyW6yDsg,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
olofj-F7+t8E8rja9g9hUCZPvPmw
On Mon, 7 Jan 2013 17:35:25 +0530, Naveen Krishna Ch wrote:
> On 7 November 2012 16:14, Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.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-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> >> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> >> ---
> >> 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-PUYAD+kWke1g9hUCZPvPmw@public.gmane.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
* Re: [PATCH] i2c: samsung: resume race fix
2012-11-07 10:44 ` Jean Delvare
[not found] ` <20121107114437.0a563c7e-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2013-01-24 13:27 ` Wolfram Sang
2013-01-24 16:41 ` Olof Johansson
[not found] ` <20130124132759.GH12933-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
1 sibling, 2 replies; 8+ messages in thread
From: Wolfram Sang @ 2013-01-24 13:27 UTC (permalink / raw)
To: Jean Delvare
Cc: Naveen Krishna Chatradhi, linux-i2c, linux-samsung-soc,
naveenkrishna.ch, ben-linux, linux-arm-kernel, olofj
[-- Attachment #1: Type: text/plain, Size: 790 bytes --]
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/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] i2c: samsung: resume race fix
2013-01-24 13:27 ` Wolfram Sang
@ 2013-01-24 16:41 ` Olof Johansson
[not found] ` <CALiw-2F7tG9ogDHj4Yf47T47rBn6mAiH2XvK8jpWB1a3OhNJBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
[not found] ` <20130124132759.GH12933-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
1 sibling, 1 reply; 8+ messages in thread
From: Olof Johansson @ 2013-01-24 16:41 UTC (permalink / raw)
To: Wolfram Sang
Cc: linux-samsung-soc, linux-i2c, ben-linux, Jean Delvare,
naveenkrishna.ch, Naveen Krishna Chatradhi, linux-arm-kernel
[-- Attachment #1.1: Type: text/plain, Size: 1405 bytes --]
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
[-- Attachment #1.2: Type: text/html, Size: 1972 bytes --]
[-- Attachment #2: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] i2c: samsung: resume race fix
[not found] ` <20130124132759.GH12933-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2013-01-24 16:42 ` Olof Johansson
0 siblings, 0 replies; 8+ messages in thread
From: Olof Johansson @ 2013-01-24 16:42 UTC (permalink / raw)
To: Wolfram Sang
Cc: Jean Delvare, Naveen Krishna Chatradhi,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
naveenkrishna.ch-Re5JQEeQqe8AvxtiuMwx3w,
ben-linux-elnMNo+KYs3YtjvyW6yDsg,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
[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-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>:
> 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
* Re: [PATCH] i2c: samsung: resume race fix
[not found] ` <CALiw-2F7tG9ogDHj4Yf47T47rBn6mAiH2XvK8jpWB1a3OhNJBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2013-01-24 16:44 ` Wolfram Sang
0 siblings, 0 replies; 8+ messages in thread
From: Wolfram Sang @ 2013-01-24 16:44 UTC (permalink / raw)
To: Olof Johansson
Cc: Jean Delvare, Naveen Krishna Chatradhi,
linux-i2c-u79uwXL29TY76Z2rM5mHXA,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
naveenkrishna.ch-Re5JQEeQqe8AvxtiuMwx3w,
ben-linux-elnMNo+KYs3YtjvyW6yDsg,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
[-- Attachment #1: Type: text/plain, Size: 337 bytes --]
> below setting suspended = 1. Upstream implementation of the same
> functionality will be implemented differently, most likely.
Thanks, so I'll discard this patch.
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ 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
[not found] ` <1352284106-24988-1-git-send-email-ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2012-11-07 10:44 ` Jean Delvare
[not found] ` <20121107114437.0a563c7e-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-01-07 12:05 ` Naveen Krishna Ch
[not found] ` <CAHfPSqCQ9e3VR3En+hQGWVOt0RRGsmHzHTFvBF+h2-rEX5oXhQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-07 12:25 ` Jean Delvare
2013-01-24 13:27 ` Wolfram Sang
2013-01-24 16:41 ` Olof Johansson
[not found] ` <CALiw-2F7tG9ogDHj4Yf47T47rBn6mAiH2XvK8jpWB1a3OhNJBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-24 16:44 ` Wolfram Sang
[not found] ` <20130124132759.GH12933-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
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).