2 * Lightweight Autonomic Network Architecture
4 * Round robin scheduler.
6 * Copyright 2011 Daniel Borkmann <dborkma@tik.ee.ethz.ch>,
7 * Swiss federal institute of technology (ETH Zurich)
11 #include <linux/module.h>
12 #include <linux/kernel.h>
13 #include <linux/cache.h>
14 #include <linux/cpumask.h>
17 #include "xt_engine.h"
19 static volatile unsigned long cpu
= 0;
20 static unsigned long cpu_max
;
22 static int ppe_rr_init(void)
24 cpu_max
= num_online_cpus();
28 static int ppe_rr_sched(struct sk_buff
*skb
, enum path_type dir
)
31 unsigned long ncpu
= cpu
++ & (cpu_max
- 1);
32 while (ncpu
== USERSPACECPU
)
33 ncpu
= cpu
++ & (cpu_max
- 1);
34 enqueue_on_engine(skb
, ncpu
, dir
);
36 enqueue_on_engine(skb
, cpu
++ & (cpu_max
- 1), dir
);
41 static struct ppesched_discipline_ops ppe_rr_ops __read_mostly
= {
42 .discipline_init
= ppe_rr_init
,
43 .discipline_sched
= ppe_rr_sched
,
46 static struct ppesched_discipline ppe_rr __read_mostly
= {
52 static int __init
init_ppe_rr_module(void)
54 return ppesched_discipline_register(&ppe_rr
);
57 static void __exit
cleanup_ppe_rr_module(void)
59 return ppesched_discipline_unregister(&ppe_rr
);
62 module_init(init_ppe_rr_module
);
63 module_exit(cleanup_ppe_rr_module
);
65 MODULE_LICENSE("GPL");
66 MODULE_AUTHOR("Daniel Borkmann <dborkma@tik.ee.ethz.ch>");
67 MODULE_DESCRIPTION("LANA round robin scheduler");