All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Pilcher <i.pilcher@comcast.net>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] sysctl equivalent of "idle=poll"
Date: Wed, 07 Jan 2004 00:39:09 -0600	[thread overview]
Message-ID: <3FFBA98D.1080901@comcast.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 788 bytes --]

The previous version of this patch didn't get any response, so on the
"no news is good news" theory ... Any comments before I send this off to
Marcelo?

This adds a new x86-only sysctl, /proc/sys/kernel/idle_poll, which does
basically the same thing as the "idle=poll" boot parameter (except that
it can be turned on and off).

This patch does not affect the ability of the APM and/or ACPI subsystems
to override the default idle function.  It adds one symbol,
pm_idle_poll, to the global namespace.

This patch applies cleanly to 2.4.23, 2.4.24, and 2.4.25-pre4.

-- 
========================================================================
Ian Pilcher                                        i.pilcher@comcast.net
========================================================================

[-- Attachment #2: idle_poll.patch --]
[-- Type: text/plain, Size: 4078 bytes --]

diff -ur linux-2.4.25-pre4/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
--- linux-2.4.25-pre4/arch/i386/kernel/process.c	2004-01-07 00:01:39.000000000 -0600
+++ linux/arch/i386/kernel/process.c	2004-01-07 00:04:22.000000000 -0600
@@ -62,6 +62,12 @@
 void (*pm_idle)(void);
 
 /*
+ * Use polling instead of HLT instructions?  (Has no effect if pm_idle is over-
+ * ridden by APM, ACPI, etc.)
+ */
+int pm_idle_poll = 0;
+
+/*
  * Power off function, if any
  */
 void (*pm_power_off)(void);
@@ -77,10 +83,9 @@
 }
 
 /*
- * We use this if we don't have any better
- * idle routine..
+ * Idle using HLT instructions; saves power & keeps cpu's cool.
  */
-void default_idle(void)
+static void hlt_idle(void)
 {
 	if (current_cpu_data.hlt_works_ok && !hlt_counter) {
 		__cli();
@@ -118,6 +123,18 @@
 }
 
 /*
+ * Default idle routine; can be overridden by APM, ACPI, etc.  (See cpu_idle &
+ * pm_idle.)
+ */
+void default_idle(void)
+{
+	if (pm_idle_poll)
+		poll_idle();
+	else
+		hlt_idle();
+}
+
+/*
  * The idle thread. There's no useful work to be
  * done, so just try to conserve power and have a
  * low exit latency (ie sit in a loop waiting for
@@ -145,7 +162,7 @@
 {
 	if (!strncmp(str, "poll", 4)) {
 		printk("using polling idle threads.\n");
-		pm_idle = poll_idle;
+		pm_idle_poll = 1;
 	}
 
 	return 1;
diff -ur linux-2.4.25-pre4/Documentation/sysctl/kernel.txt linux/Documentation/sysctl/kernel.txt
--- linux-2.4.25-pre4/Documentation/sysctl/kernel.txt	2001-09-30 14:26:08.000000000 -0500
+++ linux/Documentation/sysctl/kernel.txt	2004-01-07 00:15:56.000000000 -0600
@@ -22,6 +22,7 @@
 - domainname
 - hostname
 - htab-reclaim                [ PPC only ]
+- idle_poll                   [ x86 only ]
 - java-appletviewer           [ binfmt_java, obsolete ]
 - java-interpreter            [ binfmt_java, obsolete ]
 - l2cr                        [ PPC only ]
@@ -105,6 +106,20 @@
  
 ==============================================================
 
+idle_poll: (x86 only)
+
+Setting this to a non-zero value causes the idle loop in the
+kernel to poll on the need reschedule flag instead of waiting
+for an interrupt to happen.  This can result in an improvement
+in performance on SMP systems (albeit at the cost of an increase
+in power consumption).
+
+Note that the power management subsystem (APM or ACPI) can
+override the default idle function, in which case this setting
+will have no effect.
+
+==============================================================
+
 l2cr: (PPC only)
 
 This flag controls the L2 cache of G3 processor boards. If
diff -ur linux-2.4.25-pre4/include/linux/pm.h linux/include/linux/pm.h
--- linux-2.4.25-pre4/include/linux/pm.h	2002-08-02 19:39:45.000000000 -0500
+++ linux/include/linux/pm.h	2004-01-07 00:04:22.000000000 -0600
@@ -185,6 +185,10 @@
 
 #endif /* CONFIG_PM */
 
+#ifdef CONFIG_X86
+extern int pm_idle_poll;
+#endif
+
 extern void (*pm_idle)(void);
 extern void (*pm_power_off)(void);
 
diff -ur linux-2.4.25-pre4/include/linux/sysctl.h linux/include/linux/sysctl.h
--- linux-2.4.25-pre4/include/linux/sysctl.h	2004-01-07 00:01:56.000000000 -0600
+++ linux/include/linux/sysctl.h	2004-01-07 00:04:22.000000000 -0600
@@ -128,6 +128,7 @@
 	KERN_PPC_L3CR=57,       /* l3cr register on PPC */
 	KERN_EXCEPTION_TRACE=58, /* boolean: exception trace */
  	KERN_CORE_SETUID=59,	/* int: set to allow core dumps of setuid apps */
+	KERN_IDLE_POLL=60,  	/* boolean: use polling for idle threads? */
 };
 
 
diff -ur linux-2.4.25-pre4/kernel/sysctl.c linux/kernel/sysctl.c
--- linux-2.4.25-pre4/kernel/sysctl.c	2003-11-28 12:26:21.000000000 -0600
+++ linux/kernel/sysctl.c	2004-01-07 00:04:22.000000000 -0600
@@ -31,6 +31,7 @@
 #include <linux/sysrq.h>
 #include <linux/highuid.h>
 #include <linux/swap.h>
+#include <linux/pm.h>
 
 #include <asm/uaccess.h>
 
@@ -275,6 +276,10 @@
 	{KERN_EXCEPTION_TRACE,"exception-trace",
 	 &exception_trace,sizeof(int),0644,NULL,&proc_dointvec},
 #endif	
+#ifdef CONFIG_X86
+	{KERN_IDLE_POLL,"idle_poll",
+	&pm_idle_poll,sizeof(int),0644,NULL,&proc_dointvec},
+#endif
 	{0}
 };
 

             reply	other threads:[~2004-01-07  6:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-07  6:39 Ian Pilcher [this message]
2004-01-09 21:35 ` [PATCH] sysctl equivalent of "idle=poll" Randy.Dunlap
2004-01-09 22:06   ` Ian Pilcher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3FFBA98D.1080901@comcast.net \
    --to=i.pilcher@comcast.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.