* Given now immediately if there is no other thread that is runnable
* And there is no real bound on how long it will yield
*/
-void palacios_yield_cpu_timed(unsigned int us)
+void palacios_sleep_cpu(unsigned int us)
{
- unsigned int uspj = 1000000U/HZ;
-
- unsigned int jiffies = us/uspj + ((us%uspj) !=0); // ceiling
-
set_current_state(TASK_INTERRUPTIBLE);
-
- schedule_timeout(jiffies);
-
+ if (us) {
+ unsigned int uspj = 1000000U/HZ;
+ unsigned int jiffies = us/uspj + ((us%uspj) !=0); // ceiling
+ schedule_timeout(jiffies);
+ } else {
+ schedule();
+ }
+ return;
}
+void palacios_wakeup_cpu(void *thread)
+{
+ wake_up_process(thread);
+ return;
+}
/**
* Allocates a mutex.
.get_cpu_khz = palacios_get_cpu_khz,
.start_kernel_thread = palacios_start_kernel_thread,
.yield_cpu = palacios_yield_cpu,
- .yield_cpu_timed = palacios_yield_cpu_timed,
+ .sleep_cpu = palacios_sleep_cpu,
+ .wakeup_cpu = palacios_wakeup_cpu,
.mutex_alloc = palacios_mutex_alloc,
.mutex_free = palacios_mutex_free,
.mutex_lock = palacios_mutex_lock,
#
ifeq ($(STATIC),1)
CURSES_CFLAGS = -DNCURSES_STATIC
+ CURSES_LIBS = -ltermcap
endif
v3_cons: v3_cons.c
- $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< -lcurses -o $@
+ $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< -lcurses $(CURSES_LIBS) -o $@
v3_cons_sc: v3_cons_sc.c
- $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< -lcurses -o $@
+ $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< -lcurses $(CURSES_LIBS) -o $@
v3_create: v3_create.c ezxml.c libv3_ctrl.a
$(CC) $(CFLAGS) $^ -lv3_ctrl -L. -o $@
} while (0) \
-#define V3_Yield_Timed(usec) \
+#define V3_Sleep(usec) \
do { \
extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->yield_cpu_timed) {\
- (os_hooks)->yield_cpu_timed(usec); \
+ if ((os_hooks) && (os_hooks)->sleep_cpu) {\
+ (os_hooks)->sleep_cpu(usec); \
} else { \
V3_Yield(); \
} \
} while (0) \
+#define V3_Wakeup(cpu) \
+ do { \
+ extern struct v3_os_hooks * os_hooks; \
+ if ((os_hooks) && (os_hooks)->wakeup_cpu) { \
+ (os_hooks)->wakeup_cpu(cpu); \
+ } \
+ } while (0) \
typedef enum v3_vm_class {V3_INVALID_VM, V3_PC_VM, V3_CRAY_VM} v3_vm_class_t;
unsigned int (*get_cpu_khz)(void);
-
void (*yield_cpu)(void);
-
- void (*yield_cpu_timed)(unsigned int usec);
+ void (*sleep_cpu)(unsigned int usec);
+ void (*wakeup_cpu)(void *cpu);
void *(*mutex_alloc)(void);
void (*mutex_free)(void * mutex);
if (usec < 0) {
V3_Yield();
} else {
- V3_Yield_Timed(usec);
+ V3_Sleep(usec);
}
info->yield_start_cycle += info->vm_info->yield_cycle_period;
if (usec < 0) {
V3_Yield();
} else {
- V3_Yield_Timed(usec);
+ V3_Sleep(usec);
}
if (info) {