lkml.org 
[lkml]   [2015]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 010/110] iio:st_sensors: Fix oops when probing SPI devices
    Date
    3.16.7-ckt13 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alban Bedel <alban.bedel@avionic-design.de>

    commit 8e71c04f863a1754f21b27fb8ecb773d680a0a80 upstream.

    In SPI mode the transfer buffer is locked with a mutex. However this
    mutex is only initilized after the probe, but some transfer needs to
    be done in the probe.

    To fix this bug we move the mutex initialization at the beginning of
    the device probe.

    Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
    Acked-by: Denis Ciocca <denis.ciocca@st.com>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    [ luis: backported to 3.16:
    - use 'pdata' instead of 'press_data' in st_press_common_probe()
    - adjusted context ]
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/iio/accel/st_accel_core.c | 1 +
    drivers/iio/common/st_sensors/st_sensors_core.c | 2 --
    drivers/iio/gyro/st_gyro_core.c | 1 +
    drivers/iio/magnetometer/st_magn_core.c | 1 +
    drivers/iio/pressure/st_pressure_core.c | 1 +
    5 files changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
    index a2abf7c2ce3b..36cb5139e48e 100644
    --- a/drivers/iio/accel/st_accel_core.c
    +++ b/drivers/iio/accel/st_accel_core.c
    @@ -458,6 +458,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev,

    indio_dev->modes = INDIO_DIRECT_MODE;
    indio_dev->info = &accel_info;
    + mutex_init(&adata->tb.buf_lock);

    st_sensors_power_enable(indio_dev);

    diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
    index e8b932fed70e..4cafb43f948e 100644
    --- a/drivers/iio/common/st_sensors/st_sensors_core.c
    +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
    @@ -271,8 +271,6 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,
    struct st_sensor_data *sdata = iio_priv(indio_dev);
    int err = 0;

    - mutex_init(&sdata->tb.buf_lock);
    -
    if (pdata)
    err = st_sensors_set_drdy_int_pin(indio_dev, pdata);

    diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
    index ed74a9069989..bd6015d01d08 100644
    --- a/drivers/iio/gyro/st_gyro_core.c
    +++ b/drivers/iio/gyro/st_gyro_core.c
    @@ -310,6 +310,7 @@ int st_gyro_common_probe(struct iio_dev *indio_dev,

    indio_dev->modes = INDIO_DIRECT_MODE;
    indio_dev->info = &gyro_info;
    + mutex_init(&gdata->tb.buf_lock);

    st_sensors_power_enable(indio_dev);

    diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
    index 4d55151893af..04ec7bae5655 100644
    --- a/drivers/iio/magnetometer/st_magn_core.c
    +++ b/drivers/iio/magnetometer/st_magn_core.c
    @@ -362,6 +362,7 @@ int st_magn_common_probe(struct iio_dev *indio_dev,

    indio_dev->modes = INDIO_DIRECT_MODE;
    indio_dev->info = &magn_info;
    + mutex_init(&mdata->tb.buf_lock);

    st_sensors_power_enable(indio_dev);

    diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
    index cd7e01f3a93b..1aa7c18471a8 100644
    --- a/drivers/iio/pressure/st_pressure_core.c
    +++ b/drivers/iio/pressure/st_pressure_core.c
    @@ -395,6 +395,7 @@ int st_press_common_probe(struct iio_dev *indio_dev,

    indio_dev->modes = INDIO_DIRECT_MODE;
    indio_dev->info = &press_info;
    + mutex_init(&pdata->tb.buf_lock);

    st_sensors_power_enable(indio_dev);


    \
     
     \ /
      Last update: 2015-06-05 17:01    [W:3.537 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site