mirror of https://github.com/torvalds/linux.git
The code in bmc150-accel-core.c unconditionally calls bmc150_accel_set_interrupt() in the iio_buffer_setup_ops, such as on the runtime PM resume path giving a kernel splat like this if the device has no interrupts: Unable to handle kernel NULL pointer dereference at virtual address 00000001 when read PC is at bmc150_accel_set_interrupt+0x98/0x194 LR is at __pm_runtime_resume+0x5c/0x64 (...) Call trace: bmc150_accel_set_interrupt from bmc150_accel_buffer_postenable+0x40/0x108 bmc150_accel_buffer_postenable from __iio_update_buffers+0xbe0/0xcbc __iio_update_buffers from enable_store+0x84/0xc8 enable_store from kernfs_fop_write_iter+0x154/0x1b4 This bug seems to have been in the driver since the beginning, but it only manifests recently, I do not know why. Store the IRQ number in the state struct, as this is a common pattern in other drivers, then use this to determine if we have IRQ support or not. Cc: stable@vger.kernel.org Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Reviewed-by: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
||
|---|---|---|
| .. | ||
| accel | ||
| adc | ||
| addac | ||
| afe | ||
| amplifiers | ||
| buffer | ||
| cdc | ||
| chemical | ||
| common | ||
| dac | ||
| dummy | ||
| filter | ||
| frequency | ||
| gyro | ||
| health | ||
| humidity | ||
| imu | ||
| light | ||
| magnetometer | ||
| multiplexer | ||
| orientation | ||
| position | ||
| potentiometer | ||
| potentiostat | ||
| pressure | ||
| proximity | ||
| resolver | ||
| temperature | ||
| test | ||
| trigger | ||
| Kconfig | ||
| Makefile | ||
| TODO | ||
| iio_core.h | ||
| iio_core_trigger.h | ||
| industrialio-acpi.c | ||
| industrialio-backend.c | ||
| industrialio-buffer.c | ||
| industrialio-configfs.c | ||
| industrialio-core.c | ||
| industrialio-event.c | ||
| industrialio-gts-helper.c | ||
| industrialio-sw-device.c | ||
| industrialio-sw-trigger.c | ||
| industrialio-trigger.c | ||
| industrialio-triggered-event.c | ||
| inkern.c | ||