[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#647095: CPU hyperthreading turned on after soft power-cycle

On Tue, 2011-11-29 at 13:26 +0100, Clarinet wrote:
> > Using an older "known-good" kernel, could you build and run the test
> > case at the end of Documentation/rtc.txt a few times and see if it
> > triggers the same problem?
> >
> > I'm suspicious that the setting the alarm is whats tripping the BIOS
> > into enabling the HT bit. Because with older kernels, we used PIE mode
> > irqs which hwclock usually uses at boot, but with newer kernels, we
> > emulate PIE via AIE alarm mode. So if the BIOS was broken before, you
> > wouldn't have noticed unless you tried to use AIE irqs.
> >
> > If this doesn't work, I'll get some patches to both 2.6.27 and 2.6.28
> > kernels to debug the exact flow of how we're touching the hardware and
> > then we can further narrow it down.
> I ran the tests the following way:
> - boot - check /proc/cpuinfo - 12 processors
> - halt
> - boot - check /proc/cpuinfo - 12 processors
> - run rtctest
> - reboot
> - boot - check /proc/cpuinfo - 12 processors
> - halt
> - boot - check /proc/cpuinfo - 12 processors
> - run rtctest
> - halt
> - boot - check /proc/cpuinfo - 24 processors
> So the conclusion is that only if rtctest is run and the machine is 
> halted, it triggers the HT problem. Reboot seems to "neutralize" 
> whatever rtctest did.

Ok, this also confirms that the board had issues *before* any changes
were made to the RTC core. I'd push the board vendor to update the BIOS
to avoid this issue.

Even so, I'm curious as to what exactly trips it up. Maybe we can
provide a module option for the rtc-cmos driver to disable the alarm
functionality, so you can at least avoid the issue until the board
vendor fixes the problem (if ever).

Assuming its the alarm being set, could you try the following on a
current kernel and let me know if it still shows the problem? hwclock
might throw some odd messages with this test patch, but those can be


diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index 05beb6c..d9814aa 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -305,8 +305,8 @@ static void cmos_irq_enable(struct cmos_rtc *cmos, unsigned char mask)
 	cmos_checkintr(cmos, rtc_control);
 	rtc_control |= mask;
-	CMOS_WRITE(rtc_control, RTC_CONTROL);
-	hpet_set_rtc_irq_bit(mask);
+//	CMOS_WRITE(rtc_control, RTC_CONTROL);
+//	hpet_set_rtc_irq_bit(mask);
 	cmos_checkintr(cmos, rtc_control);

Reply to: