uid-task_struct Code after Proper Naming and indentation
From: sena
Date: Wed Jan 07 2004 - 01:09:15 EST
Hi Robin,
ps way of reading uid is good.
Though they are in 2 differant modes (kernel and user)
Will that be a problem?
Herewith I am sending to you the code after proper indentation.
In timer.c file I have included and then updated all the neccessary
functions else where accordingly.
unsigned long numof_root_tasks; //for root uid<500, I am getting this
uidArray[0] is for storing uid (assumed 100 for all <500)
unsigned long numof_uid500_tasks; //for 500
unsigned long numof_uid501_tasks; //for 501
unsigned long numof_uid502_tasks; //for 502
unsigned long numof_uid503_tasks; //for 503
unsigned long numof_uid504_tasks; // for 504
unsigned int uidArray[7];
static unsigned long
count_active_tasks(void)
{
struct task_struct *p;
unsigned long nr = 0;
int s = 0;
int i = 0;
int j = 0;
int k = 0;
int m = 0;
read_lock(&tasklist_lock);
for_each_task(p) {
if ((p->state == TASK_RUNNING ||
(p->state & TASK_UNINTERRUPTIBLE))) {
nr += FIXED_1; //nr total tasks
if (i == 0) {
uidArray[0] = 100;
if (p->uid < 500) {
numof_root_tasks += FIXED_1;
} else {
uidArray[1] = p->uid;
numof_uid500_tasks += FIXED_1;
k++;
}
k++;
} else {
for (j = 0; j < k; j++) {
if ((j == 0) && (p->uid < 500)
&& (s == 0)) {
numof_root_tasks +=
FIXED_1;
s = 1;
break;
} else if ((uidArray[j] == p->uid)
&& s == 0) {
if (j == 1) {
numof_uid500_tasks
+= FIXED_1;
}
if (j == 2) {
numof_uid501_tasks
+= FIXED_1;
}
if (j == 3) {
numof_uid502_tasks
+= FIXED_1;
}
if (j == 4) {
numof_uid503_tasks
+= FIXED_1;
}
if (j == 5) {
numof_uid504_tasks
+= FIXED_1;
}
s = 1;
break;
}
}
if (s == 0) {
if (k < 6) {
k++;
j = k - 1;
uidArray[j] = p->uid;
if (j == 1) {
numof_uid500_tasks
+= FIXED_1;
}
if (j == 2) {
numof_uid501_tasks
+= FIXED_1;
}
if (j == 3) {
numof_uid502_tasks
+= FIXED_1;
}
if (j == 4) {
numof_uid503_tasks
+= FIXED_1;
}
if (j == 5) {
numof_uid504_tasks
+= FIXED_1;
}
}
}
s = 0;
}
i++;
}
}
read_unlock(&tasklist_lock);
return nr;
}
unsigned long avenrun[6];
unsigned long avenrunT;
static inline void
calc_load(unsigned long ticks)
{
unsigned long active_tasks; /*fixed-point */
static int count = LOAD_FREQ;
count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrunT, EXP_5, active_tasks);
CALC_LOAD(avenrun[0], EXP_5, numof_root_tasks);
CALC_LOAD(avenrun[1], EXP_5, numof_uid500_tasks);
CALC_LOAD(avenrun[2], EXP_5, numof_uid501_tasks);
CALC_LOAD(avenrun[3], EXP_5, numof_uid502_tasks);
CALC_LOAD(avenrun[4], EXP_5, numof_uid503_tasks);
CALC_LOAD(avenrun[5], EXP_5, numof_uid504_tasks);
}
}
Thanks
Sena Seneviratene
Computer Engineering Lab
Sydney University
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/