Add sza_print_backtrace_list()
[akaros.git] / kern / include / corerequest.h
index 9e14cab..cce3265 100644 (file)
 #include <arch/topology.h>
 #if defined(CONFIG_COREALLOC_FCFS)
   #include <corealloc_fcfs.h>
+#elif defined(CONFIG_COREALLOC_PACKED)
+  #include <corealloc_packed.h>
+#else
+  #error "Need a corealloc header!"
 #endif
 
 /* Initialize any data assocaited with doing core allocation. */
 void corealloc_init(void);
 
-/* Initialize any data associated with provisiong cores to a process. */
-void coreprov_proc_init(struct proc *p);
+/* Initialize any data associated with allocating cores to a process. */
+void corealloc_proc_init(struct proc *p);
 
 /* Find the best core to allocate to a process as dictated by the core
- * allocation algorithm. This code assumes that the scheduler that uses it
- * holds a lock for the duration of the call. */
-struct sched_pcore *__find_best_core_to_alloc(struct proc *p);
+ * allocation algorithm. If no core is found, return -1. This code assumes
+ * that the scheduler that uses it holds a lock for the duration of the call.
+ * */
+uint32_t __find_best_core_to_alloc(struct proc *p);
 
 /* Track the pcore properly when it is allocated to p. This code assumes that
  * the scheduler that uses it holds a lock for the duration of the call. */
@@ -37,15 +42,6 @@ void __track_core_dealloc(struct proc *p, uint32_t pcoreid);
 void __track_core_dealloc_bulk(struct proc *p, uint32_t *pc_arr,
                                uint32_t nr_cores);
 
-/* Get/Put an idle core from our pcore list and return its core_id. Don't
- * consider the chosen core in the future when handing out cores to a
- * process. This code assumes that the scheduler that uses it holds a lock
- * for the duration of the call. This will not give out provisioned cores.
- * The gets return the coreid on success, -1 or -error on failure. */
-int __get_any_idle_core(void);
-int __get_specific_idle_core(int coreid);
-void __put_idle_core(int coreid);
-
 /* One off functions to make 'pcoreid' the next core chosen by the core
  * allocation algorithm (so long as no provisioned cores are still idle), and
  * to sort the idle core list for debugging. This code assumes that the
@@ -55,7 +51,7 @@ void __sort_idle_cores(void);
 
 /* Provision a core to proc p. This code assumes that the scheduler that uses
  * it holds a lock for the duration of the call. */
-void __provision_core(struct proc *p, struct sched_pcore *spc);
+void __provision_core(struct proc *p, uint32_t pcoreid);
 
 /* Unprovision all cores from proc p. This code assumes that the scheduler
  * that uses * it holds a lock for the duration of the call. */
@@ -71,6 +67,20 @@ void print_proc_coreprov(struct proc *p);
 /* Print the processes attached to each provisioned core. */
 void print_coreprov_map(void);
 
+static inline struct proc *get_alloc_proc(uint32_t pcoreid)
+{
+       extern struct sched_pcore *all_pcores;
+
+       return all_pcores[pcoreid].alloc_proc;
+}
+
+static inline struct proc *get_prov_proc(uint32_t pcoreid)
+{
+       extern struct sched_pcore *all_pcores;
+
+       return all_pcores[pcoreid].prov_proc;
+}
+
 /* TODO: need more thorough CG/LL management.  For now, core0 is the only LL
  * core.  This won't play well with the ghetto shit in schedule_init() if you do
  * anything like 'DEDICATED_MONITOR' or the ARSC server.  All that needs an