[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Scheduling groups, credit scheduler support
Hi, Here is a bunch of other fixes I had to use Samuel diff -r b968ee4f6b4f -r d8ed81d5dc55 tools/libxc/xc_domain.c --- a/tools/libxc/xc_domain.c Mon Dec 17 12:05:18 2007 +0000 +++ b/tools/libxc/xc_domain.c Tue Dec 18 11:45:05 2007 +0000 @@ -938,6 +938,7 @@ int xc_group_get_status(int handle, stru domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_group; domctl.u.scheduler_op.u.group.op = SGRP_get_status; domctl.u.scheduler_op.u.group.id_master = group->id_master; + domctl.u.scheduler_op.u.group.id_member = group->id_master; ret = do_domctl(handle, &domctl); if ( ret == 0 ) in xen's code, id_member is used for both get_status and get_master. The code should probably be reworked there so that the fix above is not needed. diff -r b968ee4f6b4f -r d8ed81d5dc55 xen/common/domctl.c --- a/xen/common/domctl.c Mon Dec 17 12:05:18 2007 +0000 +++ b/xen/common/domctl.c Tue Dec 18 11:45:05 2007 +0000 @@ -491,6 +491,8 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc if ( op->u.scheduler_op.cmd == XEN_DOMCTL_SCHEDOP_group ) { rcu_unlock_domain(d); ret = sched_group_op(&op->u.scheduler_op.u.group); + if ( copy_to_guest(u_domctl, op, 1) ) + ret = -EFAULT; break; } Else the userland doesn't get any value :) diff -r b968ee4f6b4f -r d8ed81d5dc55 xen/common/sched_credit.c --- a/xen/common/sched_credit.c Mon Dec 17 12:05:18 2007 +0000 +++ b/xen/common/sched_credit.c Tue Dec 18 11:45:05 2007 +0000 @@ -393,10 +393,12 @@ static inline void delegate_active_vcpus if ( !list_empty(&member->active_sdom_elem) ) { list_del_init(&member->active_sdom_elem); + BUG_ON( csched_priv.weight < member->weight ); csched_priv.weight -= member->weight; } - if ( list_empty(&master->active_sdom_elem) ) + if ( !list_empty(&master->active_vcpu) && + list_empty(&master->active_sdom_elem) ) { list_add(&master->active_sdom_elem, &csched_priv.active_sdom); csched_priv.weight += master->weight; @@ -429,6 +431,7 @@ static inline void reclaim_active_vcpus( !list_empty(&master->active_sdom_elem) ) { list_del_init(&master->active_sdom_elem); + BUG_ON( csched_priv.weight < master->weight ); csched_priv.weight -= master->weight; } if ( !list_empty(&member->active_vcpu) && @@ -913,7 +916,6 @@ static int csched_group_op(struct xen_do member = get_domain_by_id(op->id_member); if ( !member ) goto release_master; - ret = 0; if ( op->op == SGRP_add_member ) op->reason = add_sanity_check(csched_dom(member), csched_dom(master)); @@ -922,6 +924,7 @@ static int csched_group_op(struct xen_do rem_sanity_check(csched_dom(member), csched_dom(master)); if ( op->reason ) goto release_member; + ret = 0; spin_lock_irqsave(&csched_priv.lock, flags); if ( op->op == SGRP_add_member ) @@ -1193,6 +1196,7 @@ csched_acct(void) list_for_each_safe( iter_vcpu, next_vcpu, &sdom->active_vcpu ) { svc = list_entry(iter_vcpu, struct csched_vcpu, active_vcpu_elem); + BUG_ON( sdom != master_dom(svc->sdom) ); /* Increment credit */ atomic_add(credit_fair, &svc->credit); More safety. diff -r b968ee4f6b4f -r d8ed81d5dc55 xen/include/public/domctl.h --- a/xen/include/public/domctl.h Mon Dec 17 12:05:18 2007 +0000 +++ b/xen/include/public/domctl.h Tue Dec 18 11:45:05 2007 +0000 @@ -333,7 +333,7 @@ struct xen_domctl_scheduler_op { uint8_t is_member; domid_t id_master; domid_t id_member; - } group __attribute__ (( aligned )); + } group; } u; }; typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t; Aligned is of no use. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |