Commit ce78cc07 authored by Olof Johansson's avatar Olof Johansson Committed by Wolfram Sang
Browse files

i2c: s3c2410: resume race fix



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: default avatarOlof Johansson <olof@lixom.net>
Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
Acked-by: default avatarKukjin Kim <kgene.kim@samsung.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
Cc: stable@kernel.org
parent 37e5eb0b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1276,10 +1276,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;
}