From 3613893d820a8d9659f50f19c45e0b9e41efdcbe Mon Sep 17 00:00:00 2001 From: malc Date: Sun, 27 Jul 2014 19:02:38 +0400 Subject: [PATCH] Erm... --- idlestat.c | 16 ++++++++++++++-- mod/Makefile | 6 ++++-- mod/itc-mod.c | 23 +++++++++++------------ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/idlestat.c b/idlestat.c index bf45482..474756b 100644 --- a/idlestat.c +++ b/idlestat.c @@ -59,10 +59,11 @@ int main (int argc, char **argv) curr = &idle[nprocs]; prev = idle; + setbuf (stdout, NULL); for (;;) { int i; - double s, e, d, *t; + double s, e, d, *t, a = 0.0, ai = 0.0; idlenow (fd, nprocs, prev); s = now (); @@ -74,7 +75,18 @@ int main (int argc, char **argv) for (i = 0; i < nprocs; ++i) { double di = curr[i] - prev[i]; - printf ("cpu%d - %.2f%%\n", i, 100.0 * (1.0 - di / d)); + /* printf ("\rcpu%d - %.2f", i, 100.0 * (1.0 - di / d)); */ + /* printf ("cpu%d - %6.2f\n", i, 100.0 * (1.0 - di / d)); */ + a += d; + ai += di; + printf ("%6.2f", 100.0 * (1.0 - di / d)); + if (i < nprocs) fputc (' ', stdout); + } + if (i > 0) { + printf ("%6.2f\n", 100.0 * (1.0 - ai / a)); + } + else { + fputc ('\n', stdout); } t = curr; diff --git a/mod/Makefile b/mod/Makefile index 25fd15e..bd65d9a 100644 --- a/mod/Makefile +++ b/mod/Makefile @@ -6,7 +6,7 @@ KVERSION ?= $(shell uname -r) KDIR ?= /lib/modules/$(KVERSION)/build OUTDIR ?= /lib/modules/$(KVERSION)/misc -MM := $(shell echo $(KVERSION) | cut -d. -f'1 2') +MM := $(shell echo $(KVERSION) | cut -d. -f1,2) ifeq ($(MM),2.4) KMOD_SUFFIX := .o @@ -15,7 +15,9 @@ else ifeq ($(MM),2.6) KMOD_SUFFIX := .ko else -$(error Only 2.4 and 2.6 kernel series are supported. You have "$(KVERSION)") +ifneq ($(MM),3.0) +#$(error Only 2.4, 2.6, 3.0 kernel series are supported. You have "$(MM)") +endif endif endif diff --git a/mod/itc-mod.c b/mod/itc-mod.c index 25e1cd8..63ccf3d 100644 --- a/mod/itc-mod.c +++ b/mod/itc-mod.c @@ -22,16 +22,19 @@ #include #include #include -#include - +#if LINUX_VERSION_CODE < KERNEL_VERSION (3, 0, 0) #include +#include +#endif #include #if defined CONFIG_6xx || defined CONFIG_PPC64 #include #define pm_idle ppc_md.power_save +#if LINUX_VERSION_CODE < KERNEL_VERSION (3, 0, 0) #define ACCOUNT_IRQ #endif +#endif #if !(defined CONFIG_X86 || defined CONFIG_6xx || defined CONFIG_PPC64) #error Support for this architecture is nto written yet @@ -59,21 +62,20 @@ #ifdef CONFIG_PREEMPT #define itc_enter_bkl() do { \ preempt_disable (); \ - lock_kernel (); \ } while (0) #define itc_leave_bkl() do { \ - unlock_kernel (); \ preempt_enable (); \ } while (0) #else -#define itc_enter_bkl lock_kernel -#define itc_leave_bkl unlock_kernel +#define itc_enter_bkl() for (;;) {smp_mb (); break;} +#define itc_leave_bkl() for (;;) {smp_mb (); break;} #ifdef ITC_PREEMPT_HACK #error Attempt to enable ITC_PREEMPT_HACK on non preemptible kernel #endif #endif MODULE_DESCRIPTION ("Idle time collector"); +MODULE_LICENSE ("public domain"); #ifdef CONFIG_X86 static void (*fidle_func) (void); @@ -87,7 +89,7 @@ MODULE_PARM_DESC (idle_func, "address of default idle function"); #endif #define DEVNAME "itc" -static spinlock_t lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK (lock); static void (*orig_pm_idle) (void); static unsigned int itc_major; @@ -142,7 +144,7 @@ dummy_wakeup (void *unused) { printk (KERN_DEBUG "waking up %d\n", smp_processor_id ()); /* needed? safe? */ - set_need_resched (); + /* set_need_resched (); */ } #endif @@ -305,7 +307,6 @@ static int itc_open (struct inode * inode, struct file * filp) { int ret = 0; - const struct file_operations *old_fops = filp->f_op; unsigned int minor = iminor (inode); if (itc_major) @@ -321,9 +322,7 @@ itc_open (struct inode * inode, struct file * filp) return -EALREADY; } - /* old_fops = filp->f_op; */ - filp->f_op = fops_get (&itc_fops); - fops_put (old_fops); + filp->f_op = &itc_fops; itc_enter_bkl (); if (pm_idle != itc_idle) -- 2.11.4.GIT