Revision 43e58856585f8c61e6a4a0f1fd6996d78799a973 authored by Emmanuel Grumbach on 10 November 2011, 00:50:50 UTC, committed by John W. Linville on 11 November 2011, 16:03:24 UTC
When HW RF kill switch is set to kill the radio, our NIC issues an
interrupt after we stop the APM module. When we unload the module,
the driver disables and cleans the interrupts before stopping the
APM. So we have a real interrupt (inta not zero) pending.
When this interrupts pops up the tasklet has already been killed
and we crash.

Here is a logical description of the flow:

disable and clean interrupts
synchronize interrupts
kill the tasklet

stop the APM <<== creates an RF kill interrupt

free_irq <<== somehow our ISR is called here and we crash

Here is the panic message:

[  201.313636] BUG: unable to handle kernel paging request at ffff8800911b7150
[  201.314541] IP: [<ffffffff8106d652>] tasklet_action+0x62/0x130
[  201.315149] PGD 1c06063 PUD db37f067 PMD db408067 PTE 80000000911b7160
[  201.316456] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
[  201.317324] CPU 1
[  201.317495] Modules linked in: arc4 iwlwifi(-) mac80211 cfg80211 netconsole configfs binfmt_misc i915 drm_kms_helper drm uvcvideo i2c_algo_bit videodev dell_laptop dcdbas intel_agp dell_wmi intel_ips psmouse intel_gtt v4l2_compat_ioctl32 asix usbnet mii serio_raw video sparse_keymap firewire_ohci sdhci_pci sdhci firewire_core e1000e crc_itu_t [last unloaded: configfs]
[  201.323839]
[  201.324015] Pid: 2061, comm: modprobe Not tainted 3.1.0-rc9-wl #4 Dell Inc. Latitude E6410/0667CC
[  201.324736] RIP: 0010:[<ffffffff8106d652>]  [<ffffffff8106d652>] tasklet_action+0x62/0x130
[  201.325128] RSP: 0018:ffff88011bc43ea0  EFLAGS: 00010286
[  201.325338] RAX: ffff88008ae70000 RBX: ffff8800911b7150 RCX: ffff88008ae70028
[  201.325555] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff88008ae70000
[  201.325775] RBP: ffff88011bc43ec0 R08: 0000000000000000 R09: 0000000000000000
[  201.325994] R10: 0000000000000002 R11: 0000000000000001 R12: 0000000000000001
[  201.326212] R13: 0000000000000006 R14: 0000000000000100 R15: ffff88008e259fd8
[  201.326431] FS:  00007f4b90ea9700(0000) GS:ffff88011bc40000(0000) knlGS:0000000000000000
[  201.326657] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  201.326864] CR2: ffff8800911b7150 CR3: 000000008fd6d000 CR4: 00000000000006e0
[  201.327083] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  201.327302] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[  201.327521] Process modprobe (pid: 2061, threadinfo ffff88008e258000, task ffff88008ae70000)
[  201.327747] Stack:
[  201.330494]  0000000000000046 0000000000000030 0000000000000001 0000000000000006
[  201.333870]  ffff88011bc43f30 ffffffff8106cd8a ffffffff811e1016 ffff88011bc43f08
[  201.337186]  0000000100000046 ffff88008e259fd8 0000000a10be2160 0000000000000006
[  201.340458] Call Trace:
[  201.342994]  <IRQ>
[  201.345656]  [<ffffffff8106cd8a>] __do_softirq+0xca/0x250
[  201.348185]  [<ffffffff811e1016>] ? pde_put+0x76/0x90
[  201.350730]  [<ffffffff8131aeae>] ? do_raw_spin_unlock+0x5e/0xb0
[  201.353261]  [<ffffffff811e1016>] ? pde_put+0x76/0x90
[  201.355776]  [<ffffffff8163ccfc>] call_softirq+0x1c/0x30
[  201.358287]  [<ffffffff8101531d>] do_softirq+0x9d/0xd0
[  201.360823]  [<ffffffff8106cb05>] irq_exit+0xd5/0xf0
[  201.363330]  [<ffffffff8163d5d6>] do_IRQ+0x66/0xe0
[  201.365819]  [<ffffffff81632673>] common_interrupt+0x73/0x73
[  201.368257]  <EOI>

Cc: <stable@kernel.org> 3.1+
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
1 parent 0ecfe80
Raw File
digiepca.txt
NOTE:  This driver is obsolete.  Digi provides a 2.6 driver (dgdm) at
http://www.digi.com for PCI cards.  They no longer maintain this driver,
and have no 2.6 driver for ISA cards.

This driver requires a number of user-space tools.  They can be acquired from
http://www.digi.com, but only works with 2.4 kernels.


The Digi Intl. epca driver. 
----------------------------
The Digi Intl. epca driver for Linux supports the following boards:

Digi PC/Xem, PC/Xr, PC/Xe, PC/Xi, PC/Xeve 
Digi EISA/Xem, PCI/Xem, PCI/Xr 

Limitations:
------------
Currently the driver only autoprobes for supported PCI boards. 

The Linux MAKEDEV command does not support generating the Digiboard
Devices.  Users executing digiConfig to setup EISA and PC series cards
will have their device nodes automatically constructed (cud?? for ~CLOCAL,
and ttyD?? for CLOCAL).  Users wishing to boot their board from the LILO
prompt, or those users booting PCI cards may use buildDIGI to construct 
the necessary nodes. 

Notes:
------
This driver may be configured via LILO.  For users who have already configured
their driver using digiConfig, configuring from LILO will override previous 
settings.  Multiple boards may be configured by issuing multiple LILO command 
lines.  For examples see the bottom of this document.

Device names start at 0 and continue up.  Beware of this as previous Digi 
drivers started device names with 1.

PCI boards are auto-detected and configured by the driver.  PCI boards will
be allocated device numbers (internally) beginning with the lowest PCI slot
first.  In other words a PCI card in slot 3 will always have higher device
nodes than a PCI card in slot 1. 

LILO config examples:
---------------------
Using LILO's APPEND command, a string of comma separated identifiers or 
integers can be used to configure supported boards.  The six values in order 
are:

   Enable/Disable this card or Override,
   Type of card: PC/Xe (AccelePort) (0), PC/Xeve (1), PC/Xem or PC/Xr (2), 
                 EISA/Xem (3), PC/64Xe (4), PC/Xi (5), 
   Enable/Disable alternate pin arrangement,
   Number of ports on this card,
   I/O Port where card is configured (in HEX if using string identifiers),
   Base of memory window (in HEX if using string identifiers), 

NOTE : PCI boards are auto-detected and configured.  Do not attempt to 
configure PCI boards with the LILO append command.  If you wish to override
previous configuration data (As set by digiConfig), but you do not wish to
configure any specific card (Example if there are PCI cards in the system) 
the following override command will accomplish this:
-> append="digi=2"

Samples:
   append="digiepca=E,PC/Xe,D,16,200,D0000"
                  or
   append="digi=1,0,0,16,512,851968"

Supporting Tools:
-----------------
Supporting tools include digiDload, digiConfig, buildPCI, and ditty.  See
drivers/char/README.epca for more details.  Note,
this driver REQUIRES that digiDload be executed prior to it being used. 
Failure to do this will result in an ENODEV error.

Documentation:
--------------
Complete documentation for this product may be found in the tool package. 

Sources of information and support:
-----------------------------------
Digi Intl. support site for this product:

->  http://www.digi.com

Acknowledgments:
----------------
Much of this work (And even text) was derived from a similar document 
supporting the original public domain DigiBoard driver Copyright (C)
1994,1995 Troy De Jongh.  Many thanks to Christoph Lameter 
(christoph@lameter.com) and Mike McLagan (mike.mclagan@linux.org) who authored 
and contributed to the original document. 

Changelog:
----------
10-29-04:	Update status of driver, remove dead links in document
		James Nelson <james4765@gmail.com>

2000 (?)	Original Document
back to top