]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
plat/common: Track index in `ukplat_memregion_list_insert_split_phys`
authorSergiu Moga <sergiu.moga@protonmail.com>
Wed, 17 May 2023 11:33:36 +0000 (14:33 +0300)
committerUnikraft <monkey@unikraft.io>
Fri, 11 Aug 2023 10:18:45 +0000 (10:18 +0000)
Make use of `ukplat_memregion_list_insert_at_idx` in order to make
insertion faster in `ukplat_memregion_list_insert_split_phys`.

Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #848

plat/common/include/uk/plat/common/memory.h

index 121f88ae11456c3621c5579fbd46f6010f31cd87..d64989799be240a61f00f163e37f9dba69bf297d 100644 (file)
@@ -232,11 +232,6 @@ ukplat_memregion_list_insert_split_phys(struct ukplat_memregion_list *list,
 
        mrdc = *mrd;
 
-       /* TODO: The following code does not make use of the tracked iteration
-        * index to insert elements at the correct location and instead uses the
-        * generic insertion routine. For large memory region lists this could
-        * be potentially slow.
-        */
        for (i = 0; i < (int)list->count; i++) {
                mrdp = &list->mrds[i];
                if (!ukplat_memregion_desc_overlap(mrdp, pstart, pend))
@@ -257,7 +252,9 @@ ukplat_memregion_list_insert_split_phys(struct ukplat_memregion_list *list,
                        mrdc.len   = mrdp->pbase - pstart;
 
                        if (mrdc.len >= min_size) {
-                               rc = ukplat_memregion_list_insert(list, &mrdc);
+                               rc = ukplat_memregion_list_insert_at_idx(list,
+                                                                        &mrdc,
+                                                                        i - 1);
                                if (unlikely(rc < 0))
                                        return rc;
                        }