int frsh_contract_set_timing_reqs
(frsh_contract_t *contract,
const bool d_equals_t,
- const frsh_rel_time_t *deadline,
- const frsh_signal_t budget_overrun_signal,
- const frsh_signal_info_t budget_overrun_siginfo,
- const frsh_signal_t deadline_miss_signal,
- const frsh_signal_info_t deadline_miss_siginfo)
+ const frsh_rel_time_t *deadline)
{
int ret;
- fres_block_basic *b;
fres_block_timing_reqs *t;
if (!contract || !*contract)
return FRSH_ERR_BAD_ARGUMENT;
- /* deadline and period must be coherent between each other */
- b = fres_contract_get_basic(*contract);
-
if ((d_equals_t && deadline != FRSH_NULL_DEADLINE) ||
(!d_equals_t && (deadline == FRSH_NULL_DEADLINE)))
return FRSH_ERR_BAD_ARGUMENT;
- /* signal delivery can only be requested for BUONDED workloads */
- if (b->workload == FRSH_WT_INDETERMINATE &&
- (deadline_miss_signal != FRSH_NULL_SIGNAL ||
- budget_overrun_signal != FRSH_NULL_SIGNAL))
- return FRSH_ERR_BAD_ARGUMENT;
-
t = malloc(sizeof(*t));
if (!t) return ENOMEM;
}
}
- /* Signals are currently ignored by this implementation as
- * they are better implemented in frsh_thread_bind() */
- /*t->budget_overrun_signal = budget_overrun_signal;
- t->budget_overrun_siginfo = budget_overrun_siginfo;
- t->deadline_miss_signal = deadline_miss_signal;
- t->deadline_miss_siginfo = deadline_miss_siginfo;*/
fres_contract_del_timing_reqs(*contract);
ret = fres_contract_add_timing_reqs(*contract, t);
if (ret) {
int frsh_contract_get_timing_reqs
(const frsh_contract_t *contract,
bool *d_equals_t,
- frsh_rel_time_t *deadline,
- frsh_signal_t *budget_overrun_signal,
- frsh_signal_info_t *budget_overrun_siginfo,
- frsh_signal_t *deadline_miss_signal,
- frsh_signal_info_t *deadline_miss_siginfo)
+ frsh_rel_time_t *deadline)
{
fres_block_timing_reqs *t;
return FRSH_ERR_NOT_IMPLEMENTED;
}
+int frsh_vres_set_notification(
+ frsh_vres_id_t vres,
+ const frsh_signal_t budget_overrun_signal,
+ const frsh_signal_info_t budget_overrun_siginfo,
+ const frsh_signal_t deadline_miss_signal,
+ const frsh_signal_info_t deadline_miss_siginfo)
+{
+ fres_block_basic *b;
+
+ /* deadline and period must be coherent between each other */
+ b = fres_contract_get_basic(vres->allocated);
+
+ /* signal delivery can only be requested for BUONDED workloads */
+ if (b &&
+ (b->workload == FRSH_WT_INDETERMINATE &&
+ (deadline_miss_signal != FRSH_NULL_SIGNAL ||
+ budget_overrun_signal != FRSH_NULL_SIGNAL)))
+ return FRSH_ERR_BAD_ARGUMENT;
+
+ /* TODO - handle overrun and deadline signals */
+/* vres->budget_overrun_signal = budget_overrun_signal; */
+/* vres->budget_overrun_siginfo = budget_overrun_siginfo; */
+/* vres->deadline_miss_signal = deadline_miss_signal; */
+/* vres->deadline_miss_siginfo = deadline_miss_siginfo; */
+ return FRSH_ERR_NOT_IMPLEMENTED;
+}
frsh_contract_t contract[N];
frsh_vres_id_t vres[N];
frsh_rel_time_t budget, period, deadline;
- frsh_signal_info_t si;
int i;
ret = frsh_init();
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_timing_reqs(&contract[i],
- false, &deadline,
- 0, si, 0, si);
+ false, &deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
ret = frsh_contract_negotiate(&contract[i], &vres[i]);
frsh_contract_t *contract;
frsh_vres_id_t *vres;
frsh_rel_time_t budget, period, deadline;
- frsh_signal_info_t si;
int i;
if (argc > 1) {
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_timing_reqs(&contract[i],
- false, &deadline,
- 0, si, 0, si);
+ false, &deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
ret = frsh_contract_negotiate(&contract[i], &vres[i]);
frsh_contract_t contract[N];
frsh_vres_id_t vres[N];
frsh_rel_time_t budget, period, deadline;
- frsh_signal_info_t si;
int i;
char opt;
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_timing_reqs(&contract[i],
- false, &deadline,
- 0, si, 0, si);
+ false, &deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
ret = frsh_contract_negotiate(&contract[i], &vres[i]);
frsh_contract_t contract[N];
frsh_vres_id_t vres[N];
frsh_rel_time_t budget, period, deadline;
- frsh_signal_info_t si;
int i;
ret = frsh_init();
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_timing_reqs(&contract[i],
- false, &deadline,
- 0, si, 0, si);
+ false, &deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
ret = frsh_contract_negotiate(&contract[i], &vres[i]);
int ret;
frsh_contract_t contract[NUM_CONTRACTS];
frsh_vres_id_t vres[NUM_CONTRACTS];
- frsh_signal_info_t si;
int i, j;
ret = frsh_init();
FRSH_CT_REGULAR);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
- ret = frsh_contract_set_timing_reqs(&contract[i], false, &d[i].variants[0].deadline,
- 0, si, 0, si);
+ ret = frsh_contract_set_timing_reqs(&contract[i], false, &d[i].variants[0].deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
frsh_utilization_set_t utilization_set = { .size = NUM_VARIANTS };
/* Negotiate N contracts */
for (i=0; i<N; i++) {
frsh_rel_time_t deadline;
- frsh_signal_info_t si;
fres_block_item_nodes *nodes;
ret = frsh_contract_init(&contract[i]);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_init");
/* Set deadline */
deadline = fosa_msec_to_rel_time(contract_deadline_sec[i]*1000);
ret = frsh_contract_set_timing_reqs(&contract[i],
- false, &deadline,
- 0, si, 0, si);
+ false, &deadline);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
/* Negotiate the contract */