lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20070507203420.GG3926@linux-os.sc.intel.com>
Date:	Mon, 7 May 2007 13:34:20 -0700
From:	Venki Pallipadi <venkatesh.pallipadi@...el.com>
To:	linux-kernel <linux-kernel@...r.kernel.org>
Cc:	Andrew Morton <akpm@...l.org>,
	Thomas Gleixner <tglx@...utronix.de>, Andi Kleen <ak@...e.de>,
	Ingo Molnar <mingo@...e.hu>, Chris Wright <chrisw@...s-sol.org>
Subject: [PATCH 7/8] HPET boot option for the new standard interrupt delivery mode


Add a new boot option related to HPET. Current mode of HPET functioning:

(1) If HPET is listed in BIOS:
default: HPET gets detected at boot time and gets enabled in 
"legacy replacement" mode.
"hpet=standard" boot option: HPET does not get used during early boot and
PIT will be used in early boot. HPET gets enabled in "standard" mode during
late boot stages.
"hpet=disable" boot option: HPET is disabled and not used.

(2) If HPET is not listed in BIOS and force detected with PCI quirks:
default: HPET does not get used during early boot and
PIT will be used in early boot. HPET gets enabled in "standard" mode during
late boot stages.
"hpet=disable" boot option: HPET is disabled and not used.


We can change the default behavior of (1) to match (2) after this patch gets
some testing.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@...el.com>

Index: linux-2.6.21/include/asm-i386/hpet.h
===================================================================
--- linux-2.6.21.orig/include/asm-i386/hpet.h	2007-04-27 15:27:12.000000000 -0700
+++ linux-2.6.21/include/asm-i386/hpet.h	2007-04-27 15:30:22.000000000 -0700
@@ -112,7 +112,7 @@
 extern int is_hpet_capable(void);
 extern int hpet_readl(unsigned long a);
 #else
-extern int hpet_enable(void);
+extern int hpet_enable(int early_call);
 #endif
 
 #ifdef CONFIG_HPET_EMULATE_RTC
@@ -127,7 +127,7 @@
 
 #else
 
-static inline int hpet_enable(void) { return 0; }
+static inline int hpet_enable(int early_call) { return 0; }
 
 #endif /* CONFIG_HPET_TIMER */
 #endif /* _I386_HPET_H */
Index: linux-2.6.21/arch/i386/kernel/time.c
===================================================================
--- linux-2.6.21.orig/arch/i386/kernel/time.c	2007-04-27 15:27:12.000000000 -0700
+++ linux-2.6.21/arch/i386/kernel/time.c	2007-04-27 15:30:22.000000000 -0700
@@ -264,7 +264,7 @@
 /* Duplicate of time_init() below, with hpet_enable part added */
 void __init hpet_time_init(void)
 {
-	if (!hpet_enable())
+	if (!hpet_enable(1))
 		setup_pit_timer();
 	time_init_hook();
 }
Index: linux-2.6.21/arch/i386/kernel/hpet.c
===================================================================
--- linux-2.6.21.orig/arch/i386/kernel/hpet.c	2007-04-27 15:30:15.000000000 -0700
+++ linux-2.6.21/arch/i386/kernel/hpet.c	2007-04-27 15:30:22.000000000 -0700
@@ -51,6 +51,8 @@
 	if (str) {
 		if (!strncmp("disable", str, 7))
 			boot_hpet_disable = 1;
+		else if (!strncmp("standard", str, 9))
+			hpet_preferred_int_mode = HPET_INT_STD;
 	}
 	return 1;
 }
@@ -723,13 +725,16 @@
 /*
  * Try to setup the HPET timer
  */
-int __init hpet_enable(void)
+int __init hpet_enable(int early_call)
 {
 	unsigned long id;
 
 	if (hpet_virt_address)
 		return 0;
 
+	if (early_call && hpet_preferred_int_mode == HPET_INT_STD)
+		return 0;
+
 	if (!is_hpet_capable())
 		return 0;
 
@@ -784,13 +789,15 @@
 	if (boot_hpet_disable)
 		return -ENODEV;
 
-	if (!hpet_address) {
-		if (!force_hpet_address)
-			return -ENODEV;
+	if (!hpet_virt_address) {
+		if (!hpet_address) {
+			if (!force_hpet_address)
+				return -ENODEV;
 
-		hpet_address = force_hpet_address;
+			hpet_address = force_hpet_address;
+		}
 		hpet_preferred_int_mode = HPET_INT_STD;
-		ret = hpet_enable();
+		ret = hpet_enable(0);
 		if (ret < 0 || !hpet_virt_address)
 			return -ENODEV;
 	}
Index: linux-2.6.21/Documentation/kernel-parameters.txt
===================================================================
--- linux-2.6.21.orig/Documentation/kernel-parameters.txt	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.21/Documentation/kernel-parameters.txt	2007-04-27 15:31:31.000000000 -0700
@@ -384,8 +384,8 @@
 			over the 8254 in addition to over the IO-APIC. The
 			kernel tries to set a sensible default.
 
-	hpet=		[IA-32,HPET] option to disable HPET and use PIT.
-			Format: disable
+	hpet=		[IA-32,HPET] option to choose HPET modes.
+			Format: {disable | standard}
 
 	cm206=		[HW,CD]
 			Format: { auto | [<io>,][<irq>] }
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ