mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-04 12:54:37 +08:00
i2c: rcar: explain the lockless design
To make sure people can understand the lockless design of this driver without the need to dive into git history, add a comment giving an overview of the situation. Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Simon Horman <horms+renesas@verge.net.au> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
a35ba2f74d
commit
7ce98a5591
@ -611,6 +611,15 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* This driver has a lock-free design because there are IP cores (at least
|
||||
* R-Car Gen2) which have an inherent race condition in their hardware design.
|
||||
* There, we need to clear RCAR_BUS_MASK_DATA bits as soon as possible after
|
||||
* the interrupt was generated, otherwise an unwanted repeated message gets
|
||||
* generated. It turned out that taking a spinlock at the beginning of the ISR
|
||||
* was already causing repeated messages. Thus, this driver was converted to
|
||||
* the now lockless behaviour. Please keep this in mind when hacking the driver.
|
||||
*/
|
||||
static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
|
||||
{
|
||||
struct rcar_i2c_priv *priv = ptr;
|
||||
|
Loading…
Reference in New Issue
Block a user