5 #warning config options missing
8 #include "vserver/sched.h"
11 #define VAVAVOOM_RATIO 50
13 #define MAX_PRIO_BIAS 20
14 #define MIN_PRIO_BIAS -20
16 #ifdef CONFIG_VSERVER_ACB_SCHED
18 #define VX_INVALID_TICKS -1000000
19 #define IS_BEST_EFFORT(vxi) (vx_info_flags(vxi, VXF_SCHED_SHARE, 0))
21 int vx_tokens_avail(struct vx_info *vxi);
22 void vx_consume_token(struct vx_info *vxi);
23 void vx_scheduler_tick(void);
24 void vx_advance_best_effort_ticks(int ticks);
25 void vx_advance_guaranteed_ticks(int ticks);
29 static inline int vx_tokens_avail(struct vx_info *vxi)
31 return atomic_read(&vxi->sched.tokens);
34 static inline void vx_consume_token(struct vx_info *vxi)
36 atomic_dec(&vxi->sched.tokens);
39 #endif /* CONFIG_VSERVER_ACB_SCHED */
41 static inline int vx_need_resched(struct task_struct *p)
43 #ifdef CONFIG_VSERVER_HARDCPU
44 struct vx_info *vxi = p->vx_info;
46 int slice = --p->time_slice;
48 #ifdef CONFIG_VSERVER_HARDCPU
52 if ((tokens = vx_tokens_avail(vxi)) > 0)
53 vx_consume_token(vxi);
54 /* for tokens > 0, one token was consumed */
63 static inline void vx_onhold_inc(struct vx_info *vxi)
65 int onhold = atomic_read(&vxi->cvirt.nr_onhold);
67 atomic_inc(&vxi->cvirt.nr_onhold);
69 vxi->cvirt.onhold_last = jiffies;
72 static inline void __vx_onhold_update(struct vx_info *vxi)
74 int cpu = smp_processor_id();
75 uint32_t now = jiffies;
76 uint32_t delta = now - vxi->cvirt.onhold_last;
78 vxi->cvirt.onhold_last = now;
79 vxi->sched.cpu[cpu].hold_ticks += delta;
82 static inline void vx_onhold_dec(struct vx_info *vxi)
84 if (atomic_dec_and_test(&vxi->cvirt.nr_onhold))
85 __vx_onhold_update(vxi);
88 static inline void vx_account_user(struct vx_info *vxi,
89 cputime_t cputime, int nice)
91 int cpu = smp_processor_id();
95 vxi->sched.cpu[cpu].user_ticks += cputime;
98 static inline void vx_account_system(struct vx_info *vxi,
99 cputime_t cputime, int idle)
101 int cpu = smp_processor_id();
105 vxi->sched.cpu[cpu].sys_ticks += cputime;
109 #warning duplicate inclusion