Re: [PATCH 2/2] i2c: rcar: explain the lockless design

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Mar 03, 2019 at 04:03:14PM +0100, Wolfram Sang wrote:
> 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@xxxxxxxxxxxxxxxxxxxx>

Reviewed-by: Simon Horman <horms+renesas@xxxxxxxxxxxx>

> ---
>  drivers/i2c/busses/i2c-rcar.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
> index 6410896f717b..3ce74edcd70c 100644
> --- a/drivers/i2c/busses/i2c-rcar.c
> +++ b/drivers/i2c/busses/i2c-rcar.c
> @@ -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;
> -- 
> 2.11.0
> 



[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux