From: Thomas Tuttle <thinkinginbinary@gmail.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Richard Purdie <rpurdie@rpsys.net>
Subject: Re: PATCH: Create new LED trigger for CPU activity (ledtrig-cpu) (UPDATED)
Date: Thu, 6 Jul 2006 09:54:24 -0400 [thread overview]
Message-ID: <20060706135424.GA9039@phoenix> (raw)
In-Reply-To: <20060705213901.4c903e4b.akpm@osdl.org>
[-- Attachment #1.1: Type: text/plain, Size: 1184 bytes --]
On July 06 at 00:39 EDT, Andrew Morton hastily scribbled:
> On Wed, 5 Jul 2006 22:48:17 -0400
> "Thomas Tuttle" <thinkinginbinary@gmail.com> wrote:
Omigod, Andrew Morton replied to my email. Cool. Linux rocks.
> > Here is a new version of the patch, incorporating code style tips from
> > Randy Dunlap <rdunlap@xenotime.net>, and based on 2.6.17-git25, rather
> > than 2.6.17.1.
> >
> > I noticed that there's a Heartbeat LED trigger in the git version. I
> > hope this isn't too similar.
> >
>
> <snip>
>
> waaaaaaaaaaay too many config options. Make up your mind, man ;)
Okay, this new patch includes user and system, excludes iowait, and
makes nice configurable by a boolean module parameter called
include_nice, with the default being to exclude nice time.
> > +cputime64_t last_cputime;
> static.
Done.
> > +static void __exit ledtrig_cpu_exit(void)
> > +{
> > + del_timer(&ledtrig_cpu_timer);
> del_timer_sync().
Done.
I also made the trigger track the last state of the LED, and avoid
sending a trigger event unless the state has actually changed. And I
made it turn off the LED when the trigger is unloaded.
--Thomas Tuttle
[-- Attachment #1.2: ledtrig-cpu.patch --]
[-- Type: text/plain, Size: 4134 bytes --]
diff -udrN linux-2.6.17-git25/drivers/leds/Kconfig linux-2.6.17-git25-mine/drivers/leds/Kconfig
--- linux-2.6.17-git25/drivers/leds/Kconfig 2006-07-05 22:11:45.000000000 -0400
+++ linux-2.6.17-git25-mine/drivers/leds/Kconfig 2006-07-06 09:23:18.000000000 -0400
@@ -93,6 +93,13 @@
This allows LEDs to be controlled by IDE disk activity.
If unsure, say Y.
+config LEDS_TRIGGER_CPU
+ tristate "LED CPU Trigger"
+ depends LEDS_TRIGGERS
+ help
+ This allows LEDs to be controlled by CPU activity.
+ If unsure, say Y.
+
config LEDS_TRIGGER_HEARTBEAT
tristate "LED Heartbeat Trigger"
depends LEDS_TRIGGERS
diff -udrN linux-2.6.17-git25/drivers/leds/ledtrig-cpu.c linux-2.6.17-git25-mine/drivers/leds/ledtrig-cpu.c
--- linux-2.6.17-git25/drivers/leds/ledtrig-cpu.c 1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.17-git25-mine/drivers/leds/ledtrig-cpu.c 2006-07-06 09:48:43.000000000 -0400
@@ -0,0 +1,89 @@
+/*
+ * LED CPU Activity Trigger
+ *
+ * Copyright 2006 Thomas Tuttle
+ *
+ * Author: Thomas Tuttle <thinkinginbinary@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/timer.h>
+#include <linux/leds.h>
+#include <linux/kernel_stat.h>
+#include <asm/cputime.h>
+
+MODULE_AUTHOR("Thomas Tuttle <thinkinginbinary@gmail.com>");
+MODULE_DESCRIPTION("LED CPU Activity Trigger");
+MODULE_PARM_DESC(include_nice, "Turn LED on for nice CPU time");
+MODULE_LICENSE("GPL");
+
+static int include_nice = 0;
+
+module_param(include_nice, bool, 0);
+
+#define UPDATE_INTERVAL (5) /* delay between updates, in ms */
+
+static void ledtrig_cpu_timerfunc(unsigned long data);
+
+DEFINE_LED_TRIGGER(ledtrig_cpu);
+static DEFINE_TIMER(ledtrig_cpu_timer, ledtrig_cpu_timerfunc, 0, 0);
+
+static cputime64_t cpu_usage(void)
+{
+ int i;
+ cputime64_t time = cputime64_zero;
+
+ for_each_possible_cpu(i) {
+ time = cputime64_add(time, kstat_cpu(i).cpustat.user);
+ if (include_nice)
+ time = cputime64_add(time, kstat_cpu(i).cpustat.nice);
+ time = cputime64_add(time, kstat_cpu(i).cpustat.system);
+ }
+
+ return time;
+}
+
+static enum led_brightness last_led_state;
+static cputime64_t last_cputime;
+
+static void ledtrig_cpu_timerfunc(unsigned long data)
+{
+ cputime64_t this_cputime = cpu_usage();
+ /* XXX: This assumes that cputime64_t can be subtracted.
+ * Nobody has defined cputime64_sub, so I had to do this instead. */
+ cputime64_t used_cputime = this_cputime - last_cputime;
+ enum led_brightness led_state = (used_cputime > 0) ? LED_FULL : LED_OFF;
+ if (led_state != last_led_state)
+ led_trigger_event(ledtrig_cpu, led_state);
+ last_led_state = led_state;
+ last_cputime = cpu_usage();
+
+ mod_timer(&ledtrig_cpu_timer, jiffies + msecs_to_jiffies(UPDATE_INTERVAL));
+}
+
+static int __init ledtrig_cpu_init(void)
+{
+ led_trigger_register_simple("cpu", &ledtrig_cpu);
+ led_trigger_event(ledtrig_cpu, LED_OFF);
+ last_led_state = LED_OFF;
+ last_cputime = cpu_usage();
+ mod_timer(&ledtrig_cpu_timer, jiffies + msecs_to_jiffies(UPDATE_INTERVAL));
+ return 0;
+}
+
+static void __exit ledtrig_cpu_exit(void)
+{
+ del_timer_sync(&ledtrig_cpu_timer);
+ led_trigger_event(ledtrig_cpu, LED_OFF);
+ led_trigger_unregister_simple(ledtrig_cpu);
+}
+
+module_init(ledtrig_cpu_init);
+module_exit(ledtrig_cpu_exit);
diff -udrN linux-2.6.17-git25/drivers/leds/Makefile linux-2.6.17-git25-mine/drivers/leds/Makefile
--- linux-2.6.17-git25/drivers/leds/Makefile 2006-07-05 22:11:45.000000000 -0400
+++ linux-2.6.17-git25-mine/drivers/leds/Makefile 2006-07-05 22:40:52.000000000 -0400
@@ -16,4 +16,5 @@
# LED Triggers
obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
+obj-$(CONFIG_LEDS_TRIGGER_CPU) += ledtrig-cpu.o
obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
prev parent reply other threads:[~2006-07-06 13:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-06 2:48 PATCH: Create new LED trigger for CPU activity (ledtrig-cpu) (UPDATED) Thomas Tuttle
2006-07-06 3:01 ` Randy.Dunlap
2006-07-06 3:03 ` Thomas Tuttle
2006-07-06 3:13 ` Randy.Dunlap
2006-07-06 4:39 ` Andrew Morton
2006-07-06 13:54 ` Thomas Tuttle [this message]
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=20060706135424.GA9039@phoenix \
--to=thinkinginbinary@gmail.com \
--cc=akpm@osdl.org \
--cc=rpurdie@rpsys.net \
/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.