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 |
| .. |
|
class.c
|
rtc: make class.c explicitly non-modular
|
2016-03-14 17:08:18 +01:00 |
|
hctosys.c
|
|
|
|
interface.c
|
rtc: fix a typo and reduce three empty lines to one
|
2016-07-11 23:22:35 +02:00 |
|
Kconfig
|
rtc: asm9260: allow COMPILE_TEST
|
2016-09-05 17:15:50 +02:00 |
|
Makefile
|
rtc: isl12057: remove driver
|
2016-08-31 18:21:34 +02:00 |
|
rtc-88pm80x.c
|
|
|
|
rtc-88pm860x.c
|
|
|
|
rtc-ab-b5ze-s3.c
|
|
|
|
rtc-ab3100.c
|
|
|
|
rtc-ab8500.c
|
rtc: ab8500: remove misuse of IRQF_NO_SUSPEND flag
|
2015-11-08 14:12:25 +01:00 |
|
rtc-abx80x.c
|
rtc: abx80x: use devm_add_action_or_reset()
|
2016-07-19 17:27:42 +02:00 |
|
rtc-ac100.c
|
rtc: ac100: support clock-output-names in device tree binding
|
2016-08-31 18:23:50 +02:00 |
|
rtc-armada38x.c
|
rtc: Fix module autoload for OF platform drivers
|
2015-09-05 19:37:22 +02:00 |
|
rtc-as3722.c
|
rtc: as3722: Drop IRQF_EARLY_RESUME flag
|
2016-03-14 17:08:25 +01:00 |
|
rtc-asm9260.c
|
rtc: asm9260: rework locking
|
2016-09-05 17:15:59 +02:00 |
|
rtc-at32ap700x.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-at91rm9200.c
|
rtc: at91rm9200: clear RTC alarm status flag prior to suspending
|
2015-11-08 14:12:28 +01:00 |
|
rtc-at91rm9200.h
|
|
|
|
rtc-at91sam9.c
|
rtc: at91sam9: Fix missing spin_lock_init()
|
2016-07-26 00:09:18 +02:00 |
|
rtc-au1xxx.c
|
|
|
|
rtc-bfin.c
|
rtc: Drop (un)likely before IS_ERR(_OR_NULL)
|
2015-09-05 13:19:09 +02:00 |
|
rtc-bq32k.c
|
rtc: bq32k: Fix handling of oscillator failure flag
|
2016-08-31 18:21:35 +02:00 |
|
rtc-bq4802.c
|
|
|
|
rtc-cmos.c
|
rtc: cmos: Initialize hpet timer before irq is registered
|
2016-09-20 00:22:00 +02:00 |
|
rtc-coh901331.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-core.h
|
|
|
|
rtc-da9052.c
|
rtc: explicitly set tm_sec = 0 for drivers with minute accurancy
|
2016-07-19 18:15:21 +02:00 |
|
rtc-da9055.c
|
rtc: explicitly set tm_sec = 0 for drivers with minute accurancy
|
2016-07-19 18:15:21 +02:00 |
|
rtc-da9063.c
|
rtc: da9063: avoid writing undefined data to rtc
|
2016-01-11 20:19:57 +01:00 |
|
rtc-davinci.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-dev.c
|
|
|
|
rtc-digicolor.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-dm355evm.c
|
|
|
|
rtc-ds1216.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-ds1286.c
|
rtc: ds1286: move header to linux/rtc
|
2016-07-08 16:23:11 +02:00 |
|
rtc-ds1302.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-ds1305.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-ds1307.c
|
rtc: ds1307: add Intersil ISL12057 support
|
2016-08-31 18:21:34 +02:00 |
|
rtc-ds1343.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-ds1347.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-ds1374.c
|
rtc: ds1374: Remove unused variable
|
2015-09-05 19:37:22 +02:00 |
|
rtc-ds1390.c
|
RTC for 4.4
|
2015-11-10 10:01:21 -08:00 |
|
rtc-ds1511.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-ds1553.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-ds1672.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-ds1685.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-ds1742.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-ds2404.c
|
rtc: ds2404: move rtc-ds2404.h to platform_data
|
2016-06-27 10:48:28 +02:00 |
|
rtc-ds3232.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-efi-platform.c
|
|
|
|
rtc-efi.c
|
rtc: efi: Fail probing if RTC reads don't work
|
2016-06-06 17:07:33 +02:00 |
|
rtc-em3027.c
|
|
|
|
rtc-ep93xx.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-fm3130.c
|
|
|
|
rtc-gemini.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-generic.c
|
rtc: generic: remove get_rtc_time/set_rtc_time wrappers
|
2016-06-04 00:23:35 +02:00 |
|
rtc-hid-sensor-time.c
|
|
|
|
rtc-hym8563.c
|
rtc: hym8563: in .read_alarm set .tm_sec to 0 to signal minute accuracy
|
2016-07-19 18:18:06 +02:00 |
|
rtc-imxdi.c
|
rtc: imxdi: fix spelling mistake in warning message
|
2016-01-11 20:19:58 +01:00 |
|
rtc-isl1208.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-isl12022.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-jz4740.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-lib.c
|
|
|
|
rtc-lp8788.c
|
|
|
|
rtc-lpc24xx.c
|
|
|
|
rtc-lpc32xx.c
|
rtc: lpc32xx: remove irq > NR_IRQS check from probe()
|
2016-01-11 20:19:59 +01:00 |
|
rtc-ls1x.c
|
|
|
|
rtc-m41t80.c
|
rtc: m41t80: add suspend handlers for alarm IRQ
|
2016-07-21 20:06:57 +02:00 |
|
rtc-m41t93.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-m41t94.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-m48t35.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-m48t59.c
|
rtc: m48t59: clean up m48t59_nvram_read()/m48t59_nvram_write()
|
2015-09-05 13:19:10 +02:00 |
|
rtc-m48t86.c
|
rtc: m48t86: move m48t86.h to platform_data
|
2016-06-27 18:15:25 +02:00 |
|
rtc-max6900.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-max6902.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-max6916.c
|
rtc: add support for Maxim max6916
|
2016-06-04 16:05:59 +02:00 |
|
rtc-max8907.c
|
|
|
|
rtc-max8925.c
|
|
|
|
rtc-max8997.c
|
rtc: Fix module autoload for rtc-{ab8500,max8997,s5m} drivers
|
2015-09-05 19:37:21 +02:00 |
|
rtc-max8998.c
|
|
|
|
rtc-max77686.c
|
rtc: max77686: Use REGMAP_IRQ_REG for regmap-rtc-irqs initialisation
|
2016-03-14 17:08:27 +01:00 |
|
rtc-mc13xxx.c
|
rtc: mc13xxx: remove UIE signaling
|
2016-05-20 12:33:51 +02:00 |
|
rtc-mc146818-lib.c
|
rtc: move mc146818 helper functions out-of-line
|
2016-06-26 01:20:08 +02:00 |
|
rtc-mcp795.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-moxart.c
|
rtc: Fix module autoload for OF platform drivers
|
2015-09-05 19:37:22 +02:00 |
|
rtc-mpc5121.c
|
rtc: Fix module autoload for OF platform drivers
|
2015-09-05 19:37:22 +02:00 |
|
rtc-mrst.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-msm6242.c
|
|
|
|
rtc-mt6397.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-mv.c
|
rtc: Fix module autoload for OF platform drivers
|
2015-09-05 19:37:22 +02:00 |
|
rtc-mxc.c
|
rtc: mxc: remove UIE signaling
|
2016-05-20 12:33:51 +02:00 |
|
rtc-nuc900.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-omap.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-opal.c
|
powerpc/opal: Add inline function to get rc from an ASYNC_COMP opal_msg
|
2016-06-29 17:33:18 +10:00 |
|
rtc-palmas.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-pcap.c
|
|
|
|
rtc-pcf2123.c
|
rtc: pcf2123: Add missing error code assignment before test
|
2016-08-31 18:21:34 +02:00 |
|
rtc-pcf2127.c
|
rtc: pcf2127: add pcf2129 device id
|
2016-03-14 17:08:41 +01:00 |
|
rtc-pcf8523.c
|
rtc: pcf8523: properly handle oscillator stop bit
|
2016-03-14 17:08:30 +01:00 |
|
rtc-pcf8563.c
|
rtc: explicitly set tm_sec = 0 for drivers with minute accurancy
|
2016-07-19 18:15:21 +02:00 |
|
rtc-pcf8583.c
|
|
|
|
rtc-pcf50633.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-pcf85063.c
|
rtc: pcf85063: Add support for the PCF85063A device
|
2016-07-19 19:11:54 +02:00 |
|
rtc-pic32.c
|
rtc: pic32: Delete owner assignment
|
2016-08-31 18:21:35 +02:00 |
|
rtc-pl030.c
|
|
|
|
rtc-pl031.c
|
rtc: pl031: remove misuse of IRQF_NO_SUSPEND flag
|
2015-11-08 14:12:24 +01:00 |
|
rtc-pm8xxx.c
|
|
|
|
rtc-proc.c
|
rtc: fix module reference count in rtc-proc
|
2016-01-11 20:19:55 +01:00 |
|
rtc-ps3.c
|
|
|
|
rtc-puv3.c
|
|
|
|
rtc-pxa.c
|
rtc: sa1100/pxa: convert to run-time register mapping
|
2015-09-05 19:37:16 +02:00 |
|
rtc-r9701.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-rc5t583.c
|
rtc: explicitly set tm_sec = 0 for drivers with minute accurancy
|
2016-07-19 18:15:21 +02:00 |
|
rtc-rk808.c
|
rtc: rk808: Compensate for Rockchip calendar deviation on November 31st
|
2015-12-20 13:39:00 +01:00 |
|
rtc-rp5c01.c
|
rtc: rp5c01: clean up rp5c01_nvram_read()/rp5c01_nvram_write()
|
2015-09-05 13:19:10 +02:00 |
|
rtc-rs5c313.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-rs5c348.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-rs5c372.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-rv3029c2.c
|
rtc: rv3029: hide unused i2c device table
|
2016-05-21 17:07:16 +02:00 |
|
rtc-rv8803.c
|
rtc: rv8803: Clear V1F when setting the time
|
2016-07-28 09:59:43 +02:00 |
|
rtc-rx4581.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
rtc-rx6110.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-rx8010.c
|
rtc: simplify implementations of read_alarm
|
2016-07-09 10:24:45 +02:00 |
|
rtc-rx8025.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-rx8581.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-s3c.c
|
rtc: s3c: Add s3c_rtc_{enable/disable}_clk in s3c_rtc_setfreq()
|
2016-07-19 17:48:06 +02:00 |
|
rtc-s3c.h
|
|
|
|
rtc-s5m.c
|
rtc: s5m: De-inline large functions to save space
|
2016-03-14 17:08:18 +01:00 |
|
rtc-s35390a.c
|
rtc: s35390a: improve two comments in .set_alarm
|
2016-07-11 23:22:35 +02:00 |
|
rtc-sa1100.c
|
rtc: sa1100/pxa: convert to run-time register mapping
|
2015-09-05 19:37:16 +02:00 |
|
rtc-sa1100.h
|
rtc: sa1100/pxa: convert to run-time register mapping
|
2015-09-05 19:37:16 +02:00 |
|
rtc-sh.c
|
rtc: sh: don't validate alarm time provided to .set_alarm
|
2016-07-11 23:22:33 +02:00 |
|
rtc-sirfsoc.c
|
|
|
|
rtc-snvs.c
|
rtc: snvs: return error in case enable_irq_wake fails
|
2016-05-20 12:33:51 +02:00 |
|
rtc-spear.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-st-lpc.c
|
|
|
|
rtc-starfire.c
|
|
|
|
rtc-stk17ta8.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-stmp3xxx.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-sun4v.c
|
|
|
|
rtc-sun6i.c
|
|
|
|
rtc-sunxi.c
|
rtc: sunxi: use of_device_get_match_data
|
2016-01-11 20:19:57 +01:00 |
|
rtc-sysfs.c
|
rtc: sysfs: fix a cast removing the const attribute
|
2016-08-31 18:21:35 +02:00 |
|
rtc-tegra.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-test.c
|
|
|
|
rtc-tile.c
|
|
|
|
rtc-tps6586x.c
|
rtc: tps6586x: rename so module can be autoloaded
|
2016-05-21 17:07:17 +02:00 |
|
rtc-tps65910.c
|
rtc: tps65910: Drop IRQF_EARLY_RESUME flag
|
2016-03-14 17:08:23 +01:00 |
|
rtc-tps80031.c
|
rtc: tps80031: Drop IRQF_EARLY_RESUME flag
|
2016-03-14 17:08:24 +01:00 |
|
rtc-twl.c
|
rtc: constify rtc_class_ops structures
|
2016-09-02 01:24:06 +02:00 |
|
rtc-tx4939.c
|
rtc: tx4939: clean up tx4939_rtc_nvram_read()/tx4939_rtc_nvram_write()
|
2015-09-05 13:19:10 +02:00 |
|
rtc-v3020.c
|
rtc: v3020: move rtc-v3020.h to platform_data
|
2016-07-09 10:24:21 +02:00 |
|
rtc-vr41xx.c
|
rtc: vr41xx: Wire up alarm_irq_enable
|
2016-03-14 17:08:25 +01:00 |
|
rtc-vt8500.c
|
rtc: Fix module autoload for OF platform drivers
|
2015-09-05 19:37:22 +02:00 |
|
rtc-wm831x.c
|
|
|
|
rtc-wm8350.c
|
|
|
|
rtc-x1205.c
|
rtc: remove useless DRV_VERSION
|
2016-05-20 12:33:51 +02:00 |
|
rtc-xgene.c
|
|
|
|
rtc-zynqmp.c
|
rtc: zynqmp: Update seconds time programming logic
|
2016-05-20 12:33:51 +02:00 |
|
systohc.c
|
|
|