linux/drivers/misc
Ira Snyder 6c15d7afbb carma-fpga: fix race between data dumping and DMA callback
When the system is under heavy load, we occasionally saw a problem where
the system would get a legitimate interrupt when they should be
disabled.

This was caused by the data_dma_cb() DMA callback unconditionally
re-enabling FPGA interrupts even when data dumping is disabled. When
data dumping was re-enabled, the irq handler would fire while a DMA was
in progress. The "BUG_ON(priv->inflight != NULL);" during the second
invocation of the DMA callback caused the system to crash.

To fix the issue, the priv->enabled boolean is moved under the
protection of the priv->lock spinlock. The DMA callback checks the
boolean to know whether to re-enable FPGA interrupts before it returns.

Now that it is fixed, the driver keeps FPGA interrupts disabled when it
expects that they are disabled, fixing the bug.

Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2012-02-27 11:33:59 +11:00
..
altera-stapl Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2011-10-31 15:42:54 -07:00
c2port c2port: fix build error for duramar2150 due to missing header. 2012-01-24 16:21:01 -08:00
carma carma-fpga: fix race between data dumping and DMA callback 2012-02-27 11:33:59 +11:00
cb710 mmc: cb710 core: Add missing spin_lock_init for irq_lock of struct cb710_chip 2012-02-02 16:28:14 -08:00
eeprom eeprom_93cx6: Add write support 2011-11-26 14:59:39 -05:00
ibmasm misc latin1 to utf8 conversions 2012-01-02 13:04:55 +01:00
iwmc3200top module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
lis3lv02d module_param: check type correctness for module_param_array 2012-01-13 09:32:16 +10:30
sgi-gru switch procfs to umode_t use 2012-01-03 22:54:56 -05:00
sgi-xp net: remove NETIF_F_NO_CSUM feature bit 2011-11-16 17:43:12 -05:00
ti-st drivers:misc: ti-st: DEBUG uart, baud rate mods 2012-01-04 15:21:04 -08:00
ab8500-pwm.c mfd: Unify abx500 headers in mfd/abx500 2012-01-09 00:37:39 +01:00
ad525x_dpot-i2c.c misc: ad525x_dpot: Add support for SPI module device table matching 2011-11-18 11:27:02 -08:00
ad525x_dpot-spi.c misc: ad525x_dpot: Add support for SPI module device table matching 2011-11-18 11:27:02 -08:00
ad525x_dpot.c misc: ad525x_dpot: Add support for SPI module device table matching 2011-11-18 11:27:02 -08:00
ad525x_dpot.h Merge branch 'char-misc-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc 2012-01-09 12:08:59 -08:00
apds990x.c drivers/misc/apds990x.c: apds990x_chip_on() should depend on CONFIG_PM || CONFIG_PM_RUNTIME 2011-06-15 20:04:02 -07:00
apds9802als.c drivers/misc/apds9802als.c: put the device into runtime suspend after resume()/probe() is handled 2011-03-22 17:44:10 -07:00
arm-charlcd.c tree-wide: fix comment/printk typos 2010-11-01 15:38:34 -04:00
atmel_pwm.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
atmel_tclib.c drivers/misc: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required. 2011-10-31 19:31:54 -04:00
atmel-ssc.c drivers/misc: Add module.h to files who are really modular. 2011-10-31 19:31:53 -04:00
bh1770glc.c drivers/misc/bh1770glc.c: error handling in bh1770_power_state_store() 2010-11-12 07:55:31 -08:00
bh1780gli.c drivers/misc: Add module.h to files who are really modular. 2011-10-31 19:31:53 -04:00
bmp085.c BMP085: Remove redundant semi-colon from return statement 2012-01-04 15:21:56 -08:00
cs5535-mfgpt.c cs5535-mfgpt: don't call __init function from __devinit 2012-02-02 16:28:13 -08:00
ds1682.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
enclosure.c [SCSI] enclosure: fix error path - actually return ERR_PTR() on error 2010-07-27 12:03:48 -05:00
ep93xx_pwm.c drivers/misc/ep93xx_pwm.c: world-writable sysfs files 2011-03-22 17:44:11 -07:00
fsa9480.c driver/misc/fsa9480.c fix potential null-pointer dereference 2011-10-31 17:30:53 -07:00
hmc6352.c drivers/misc/hmc6352.c: fix wrong return value checking for i2c_master_recv() 2011-03-22 17:44:10 -07:00
hpilo.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2010-10-22 19:36:42 -07:00
hpilo.h hpilo: fix pointer warning in ilo_ccb_setup 2010-08-09 20:45:05 -07:00
ics932s401.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ioc4.c drivers/misc/ioc4.c: fix section mismatch / race condition 2011-06-27 18:00:13 -07:00
isl29003.c
isl29020.c isl29020: Remove a redundant semi-colon from return statement 2012-01-04 15:21:56 -08:00
Kconfig drivers: misc: Remove MISC_DEVICES config option 2012-01-24 16:24:02 -08:00
kgdbts.c drivers/misc: Add module.h to files who are really modular. 2011-10-31 19:31:53 -04:00
lkdtm.c lkdtm: avoid calling lkdtm_do_action() with spinlock held 2012-02-03 16:16:41 -08:00
Makefile misc: Add driver support for MAX8997 MUIC 2012-01-09 00:37:32 +01:00
max8997-muic.c misc: Remove max8997-muic sysfs attributes 2012-01-09 00:37:42 +01:00
pch_phub.c pch_phub: Fix MAC address writing issue for LAPIS ML7831 2011-11-15 11:01:50 -08:00
phantom.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
pti.c drivers/misc/pti.c: give 'comm' function scope in pti_control_frame_built_and_sent() 2011-09-14 18:09:38 -07:00
spear13xx_pcie_gadget.c pcie-gadget-spear: Add "platform:" prefix for platform modalias 2011-11-14 16:09:32 -08:00
ti_dac7512.c drivers/misc: add driver for Texas Instruments DAC7512 2009-12-15 08:53:25 -08:00
tifm_7xx1.c drivers/misc: Add module.h to files who are really modular. 2011-10-31 19:31:53 -04:00
tifm_core.c drivers/misc: Add module.h to files who are really modular. 2011-10-31 19:31:53 -04:00
tsl2550.c tsl2550: Move from i2c/chips to misc 2010-03-13 20:56:54 +01:00
vmw_balloon.c vmw_balloon: fix for a -Wuninitialized warning 2012-02-02 16:28:13 -08:00