From: Len Brown <len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Jos Delbar <jos.delbar-Cru1EgDzd7c@public.gmane.org>,
Andi Kleen <ak-l3A5Bk7waGM@public.gmane.org>,
Robert Moore
<robert.moore-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
James P Ketrenos
<james.p.ketrenos-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: ACPI Developers
<acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Subject: Re: Linux ACPI processor driver patch: user-definable power state limit
Date: 05 Nov 2004 17:58:19 -0500 [thread overview]
Message-ID: <1099695499.13837.1618.camel@d845pe> (raw)
In-Reply-To: <1099683907.13837.1353.camel@d845pe>
Please try out this acpi_cstate_limit patch.
This applies to 2.6.8.1, but in the likely event
that may mailer wraps this patch or you need 2.6.9, go here:
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/test/cstate_limit/
thanks,
-Len
-----------
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/11/05 17:39:51-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
# [ACPI] Allow limiting idle C-States.
#
# Useful to workaround C3 ipw2100 packet loss
# and resonating noises heard on some laptops.
#
# For static processor driver, boot cmdline:
# processor.acpi_cstate_limit=2
#
# For processor module, /etc/modprobe.conf:
# options processor acpi_cstate_limit=2
#
# For manual processor module load:
# # modprobe processor acpi_cstate_limit=2
#
# From kernel or kernel module:
# #include <linux/acpi.h>
# acpi_set_cstate_limit(2);
#
# Inspired by patches from Jos Delbar and Andi Kleen
# Signed-off-by: Len Brown <len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
#
# include/linux/acpi.h
# 2004/11/05 17:39:45-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org +26 -0
# define API to set and get acpi_cstate_limit
#
# drivers/acpi/processor.c
# 2004/11/05 17:39:45-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org +10 -1
# set and obey acpi_cstate_limit
#
# drivers/acpi/osl.c
# 2004/11/05 17:39:45-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org +9 -0
# define acpi_cstate_limit
#
diff -Nru a/drivers/acpi/osl.c b/drivers/acpi/osl.c
--- a/drivers/acpi/osl.c 2004-11-05 17:40:07 -05:00
+++ b/drivers/acpi/osl.c 2004-11-05 17:40:07 -05:00
@@ -1078,3 +1078,12 @@
__setup("acpi_leave_gpes_disabled", acpi_leave_gpes_disabled_setup);
+/*
+ * acpi_cstate_limit is defined in the base kernel so modules can
+ * change it w/o depending on the state of the processor module.
+ */
+unsigned int acpi_cstate_limit = ACPI_C_STATES_MAX;
+
+
+EXPORT_SYMBOL(acpi_cstate_limit);
+
diff -Nru a/drivers/acpi/processor.c b/drivers/acpi/processor.c
--- a/drivers/acpi/processor.c 2004-11-05 17:40:07 -05:00
+++ b/drivers/acpi/processor.c 2004-11-05 17:40:07 -05:00
@@ -459,8 +459,9 @@
* Track the number of longs (time asleep is greater than threshold)
* and promote when the count threshold is reached. Note that bus
* mastering activity may prevent promotions.
+ * Do not promote above acpi_cstate_limit.
*/
- if (cx->promotion.state) {
+ if (cx->promotion.state && (cx->promotion.state <= acpi_cstate_limit))
{
if (sleep_ticks > cx->promotion.threshold.ticks) {
cx->promotion.count++;
cx->demotion.count = 0;
@@ -498,6 +499,13 @@
end:
/*
+ * Demote if current state exceeds acpi_cstate_limit
+ */
+ if (pr->power.state > acpi_cstate_limit) {
+ next_state = acpi_cstate_limit;
+ }
+
+ /*
* New Cx State?
* -------------
* If we're going to start using a new Cx state we must clean up
@@ -2441,5 +2449,6 @@
module_init(acpi_processor_init);
module_exit(acpi_processor_exit);
+module_param_named(acpi_cstate_limit, acpi_cstate_limit, uint, 0);
EXPORT_SYMBOL(acpi_processor_set_thermal_limit);
diff -Nru a/include/linux/acpi.h b/include/linux/acpi.h
--- a/include/linux/acpi.h 2004-11-05 17:40:07 -05:00
+++ b/include/linux/acpi.h 2004-11-05 17:40:07 -05:00
@@ -471,4 +471,30 @@
#endif /*!CONFIG_ACPI_INTERPRETER*/
+#define ACPI_CSTATE_LIMIT_DEFINED /* for driver builds */
+#ifdef CONFIG_ACPI
+
+/*
+ * Set highest legal C-state
+ * 0: C0 okay, but not C1
+ * 1: C1 okay, but not C2
+ * 2: C2 okay, but not C3 etc.
+ */
+
+extern unsigned int acpi_cstate_limit;
+
+static inline unsigned int acpi_get_cstate_limit(void)
+{
+ return acpi_cstate_limit;
+}
+static inline void acpi_set_cstate_limit(unsigned int new_limit)
+{
+ acpi_cstate_limit = new_limit;
+ return;
+}
+#else
+static inline unsigned int acpi_get_cstate_limit(void) { return 0; }
+static inline void acpi_set_cstate_limit(unsigned int new_limit) {
return; }
+#endif
+
#endif /*_LINUX_ACPI_H*/
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
next prev parent reply other threads:[~2004-11-05 22:58 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-10 16:56 Linux ACPI processor driver patch: user-definable power state limit Brown, Len
[not found] ` <F7DC2337C7631D4386A2DF6E8FB22B3001A193B6-N2PTB0HCzHKkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2004-10-11 21:35 ` Jos Delbar
[not found] ` <200410112335.19159.jos.delbar-Cru1EgDzd7c@public.gmane.org>
2004-10-19 17:19 ` Len Brown
2004-11-05 19:45 ` Len Brown
2004-11-05 22:54 ` Dominik Brodowski
[not found] ` <20041105225438.GA8262-X3ehHDuj6sIIGcDfoQAp7BvVK+yQ3ZXh@public.gmane.org>
2004-11-05 23:11 ` Len Brown
2004-11-05 23:41 ` Dominik Brodowski
[not found] ` <20041105234120.GA20761-X3ehHDuj6sIIGcDfoQAp7BvVK+yQ3ZXh@public.gmane.org>
2004-11-06 0:25 ` Len Brown
2004-11-06 0:29 ` Dominik Brodowski
[not found] ` <20041106002935.GA30467-X3ehHDuj6sIIGcDfoQAp7BvVK+yQ3ZXh@public.gmane.org>
2004-11-06 0:44 ` Len Brown
2004-11-06 13:15 ` Jos Delbar
2004-11-05 23:54 ` Dominik Brodowski
[not found] ` <20041105235403.GA21880-X3ehHDuj6sIIGcDfoQAp7BvVK+yQ3ZXh@public.gmane.org>
2004-11-06 0:33 ` Len Brown
2004-11-05 23:39 ` Jos Delbar
[not found] ` <200411060039.28067.jos.delbar-Cru1EgDzd7c@public.gmane.org>
2004-11-05 23:55 ` Dominik Brodowski
2004-11-05 22:58 ` Len Brown [this message]
2004-11-05 23:21 ` Jos Delbar
[not found] ` <200411060021.49794.jos.delbar-Cru1EgDzd7c@public.gmane.org>
2004-11-06 1:01 ` Len Brown
2004-11-06 2:59 ` Len Brown
[not found] <200408071959.10529.jos.delbar@ugent.be>
[not found] ` <200408071959.10529.jos.delbar-Cru1EgDzd7c@public.gmane.org>
2004-10-09 5:52 ` Len Brown
2004-10-10 14:36 ` Jos Delbar
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=1099695499.13837.1618.camel@d845pe \
--to=len.brown-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=ak-l3A5Bk7waGM@public.gmane.org \
--cc=james.p.ketrenos-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=jos.delbar-Cru1EgDzd7c@public.gmane.org \
--cc=robert.moore-ral2JQCrhuEAvxtiuMwx3w@public.gmane.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.