34,7 → 34,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
* |
* CVS : $Id: server-task.c,v 1.3 2004-05-25 12:41:47 trimarchi Exp $ |
* CVS : $Id: server-task.c,v 1.4 2004-05-26 13:44:55 trimarchi Exp $ |
*/ |
|
#include "ll/i386/64bit.h" |
84,29 → 84,12 |
} |
} |
|
int renegotiate_contract |
(const fsf_contract_parameters_t *new_contract, |
fsf_server_id_t server) |
{ |
|
static __inline void set_contract_parameter(void) { |
|
int i=0; |
TIME T,Q; |
int i; |
|
#ifdef FSF_DEBUG |
kern_printf("(Renegotiate for server %d)",server); |
#endif |
|
if (!new_contract) |
return FSF_ERR_NOT_INITIALIZED; |
|
if (server < 0) |
return FSF_ERR_INVALID_SERVER; |
|
// change the parameter |
relink_contract_to_server(new_contract, server); |
if (recalculate_contract(fsf_max_bw)==-1) { |
return FSF_ERR_CREATE_SERVER; |
} |
|
for (i=0; i<current_server; i++) { |
mul32div32to32(MAX_BANDWIDTH,server_list[i].Cmin,server_list[i].U,T); |
if (T > server_list[i].Tmin ) { |
137,6 → 120,32 |
server_list[i].U=server_list[i].Umin; |
} |
|
} |
|
|
int renegotiate_contract |
(const fsf_contract_parameters_t *new_contract, |
fsf_server_id_t server) |
{ |
|
#ifdef FSF_DEBUG |
kern_printf("(Renegotiate for server %d)",server); |
#endif |
|
if (!new_contract) |
return FSF_ERR_NOT_INITIALIZED; |
|
if (server < 0) |
return FSF_ERR_INVALID_SERVER; |
|
// change the parameter |
relink_contract_to_server(new_contract, server); |
if (recalculate_contract(fsf_max_bw)==-1) { |
return FSF_ERR_CREATE_SERVER; |
} |
|
set_contract_parameter(); |
|
return 0; |
} |
|
144,9 → 153,6 |
(const fsf_contract_parameters_t *contract, |
fsf_server_id_t *server) |
{ |
int i=0; |
TIME T; |
TIME Q; |
/* Check if contract is initialized */ |
if (!contract) return FSF_ERR_NOT_INITIALIZED; |
|
158,56 → 164,25 |
/* SERVER => BUDGET */ |
set_SERVER_budget_from_contract(contract,server); |
|
#ifdef FSF_DEBUG |
kern_printf("(New Server %d)",*server); |
#endif |
#ifdef FSF_DEBUG |
kern_printf("(New Server %d)",*server); |
#endif |
|
if (*server >= 0) { |
link_contract_to_server(contract,*server); |
if (recalculate_contract(fsf_max_bw)==-1) { |
return FSF_ERR_CREATE_SERVER; |
return FSF_ERR_CREATE_SERVER; |
} |
set_contract_parameter(); |
#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); |
if (T > server_list[i].Tmin ) { |
server_list[i].actual_budget = server_list[i].Cmin; |
server_list[i].actual_period = T; |
#ifdef FSF_DEBUG |
kern_printf("(1 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
|
if (server_list[i].d_equals_t == TRUE) |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T , T); |
else |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T , server_list[i].deadline); |
|
} else { |
mul32div32to32(server_list[i].Tmin,server_list[i].U,MAX_BANDWIDTH,Q); |
server_list[i].actual_budget = Q; |
server_list[i].actual_period = server_list[i].Tmin; |
#ifdef FSF_DEBUG |
kern_printf("(2 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
|
if (server_list[i].d_equals_t == TRUE) |
adjust_SERVER_budget(server_list[i].server,Q, server_list[i].Tmin , server_list[i].Tmin); |
else |
adjust_SERVER_budget(server_list[i].server,Q, server_list[i].Tmin , server_list[i].deadline); |
|
} |
|
|
server_list[i].U=server_list[i].Umin; |
|
} |
|
} |
else { |
return FSF_ERR_CREATE_SERVER; |
} |
|
|
return 0; |
|
} |