Skip to content

Commit

Permalink
Add sched class table
Browse files Browse the repository at this point in the history
  • Loading branch information
okuoku committed Oct 15, 2023
1 parent 5f88e34 commit 9cbfcee
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 4 deletions.
3 changes: 2 additions & 1 deletion _hostwasm/buildline.sh
@@ -1,5 +1,6 @@
#!/bin/sh
cmake -P geninittbl.cmake && \
../_warp/bin/warp-cc -c -g -I ../include -I ../include/uapi -I ../arch/lkl/include -I ../arch/lkl/include/generated -I ../arch/lkl/include/generated/uapi -o initschedclasses.o initschedclasses.c && \
../_warp/bin/warp-cc -g -nostdlib -Wl,--no-entry -Wl,--export=init -Wl,--error-limit=0 \
-Wl,--Map=lin.map -o lin.wasm -I ../arch/lkl/include ../lib/lib.a ../vmlinux.a hostwasm_main.c hostwasm_lklops.c initsyms.gen.c && wasm2c -o lin.c lin.wasm
-Wl,--Map=lin.map -o lin.wasm -I ../arch/lkl/include ../lib/lib.a ../vmlinux.a initschedclasses.o hostwasm_main.c hostwasm_lklops.c initsyms.gen.c && wasm2c -o lin.c lin.wasm

5 changes: 2 additions & 3 deletions _hostwasm/hostwasm_main.c
Expand Up @@ -8,8 +8,6 @@ DUMMYSYM(__start___param);
DUMMYSYM(__stop___param);
DUMMYSYM(__con_initcall_end);
DUMMYSYM(__con_initcall_start);
DUMMYSYM(__sched_class_highest);
DUMMYSYM(__sched_class_lowest);

/* address marks */
DUMMYSYM(__start___ex_table);
Expand Down Expand Up @@ -52,7 +50,6 @@ DUMMYSYM(__end_pci_fixups_suspend);
DUMMYSYM(__start_pci_fixups_suspend_late);
DUMMYSYM(__end_pci_fixups_suspend_late);


extern char* __attribute((alias ("dummy_page"))) init_thread_union;
extern char* __attribute((alias ("dummy_page"))) init_stack;

Expand Down Expand Up @@ -98,8 +95,10 @@ void lkl_bug(const char* fmt, ...){
void* lklhost_getops(void);

void host_lkl_inittbl(void); // generated
void host_lkl_initschedclasses(void);

void init(void){
host_lkl_initschedclasses();
host_lkl_inittbl();
lkl_init(lklhost_getops());
lkl_start_kernel("mem=64M"); // FIXME
Expand Down
35 changes: 35 additions & 0 deletions _hostwasm/initschedclasses.c
@@ -0,0 +1,35 @@
//FIMXE: Try to follow ABI..
//#include "../kernel/sched/sched.h"

#include <stddef.h>
void *memcpy(void *dest, const void *src, size_t n);

/* FIXME: Pray the frontend emits struct in this order... */

struct sched_class {
char __dummy_method[64];
};

struct sched_class dl_sched_class;
struct sched_class rt_sched_class;
struct sched_class fair_sched_class;
struct sched_class idle_sched_class;
struct sched_class __dummy_sched_class;

extern struct sched_class dl_sched_class_temp;
extern struct sched_class rt_sched_class_temp;
extern struct sched_class fair_sched_class_temp;
extern struct sched_class idle_sched_class_temp;

void
host_lkl_initschedclasses(void){
struct sched_class temp;
memcpy(&dl_sched_class, &dl_sched_class_temp, sizeof(struct sched_class));
memcpy(&rt_sched_class, &rt_sched_class_temp, sizeof(struct sched_class));
memcpy(&fair_sched_class, &fair_sched_class_temp, sizeof(struct sched_class));
memcpy(&idle_sched_class, &idle_sched_class_temp, sizeof(struct sched_class));
memcpy(&__dummy_sched_class, &idle_sched_class_temp, sizeof(struct sched_class));
}

extern struct sched_class __attribute__((alias ("dl_sched_class"))) __sched_class_highest;
extern struct sched_class __attribute__((alias ("__dummy_sched_class"))) __sched_class_lowest;
5 changes: 5 additions & 0 deletions kernel/sched/fair.c
Expand Up @@ -333,7 +333,12 @@ static u64 __calc_delta(u64 delta_exec, unsigned long weight, struct load_weight
}


#ifdef __wasm__
const struct sched_class fair_sched_class_temp;
extern struct sched_class fair_sched_class;
#else
const struct sched_class fair_sched_class;
#endif

/**************************************************************
* CFS operations on generic schedulable entities:
Expand Down
16 changes: 16 additions & 0 deletions kernel/sched/sched.h
Expand Up @@ -2228,10 +2228,18 @@ static inline void set_next_task(struct rq *rq, struct task_struct *next)
*
* Also enforce alignment on the instance, not the type, to guarantee layout.
*/

#ifdef __wasm__
#define DEFINE_SCHED_CLASS(name) \
const struct sched_class name##_sched_class_temp \
__aligned(__alignof__(struct sched_class)) \
__section("__" #name "_sched_class")
#else
#define DEFINE_SCHED_CLASS(name) \
const struct sched_class name##_sched_class \
__aligned(__alignof__(struct sched_class)) \
__section("__" #name "_sched_class")
#endif

/* Defined in include/asm-generic/vmlinux.lds.h */
extern struct sched_class __sched_class_highest[];
Expand All @@ -2245,11 +2253,19 @@ extern struct sched_class __sched_class_lowest[];

#define sched_class_above(_a, _b) ((_a) < (_b))

#ifdef __wasm__
extern struct sched_class stop_sched_class;
extern struct sched_class dl_sched_class;
extern struct sched_class rt_sched_class;
extern struct sched_class fair_sched_class;
extern struct sched_class idle_sched_class;
#else
extern const struct sched_class stop_sched_class;
extern const struct sched_class dl_sched_class;
extern const struct sched_class rt_sched_class;
extern const struct sched_class fair_sched_class;
extern const struct sched_class idle_sched_class;
#endif

static inline bool sched_stop_runnable(struct rq *rq)
{
Expand Down

0 comments on commit 9cbfcee

Please sign in to comment.