]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Fix critical bugs in FRSH Feedback module.
authorDario <dario@dario-desktop.(none)>
Mon, 4 May 2009 13:49:25 +0000 (15:49 +0200)
committerDario <dario@dario-desktop.(none)>
Mon, 4 May 2009 13:49:25 +0000 (15:49 +0200)
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/contract/fres_container.c
frsh_api/Makefile.omk
frsh_api/frsh_feedback.c
resources/cpu_aquosa/lib/aqcpu_fra.c
resources/cpu_aquosa/lib/aqcpu_res.h
resources/cpu_aquosa/tests/aqcputest.c
resources/disk_bfq/lib/diskbfq_fra.c
resources/disk_bfq/lib/diskbfq_res.h

index 14a202e35daf0dcca3c1c2b08ba430d4f230f233..dc60c541020908979a5e3a0aeeaa02b7e289f2ec 100644 (file)
@@ -148,6 +148,7 @@ static const struct fres_block_desc *block_registry[FRES_NUM_BLOCKS] = {
        [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,
 };
 
 /** 
index c5b2f56ab6ec601c6bf96525a6e538091828865f..04ae4b2baf2d929837d4289a2275cbd7e5be8233 100644 (file)
@@ -2,7 +2,7 @@ SUBDIRS = tests
 
 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)
 
index e9d0df7d63d2b6f22085eb9bea559cb41fc0e357..95e7766df966af3d5ee599d855c49b9c80f535ee 100644 (file)
@@ -79,25 +79,31 @@ int frsh_feedback_set_spare
   (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;
                }
        }
@@ -109,20 +115,20 @@ int frsh_feedback_get_desired_budget
   (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:
@@ -139,27 +145,26 @@ int frsh_feedback_set_desired_budget
   (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:
@@ -170,27 +175,26 @@ int frsh_feedback_get_actual_budget
   (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:
index 458d6c6185f881bb8821d7d3e9390acb6d504b82..343330e96a907bbdf937b1207159bde292bac334 100644 (file)
@@ -327,7 +327,7 @@ int fra_CPU_get_remaining_budget
        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;
index 796ea292fcf1a78783f1bd757e568ba14be6f485..078d88a84c36c651bd698142c590784f0f2250a4 100644 (file)
@@ -64,7 +64,7 @@ int fra_CPU_get_job_usage(const fres_vres_t *vres,
 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);
index fadaa2f59db9974fa3f4a6060d12bac724ddd06b..b19671391d8a7d16a0e270ce2b7ce77c1aba05f6 100644 (file)
@@ -16,14 +16,17 @@ void* work_thread()
 
                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;
@@ -36,6 +39,7 @@ int main()
        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())
@@ -53,10 +57,21 @@ int main()
                                             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");
 
index 97aed99d1017020b5e3f81ccf046278c76171121..1fc8fd2db0c23d1f84dbd6b9e5b7ef4792664ef1 100644 (file)
@@ -250,6 +250,12 @@ int fra_DISK_get_remaining_budget
        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)
index 08496c0ceacd85e64be11002f1a108a5068b4f6a..a7cdb8aa752ee831ffa24fb1ded7a4a804e50922 100644 (file)
@@ -17,6 +17,8 @@ int fra_DISK_get_job_usage(const fres_vres_t *vres,
 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,