From: Konrad Kuchciak Date: Tue, 20 Aug 2019 11:22:42 +0000 (+0200) Subject: Adjust kernel module for RPi3 X-Git-Tag: submit/tizen/20190906.081624~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=45557699bd341cfc3f0af9588f66007ef1165dd0;p=platform%2Fcore%2Fsystem%2Fstability-monitor.git Adjust kernel module for RPi3 Change-Id: I1a14a25832514097b18f98e3dae4d6866e18ea24 --- diff --git a/kernel/Makefile b/kernel/Makefile index 2060cda..cc87354 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,4 +1,4 @@ -KERNELDIR = /boot/kernel_header/debug/linux/ +KERNELDIR = /boot/kernel/devel/kernel-devel-arm-rpi3/ PWD := $(shell pwd) LD = ld diff --git a/kernel/proc-tsm.c b/kernel/proc-tsm.c index 8f61d51..cd22d0c 100644 --- a/kernel/proc-tsm.c +++ b/kernel/proc-tsm.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #include #include @@ -45,19 +47,51 @@ static u64 time_now(void) return div64_ul(ktime_get_boot_ns(), NSEC_PER_USEC); } +static inline u64 cputime_to_usecs(const u64 cputime) +{ + // return cputime >> 12; + return div64_ul(cputime, NSEC_PER_USEC); +} + +static unsigned int count_open_files(struct files_struct *files) +{ + unsigned int open_files = 0; + int i; + struct fdtable *fdt; + + if (!files) + return 0; + + spin_lock(&files->file_lock); + fdt = files_fdtable(files); + + /* Find the last non zero cell in open fds array */ + for (i = fdt->max_fds / BITS_PER_LONG - 1; i >= 0; i--) { + if (fdt->open_fds[i]) + break; + } + + /* Count set bits */ + for (i = (i + 1) * BITS_PER_LONG - 1; i >= 0; i--) { + if(test_bit(i, fdt->open_fds)) + open_files++; + } + + spin_unlock(&files->file_lock); + return open_files; +} + static int stability_monitor_show(struct seq_file *m, void *v) { struct sysinfo info; struct task_struct *task, *t; struct pid *pid = NULL; pid_t ppid = 0; - u64 uptime; - cputime_t utime, stime; + u64 uptime, utime, stime, ut, st; unsigned long long vm_rss, total_ram; struct task_io_accounting task_ioac; unsigned int open_fds; - rcu_read_lock(); /* Uptime in us */ @@ -67,8 +101,8 @@ static int stability_monitor_show(struct seq_file *m, void *v) si_meminfo(&info); total_ram = PAGE_TO_KB(info.totalram); - seq_put_decimal_ull(m, 0, uptime); - seq_put_decimal_ull(m, ' ', total_ram); + seq_put_decimal_ull(m, "", uptime); + seq_put_decimal_ull(m, " ", total_ram); seq_printf(m, "\n"); for_each_process(task) { @@ -93,27 +127,28 @@ static int stability_monitor_show(struct seq_file *m, void *v) /* Memory */ vm_rss = get_mm_rss(task->mm); - /* Open FDs - this needs CONFIG_KDEBUGD_FD_DEBUG */ - open_fds = task->files ? files_fdtable(task->files)->cur_fdn : 0; - - /* CPU time */ - thread_group_cputime_adjusted(task, &utime, &stime); + /* Open FDs */ + open_fds = count_open_files(task->files); - /* IO */ + /* CPU time + IO accounting */ + task_cputime_adjusted(task, &utime, &stime); task_ioac = task->ioac; t = task; - while_each_thread(task, t) + while_each_thread(task, t) { + task_cputime_adjusted(t, &ut, &st); + utime += ut; + stime += st; task_io_accounting_add(&task_ioac, &t->ioac); - + } task_unlock(task); - seq_put_decimal_ll(m, 0, task->pid); - seq_put_decimal_ll(m, ' ', ppid); - seq_put_decimal_ull(m, ' ', cputime_to_usecs(utime + stime)); - seq_put_decimal_ull(m, ' ', PAGE_TO_KB(vm_rss)); // kB - seq_put_decimal_ll(m, ' ', open_fds); - seq_put_decimal_ull(m, ' ', task_ioac.read_bytes + task_ioac.write_bytes); + seq_put_decimal_ll(m, "", task->pid); + seq_put_decimal_ll(m, " ", ppid); + seq_put_decimal_ull(m, " ", cputime_to_usecs(utime + stime)); + seq_put_decimal_ull(m, " ", PAGE_TO_KB(vm_rss)); + seq_put_decimal_ll(m, " ", open_fds); + seq_put_decimal_ull(m, " ", task_ioac.read_bytes + task_ioac.write_bytes); seq_printf(m, "\n"); } diff --git a/packaging/stability-monitor.spec b/packaging/stability-monitor.spec index d7c1a55..6f4b5e1 100644 --- a/packaging/stability-monitor.spec +++ b/packaging/stability-monitor.spec @@ -10,7 +10,7 @@ BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(pkgmgr-info) -BuildRequires: linux-kantm-devel +BuildRequires: arm-rpi3-linux-kernel-devel %description This package provides stability monitoring daemon.