Patch "rtc: m41t80: avoid i2c read in m41t80_sqw_is_prepared" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
rtc: m41t80: avoid i2c read in m41t80_sqw_is_prepared
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rtc-m41t80-avoid-i2c-read-in-m41t80_sqw_is_prepared.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
13bb1d78f2e372ec0d9b30489ac63768240140fcMon Sep 17 00:00:00 2001
From: Troy Kisky <[email protected]>
Date: Thu, 2 Nov 2017 18:58:15 -0700
Subject: rtc: m41t80: avoid i2c read in m41t80_sqw_is_prepared
From: Troy Kisky <[email protected]>
commit 13bb1d78f2e372ec0d9b30489ac63768240140fc upstream.
This is a little more efficient and avoids the warning
WARNING: possible circular locking dependency detected 4.14.0-rc7-00010 #16 Not tainted
------------------------------------------------------
kworker/2:1/70 is trying to acquire lock:
(prepare_lock){+.+.}, at: [<c049300c>] clk_prepare_lock+0x80/0xf4
but task is already holding lock:
(i2c_register_adapter){+.+.}, at: [<c0690b04>]
i2c_adapter_lock_bus+0x14/0x18
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (i2c_register_adapter){+.+.}:
rt_mutex_lock+0x44/0x5c
i2c_adapter_lock_bus+0x14/0x18
i2c_transfer+0xa8/0xbc
i2c_smbus_xfer+0x20c/0x5d8
i2c_smbus_read_byte_data+0x38/0x48
m41t80_sqw_is_prepared+0x18/0x28--- drivers/rtc/rtc-m41t80.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)
drivers/rtc/rtc-m41t80.c +6 -9
@@ -155,6 +155,7 @@ struct m41t80_data {#ifdef CONFIG_COMMON_CLK struct clk_hw sqw;unsigned long freq; +unsigned int sqwe;#endif };
@@ -527,7 +528,10 @@ static int m41t80_sqw_control(struct clkelse ret &= ~M41T80_ALMON_SQWE ; -return i2c_smbus_write_byte_data (client,M41T80_REG_ALARM_MON , ret); + ret =i2c_smbus_write_byte_data (client,M41T80_REG_ALARM_MON , ret); +if (!ret) + m41t80->sqwe = enable; +return ret; }static int m41t80_sqw_prepare (struct clk_hw *hw)
@@ -542,14 +546,7 @@ static void m41t80_sqw_unprepare(structstatic int m41t80_sqw_is_prepared (struct clk_hw *hw) { -struct m41t80_data *m41t80 =sqw_to_m41t80_data (hw); -struct i2c_client *client = m41t80->client; -int ret =i2c_smbus_read_byte_data (client,M41T80_REG_ALARM_MON ); - -if (ret <0 ) -return ret; - -return !!(ret &M41T80_ALMON_SQWE ); +return sqw_to_m41t80_data (hw)->sqwe; }static const struct clk_ops m41t80_sqw_ops = {
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/rtc-m41t80-m41t80_sqw_set_rate-should-return-0-on-success.patch queue-4.14/rtc-m41t80-avoid-i2c-read-in-m41t80_sqw_is_prepared.patch queue-4.14/rtc-m41t80-avoid-i2c-read-in-m41t80_sqw_recalc_rate.patch queue-4.14/rtc-m41t80-remove-unneeded-checks-from-m41t80_sqw_set_rate.patch queue-4.14/rtc-m41t80-fix-m41t80_sqw_round_rate-return-value.patch