392,9 → 392,6 |
{ |
|
int local_scheduler_level, scheduler_id; |
SYS_FLAGS f; |
TIME T,Q; |
int i=0; |
|
#ifdef FSF_DEBUG |
kern_printf("(Remove server %d)",*server); |
442,43 → 439,13 |
level_free_descriptor(local_scheduler_level); |
|
remove_contract(*server); |
|
f=kern_fsave(); |
if (recalculate_contract(fsf_max_bw)==-1) { |
kern_frestore(f); |
return FSF_ERR_CREATE_SERVER; |
} |
#ifdef FSF_DEBUG |
kern_printf("(Adjust budget)"); |
#endif |
for (i=0; i<current_server; i++) { |
mul32div32to32(MAX_BANDWIDTH,server_list[i].Cmin,server_list[i].U,T); |
#ifdef FSF_DEBUG |
kern_printf("(T %ld)", T); |
#endif |
if (T<=server_list[i].Tmax) { |
server_list[i].actual_budget = server_list[i].Cmin; |
server_list[i].actual_period = T; |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T); |
} else { |
mul32div32to32(server_list[i].Tmax,server_list[i].U,MAX_BANDWIDTH,Q); |
#ifdef FSF_DEBUG |
kern_printf("(Q %ld)", Q); |
#endif |
server_list[i].actual_budget = Q; |
server_list[i].actual_period = server_list[i].Tmax; |
adjust_SERVER_budget(server_list[i].server,Q, server_list[i].Tmax); |
} |
server_list[i].U=server_list[i].Umax; |
|
} |
|
recalculate_contract(fsf_max_bw); |
|
*server = -1; |
kern_frestore(f); |
|
return 0; |
|
|
} |
|
int recalculate_contract(bandwidth_t U) { |