Pratyush Anand
970fc7f4af
rtc: cmos: Initialize hpet timer before irq is registered
We have observed on few x86 machines with rtc-cmos device that
hpet_rtc_interrupt() is called just after irq registration and before
cmos_do_probe() could call hpet_rtc_timer_init().
So, neither hpet_default_delta nor hpet_t1_cmp is initialized by the time
interrupt is raised in the given situation, and this results in NMI
watchdog LOCKUP.
It has only been observed sporadically on kdump secondary kernels.
See the call trace:
---<-snip->---
[ 27.913194] Kernel panic - not syncing: Watchdog detected hard LOCKUP on cpu 0
[ 27.915371] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.10.0-342.el7.x86_64 #1
[ 27.917503] Hardware name: HP ProLiant DL160 Gen8, BIOS J03 02/10/2014
[ 27.919455] ffffffff8186a728 0000000059c82488 ffff880034e05af0 ffffffff81637bd4
[ 27.921870] ffff880034e05b70 ffffffff8163144a 0000000000000010 ffff880034e05b80
[ 27.924257] ffff880034e05b20 0000000059c82488 0000000000000000 0000000000000000
[ 27.926599] Call Trace:
[ 27.927352] <NMI> [<ffffffff81637bd4>] dump_stack+0x19/0x1b
[ 27.929080] [<ffffffff8163144a>] panic+0xd8/0x1e7
[ 27.930588] [<ffffffff8111d3e0>] ? restart_watchdog_hrtimer+0x50/0x50
[ 27.932502] [<ffffffff8111d4a2>] watchdog_overflow_callback+0xc2/0xd0
[ 27.934427] [<ffffffff811612c1>] __perf_event_overflow+0xa1/0x250
[ 27.936232] [<ffffffff81161d94>] perf_event_overflow+0x14/0x20
[ 27.937957] [<ffffffff81032ae8>] intel_pmu_handle_irq+0x1e8/0x470
[ 27.939799] [<ffffffff8164164b>] perf_event_nmi_handler+0x2b/0x50
[ 27.941649] [<ffffffff81640d99>] nmi_handle.isra.0+0x69/0xb0
[ 27.943348] [<ffffffff81640f49>] do_nmi+0x169/0x340
[ 27.944802] [<ffffffff816401d3>] end_repeat_nmi+0x1e/0x2e
[ 27.946424] [<ffffffff81056ee5>] ? hpet_rtc_interrupt+0x85/0x380
[ 27.948197] [<ffffffff81056ee5>] ? hpet_rtc_interrupt+0x85/0x380
[ 27.949992] [<ffffffff81056ee5>] ? hpet_rtc_interrupt+0x85/0x380
[ 27.951816] <<EOE>> <IRQ> [<ffffffff8108f5a3>] ? run_timer_softirq+0x43/0x340
[ 27.954114] [<ffffffff8111e24e>] handle_irq_event_percpu+0x3e/0x1e0
[ 27.955962] [<ffffffff8111e42d>] handle_irq_event+0x3d/0x60
[ 27.957635] [<ffffffff811210c7>] handle_edge_irq+0x77/0x130
[ 27.959332] [<ffffffff8101704f>] handle_irq+0xbf/0x150
[ 27.960949] [<ffffffff8164a86f>] do_IRQ+0x4f/0xf0
[ 27.962434] [<ffffffff8163faed>] common_interrupt+0x6d/0x6d
[ 27.964101] <EOI> [<ffffffff8163f43b>] ? _raw_spin_unlock_irqrestore+0x1b/0x40
[ 27.966308] [<fffff8111ff07>] __setup_irq+0x2a7/0x570
[ 28.067859] [<ffffffff81056e60>] ? hpet_cpuhp_notify+0x140/0x140
[ 28.069709] [<ffffffff8112032c>] request_threaded_irq+0xcc/0x170
[ 28.071585] [<ffffffff814b24a6>] cmos_do_probe+0x1e6/0x450
[ 28.073240] [<ffffffff814b2710>] ? cmos_do_probe+0x450/0x450
[ 28.074911] [<ffffffff814b27cb>] cmos_pnp_probe+0xbb/0xc0
[ 28.076533] [<ffffffff8139b245>] pnp_device_probe+0x65/0xd0
[ 28.078198] [<ffffffff813f8ca7>] driver_probe_device+0x87/0x390
[ 28.079971] [<ffffffff813f9083>] __driver_attach+0x93/0xa0
[ 28.081660] [<ffffffff813f8ff0>] ? __device_attach+0x40/0x40
[ 28.083662] [<ffffffff813f6a13>] bus_for_each_dev+0x73/0xc0
[ 28.085370] [<ffffffff813f86fe>] driver_attach+0x1e/0x20
[ 28.086974] [<ffffffff813f8250>] bus_add_driver+0x200/0x2d0
[ 28.088634] [<ffffffff81ade49a>] ? rtc_sysfs_init+0xe/0xe
[ 28.090349] [<ffffffff813f9704>] driver_register+0x64/0xf0
[ 28.091989] [<ffffffff8139b070>] pnp_register_driver+0x20/0x30
[ 28.093707] [<ffffffff81ade4ab>] cmos_init+0x11/0x71
---<-snip->---
This patch moves hpet_rtc_timer_init() before IRQ registration, so that we
can gracefully handle such spurious interrupts. It also masks HPET RTC
interrupts, in case IRQ registration fails.
We were able to reproduce the problem in maximum 15 trials of kdump
secondary kernel boot on an hp-dl160gen8 FCoE host machine without this
patch. However, more than 35 trials went fine after applying this patch.
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Pratyush Anand <panand@redhat.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
|
2016-09-20 00:22:00 +02:00 |
| .. |
|
accessibility
|
|
|
|
acpi
|
More ACPI updates for v4.8-rc1
|
2016-08-05 23:29:05 -04:00 |
|
amba
|
|
|
|
android
|
|
|
|
ata
|
New LED class driver:
|
2016-07-27 14:03:52 -07:00 |
|
atm
|
drivers: atm: nicstar: Use the correct function to free some resources
|
2016-07-19 11:30:26 -07:00 |
|
auxdisplay
|
|
|
|
base
|
More power management updates for v4.8-rc1
|
2016-08-05 23:26:16 -04:00 |
|
bcma
|
wireless-drivers-next patches for 4.8
|
2016-07-25 11:09:19 -07:00 |
|
block
|
block: rename bio bi_rw to bi_opf
|
2016-08-07 14:41:02 -06:00 |
|
bluetooth
|
Bluetooth: btmrvl: reset is_suspending flag in failure path
|
2016-07-18 10:13:02 +02:00 |
|
bus
|
ARM: SoC driver updates for v4.8
|
2016-08-01 18:36:01 -04:00 |
|
cdrom
|
|
|
|
char
|
RTC for 4.8
|
2016-08-05 09:48:22 -04:00 |
|
clk
|
treewide: replace obsolete _refok by __ref
|
2016-08-02 17:31:41 -04:00 |
|
clocksource
|
ARM: SoC driver updates for v4.8
|
2016-08-01 18:36:01 -04:00 |
|
connector
|
|
|
|
cpufreq
|
More power management updates for v4.8-rc1
|
2016-08-05 23:26:16 -04:00 |
|
cpuidle
|
powerpc updates for 4.8 # 1
|
2016-07-30 21:01:36 -07:00 |
|
crypto
|
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
|
2016-08-01 14:28:42 -04:00 |
|
dax
|
|
|
|
dca
|
|
|
|
devfreq
|
|
|
|
dio
|
|
|
|
dma
|
dmaengine updates for 4.8-rc1
|
2016-07-28 15:45:17 -07:00 |
|
dma-buf
|
dma-buf: Release module reference on creation failure
|
2016-07-18 14:10:49 +02:00 |
|
edac
|
* Altera Arria10 ethernet FIFO buffer support (Thor Thayer)
|
2016-07-27 13:40:47 -07:00 |
|
eisa
|
|
|
|
extcon
|
|
|
|
firewire
|
|
|
|
firmware
|
tree-wide: replace config_enabled() with IS_ENABLED()
|
2016-08-04 08:50:07 -04:00 |
|
fmc
|
|
|
|
fpga
|
drivers/fpga/Kconfig: fix build failure
|
2016-08-04 08:50:07 -04:00 |
|
gpio
|
This is the bulk of GPIO changes for the v4.8 kernel cycle.
|
2016-07-26 19:16:01 -07:00 |
|
gpu
|
Merge tag 'drm-for-v4.8-zpos' of git://people.freedesktop.org/~airlied/linux
|
2016-08-07 16:35:08 -07:00 |
|
hid
|
Merge branch 'for-4.8/hid-led' into for-linus
|
2016-07-28 10:49:23 +02:00 |
|
hsi
|
|
|
|
hv
|
|
|
|
hwmon
|
hwmon updates for v4.8 (take 2)
|
2016-08-01 16:49:13 -04:00 |
|
hwspinlock
|
|
|
|
hwtracing
|
Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2016-07-29 13:55:30 -07:00 |
|
i2c
|
powerpc updates for 4.8 # 1
|
2016-07-30 21:01:36 -07:00 |
|
ide
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide
|
2016-07-29 13:29:06 -07:00 |
|
idle
|
Merge branch 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2016-07-30 12:56:26 -07:00 |
|
iio
|
|
|
|
infiniband
|
Second round of merge items for 4.8
|
2016-08-04 20:26:31 -04:00 |
|
input
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2016-08-05 23:24:15 -04:00 |
|
iommu
|
dma-mapping: use unsigned long for dma_attrs
|
2016-08-04 08:50:07 -04:00 |
|
ipack
|
|
|
|
irqchip
|
tree-wide: replace config_enabled() with IS_ENABLED()
|
2016-08-04 08:50:07 -04:00 |
|
isdn
|
|
|
|
leds
|
powerpc updates for 4.8 # 1
|
2016-07-30 21:01:36 -07:00 |
|
lguest
|
|
|
|
lightnvm
|
block: get rid of bio_rw and READA
|
2016-07-20 17:37:01 -06:00 |
|
macintosh
|
powerpc updates for 4.8 # 1
|
2016-07-30 21:01:36 -07:00 |
|
mailbox
|
mailbox: Fix format and type mismatches in Broadcom PDC driver
|
2016-07-28 21:27:31 +05:30 |
|
mcb
|
|
|
|
md
|
block: rename bio bi_rw to bi_opf
|
2016-08-07 14:41:02 -06:00 |
|
media
|
media updates for v4.8-rc1
|
2016-08-04 09:59:37 -04:00 |
|
memory
|
MTD updates for v4.8:
|
2016-08-02 17:05:11 -04:00 |
|
memstick
|
memstick: don't allocate unused major for ms_block
|
2016-08-02 17:31:41 -04:00 |
|
message
|
|
|
|
mfd
|
mfd: ac100: Add driver for X-Powers AC100 audio codec / RTC combo IC
|
2016-08-08 12:53:26 +01:00 |
|
misc
|
virtio/vhost: new features for 4.8
|
2016-08-06 09:20:13 -04:00 |
|
mmc
|
MMC core:
|
2016-07-31 21:36:58 -04:00 |
|
mtd
|
This pull request contains mostly cleanups and minor
|
2016-08-04 19:51:49 -04:00 |
|
net
|
virtio/vhost: new features for 4.8
|
2016-08-06 09:20:13 -04:00 |
|
nfc
|
NFC 4.8 pull request
|
2016-07-20 23:39:36 -07:00 |
|
ntb
|
NTB: ntb_hw_intel: use local variable pdev
|
2016-08-05 10:34:13 -04:00 |
|
nubus
|
|
|
|
nvdimm
|
block: rename bio bi_rw to bi_opf
|
2016-08-07 14:41:02 -06:00 |
|
nvme
|
PCI changes for the v4.8 merge window:
|
2016-08-02 17:12:29 -04:00 |
|
nvmem
|
|
|
|
of
|
ramoops: use DT reserved-memory bindings
|
2016-08-05 11:21:36 -07:00 |
|
oprofile
|
|
|
|
parisc
|
dma-mapping: use unsigned long for dma_attrs
|
2016-08-04 08:50:07 -04:00 |
|
parport
|
|
|
|
pci
|
ACPI / hotplug / PCI: Runtime resume bridges before bus rescans
|
2016-08-04 21:33:58 -04:00 |
|
pcmcia
|
|
|
|
perf
|
Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2016-07-29 13:55:30 -07:00 |
|
phy
|
MMC core:
|
2016-07-31 21:36:58 -04:00 |
|
pinctrl
|
This is the bulk of pin control changes for the v4.8 kernel cycle.
|
2016-07-28 17:06:51 -07:00 |
|
platform
|
pwm: Changes for v4.8-rc1
|
2016-08-06 00:01:33 -04:00 |
|
pnp
|
PNP: pnpbios: add header file to fix build errors
|
2016-07-27 18:52:54 +02:00 |
|
power
|
ARM: SoC driver updates for v4.8
|
2016-08-01 18:36:01 -04:00 |
|
powercap
|
|
|
|
pps
|
pps: do not crash when failed to register
|
2016-07-23 10:25:54 +09:00 |
|
ps3
|
|
|
|
ptp
|
|
|
|
pwm
|
pwm: Changes for v4.8-rc1
|
2016-08-06 00:01:33 -04:00 |
|
rapidio
|
rapidio/switches: add driver for IDT gen3 switches
|
2016-08-02 19:35:38 -04:00 |
|
ras
|
|
|
|
regulator
|
pwm: Changes for v4.8-rc1
|
2016-08-06 00:01:33 -04:00 |
|
remoteproc
|
dma-mapping: use unsigned long for dma_attrs
|
2016-08-04 08:50:07 -04:00 |
|
reset
|
|
|
|
rpmsg
|
|
|
|
rtc
|
rtc: cmos: Initialize hpet timer before irq is registered
|
2016-09-20 00:22:00 +02:00 |
|
s390
|
- ARM: GICv3 ITS emulation and various fixes. Removal of the old
|
2016-08-02 16:11:27 -04:00 |
|
sbus
|
|
|
|
scsi
|
SCSI misc on 20160805
|
2016-08-05 23:47:27 -04:00 |
|
sfi
|
|
|
|
sh
|
|
|
|
sn
|
|
|
|
soc
|
ARM: SoC driver updates for v4.8
|
2016-08-01 18:36:01 -04:00 |
|
spi
|
ARM: DT updates for v4.8
|
2016-08-01 18:37:45 -04:00 |
|
spmi
|
|
|
|
ssb
|
|
|
|
staging
|
Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-08-07 10:01:14 -04:00 |
|
target
|
target: iblock_execute_sync_cache() should use bio_set_op_attrs()
|
2016-08-07 14:41:02 -06:00 |
|
tc
|
|
|
|
thermal
|
|
|
|
thunderbolt
|
|
|
|
tty
|
tree-wide: replace config_enabled() with IS_ENABLED()
|
2016-08-04 08:50:07 -04:00 |
|
uio
|
|
|
|
usb
|
More USB patches for 4.8-rc1
|
2016-08-05 23:07:43 -04:00 |
|
uwb
|
|
|
|
vfio
|
vfio: platform: check reset call return code during release
|
2016-07-19 10:54:45 -06:00 |
|
vhost
|
virtio/vhost: new features for 4.8
|
2016-08-06 09:20:13 -04:00 |
|
video
|
dma-mapping: use unsigned long for dma_attrs
|
2016-08-04 08:50:07 -04:00 |
|
virt
|
|
|
|
virtio
|
virtio/vhost: new features for 4.8
|
2016-08-06 09:20:13 -04:00 |
|
vlynq
|
|
|
|
vme
|
|
|
|
w1
|
w1:omap_hdq: fix regression
|
2016-08-02 19:35:40 -04:00 |
|
watchdog
|
watchdog: gpio_wdt: Fix missing platform_set_drvdata() in gpio_wdt_probe()
|
2016-07-27 10:47:43 +02:00 |
|
xen
|
dma-mapping: use unsigned long for dma_attrs
|
2016-08-04 08:50:07 -04:00 |
|
zorro
|
|
|
|
Kconfig
|
|
|
|
Makefile
|
virtio/vhost: new features for 4.8
|
2016-08-06 09:20:13 -04:00 |