• Stephen Warren's avatar
    i2c: Re-instate body of i2c_parent_is_i2c_adapter() · 2fac2b89
    Stephen Warren authored
    The body of i2c_parent_is_i2c_adapter() is currently guarded by
    I2C_MUX. It should be CONFIG_I2C_MUX instead.
    
    Among potentially other problems, this resulted in i2c_lock_adapter()
    only locking I2C mux child adapters, and not the parent adapter. In
    turn, this could allow inter-mingling of mux child selection and I2C
    transactions, which could result in I2C transactions being directed to
    the wrong I2C bus, and possibly even switching between busses in the
    middle of a transaction.
    
    One concrete issue caused by this bug was corrupted HDMI EDID reads
    during boot on the NVIDIA Tegra Seaboard system, although this only
    became apparent in recent linux-next, when the boot timing was changed
    just enough to trigger the race condition.
    
    Fixes: 3923172b
    
     ("i2c: reduce parent checking to a NOOP in non-I2C_MUX case")
    Cc: Phil Carmody <phil.carmody@partner.samsung.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Stephen Warren's avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    2fac2b89
i2c.h 20.5 KB