diff options
author | Louis Li <louli@nvidia.com> | 2014-04-21 14:10:37 +0800 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-05-14 07:18:35 -0700 |
commit | c644396e53d0100431ea5e4e06528d967581f812 (patch) | |
tree | 9fa0e10467aaf72899ed5152def23d47acfab251 /drivers/iio | |
parent | a018da2780d79e64f036573c4de02cffa4ce6207 (diff) |
iio: core: add protection to avoid race condition
Kernel panic at iio_read_channel_info during boot stress. It is supposed
that iio_dev has been released while sensor service is reading sysfile.
So add a protection here to avoid race condition.
Bug 1501090
Change-Id: I24da6245f4473fdcc2e8e7bf9673fbd25c350820
Reviewed-on: http://git-master/r/398726
(cherry picked from commit 75155b5e80369feafc612a8c0f1ec44ed84dee10)
Signed-off-by: Louis Li <louli@nvidia.com>
Reviewed-on: http://git-master/r/408580
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/industrialio-core.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index c709b59b83cb..0b7940cdcc8d 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -370,10 +370,13 @@ static ssize_t iio_read_channel_info(struct device *dev, struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); unsigned long long tmp; - int val, val2; + int ret, val, val2; bool scale_db = false; - int ret = indio_dev->info->read_raw(indio_dev, this_attr->c, - &val, &val2, this_attr->address); + if (likely(indio_dev && indio_dev->info && indio_dev->info->read_raw)) + ret = indio_dev->info->read_raw(indio_dev, this_attr->c, + &val, &val2, this_attr->address); + else + ret = -ENODEV; if (ret < 0) return ret; |