Some critical bugs was present in the feedback module implementation.
First of all, the module was not being compiled, thus a lot of comilation
error were in place, and anybody has never noticed them.
Also, the name of the spare bandwidth setting functions (for CPU and DISK)
were totally wrong.
Finally, the registration of the spare capacity block was not being performed.
[FRES_BLOCK_BASIC] = &desc_default_basic,
[FRES_BLOCK_TIMING_REQS] = &desc_default_timing_reqs,
[FRES_BLOCK_CSECTS] = &desc_default_csects,
+ [FRES_BLOCK_SPARE_CAPACITY] = &desc_spare_capacity,
};
/**
shared_LIBRARIES = frsh
frsh_SOURCES = frsh_contract.c frsh_vres.c frsh_synchobj.c frsh_distributed.c frsh_core.c \
- frsh_spare_capacity.c frsh_error.c frsh_thread.c frsh_sharedobj.c frsh_power.c
+ frsh_spare_capacity.c frsh_error.c frsh_thread.c frsh_sharedobj.c frsh_power.c frsh_feedback.c
include_HEADERS = frsh_opaque_types.h frsh_forb.h
frsh_LIBS = fna fcb_client forb contract synchobj sharedobj acpi_cpu fra ulut fosa $(allocator-libs-y)
(const frsh_contract_t *spare_contract)
{
int ret = 0;
- fres_block_basic *b;
+ fres_block_resource *r;
+ frsh_vres_id_t spare_vres;
if (!spare_contract || !*spare_contract)
return FRSH_ERR_BAD_ARGUMENT;
ret = frsh_contract_negotiate(spare_contract, &spare_vres);
- if (ret) goto err;
+ if (ret) return ret;
- b = fres_contract_get_basic(*spare_contract);
+ r = fres_contract_get_resource(*spare_contract);
switch(r->resource_type)
{
- case FRSH_RT_CPU:
+ case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_set_spare_bandwidth(vres_id);
+ ret = fra_CPU_set_spare_bandwidth(spare_vres);
break;
}
case FRSH_RT_DISK:
{
- ret = fra_DISK_set_spare_bandwidth(vres_id);
+ ret = fra_DISK_set_spare_bandwidth(spare_vres);
+ break;
+ }
+ default:
+ {
+ ret = FRSH_ERR_INTERNAL_ERROR;
break;
}
}
(frsh_vres_id_t vres_id,
frsh_rel_time_t *p_budget_out)
{
- frsh_contract_t *contract = vres->percieved;
+ frsh_contract_t *contract = vres_id->perceived;
fres_block_resource *r = fres_contract_get_resource(*contract);
int ret;
switch(r->resource_type)
{
- case FRSH_RT_CPU:
+ case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_get_desired_budget(vres, p_budget_out);
+ ret = fra_CPU_get_desired_budget(vres_id, p_budget_out);
break;
}
case FRSH_RT_DISK:
{
- ret = fra_DISK_get_desired_budget(vres, p_budget_out);
+ ret = fra_DISK_get_desired_budget(vres_id, p_budget_out);
break;
}
default:
(frsh_vres_id_t vres_id,
frsh_rel_time_t *p_budget_in)
{
- frsh_contract_t *contract = vres->percieved;
+ frsh_contract_t *contract = vres_id->perceived;
fres_block_resource *r = fres_contract_get_resource(*contract);
int ret;
switch(r->resource_type)
{
- case FRSH_RT_CPU:
+ case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_set_desired_budget(vres, p_budget_in);
+ ret = fra_CPU_set_desired_budget(vres_id, p_budget_in);
break;
}
case FRSH_RT_DISK:
{
- ret = fra_DISK_set_desired_budget(vres, p_budget_in);
+ ret = fra_DISK_set_desired_budget(vres_id, p_budget_in);
break;
}
default:
goto err;
}
-
- if (err) goto err;
+ if (ret) goto err;
return FRSH_NO_ERROR;
err:
(frsh_vres_id_t vres_id,
frsh_rel_time_t *budget)
{
- frsh_contract_t *contract = vres->percieved;
+ frsh_contract_t *contract = vres_id->perceived;
fres_block_resource *r = fres_contract_get_resource(*contract);
int ret;
switch(r->resource_type)
{
- case FRSH_RT_CPU:
+ case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_get_actual_budget(vres, budget);
+ ret = fra_CPU_get_actual_budget(vres_id, budget);
break;
}
case FRSH_RT_DISK:
{
- ret = fra_DISK_get_actual_budget(vres, budget);
+ ret = fra_DISK_get_actual_budget(vres_id, budget);
break;
}
default:
goto err;
}
-
- if (err) goto err;
+ if (ret) goto err;
return FRSH_NO_ERROR;
err:
return 0;
}
-int fra_CPU_get_spare_bandwidth(fres_vres_t *vres)
+int fra_CPU_set_spare_bandwidth(fres_vres_t *vres)
{
qres_sid_t fake_sid = (qres_sid_t) -1;
aqcpu_params_t cpu_params;
int fra_CPU_get_remaining_budget(const fres_vres_t *vres,
fosa_rel_time_t *budget);
-int fra_CPU_get_spare_bandwidth(fres_vres_t *vres);
+int fra_CPU_set_spare_bandwidth(fres_vres_t *vres);
int fra_CPU_get_desired_budget(fres_vres_t *vres,
frsh_rel_time_t *p_budget_out);
ret = frsh_thread_get_vres_id(fosa_thread_self(), &vres_id);
if (ret) PERROR_AND_EXIT(ret, "frsh_get_vres_id");
+
printf("\tvres retrieved from thread-ID: %d\n", (int) vres_id);
- ret = frsh_resource_get_vres_from_label("TEST_VRES",
- FRSH_RT_PROCESSOR,
- 0,
- &vres_id);
- if (ret) PERROR_AND_EXIT(ret, "frsh_get_vres_from_label");
- printf("\ton retrived from label: %d\n", (int) vres_id);
+ //ret = frsh_resource_get_vres_from_label("TEST_VRES",
+ // FRSH_RT_PROCESSOR,
+ // 0,
+ // &vres_id);
+ //
+ //if (ret) PERROR_AND_EXIT(ret, "frsh_get_vres_from_label");
+ //
+ //printf("\ton retrived from label: %d\n", (int) vres_id);
}
return EXIT_SUCCESS;
frsh_thread_id_t thread;
frsh_contract_t contract;
frsh_rel_time_t budget, period;
+ frsh_rel_time_t zero = fosa_msec_to_rel_time(0);
int ret;
if (frsh_init())
FRSH_WT_BOUNDED,
FRSH_CT_REGULAR);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
+
ret = frsh_contract_set_resource_and_label(&contract, FRSH_RT_PROCESSOR,
0,"TEST_VRES");
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
+ ret = frsh_contract_set_reclamation_params(&contract,
+ &zero,
+ &budget,
+ &period,
+ FRSH_GR_CONTINUOUS,
+ NULL,
+ 0,
+ 0);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_reclamation_params");
+
ret = frsh_contract_negotiate(&contract, &vres);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
return -1;
}
+int fra_DISK_set_spare_bandwidth
+ (fres_vres_t *vres)
+{
+ return -1;
+}
+
int fra_DISK_get_desired_budget
(fres_vres_t *vres,
frsh_rel_time_t *p_budget_out)
int fra_DISK_get_remaining_budget(const fres_vres_t *vres,
fosa_rel_time_t *budget);
+int fra_DISK_set_spare_bandwidth(fres_vres_t *vres);
+
int fra_DISK_get_desired_budget(fres_vres_t *vres,
frsh_rel_time_t *p_budget_out);
int fra_DISK_set_desired_budget(fres_vres_t *vres,