Hi Gregor,
You've dropped 'data' from bind_evtchn() call in your changes to
events.c. That breaks our API, where event handler gets void* to some
piece of data supplied when binding a channel. It looks to me that no
changes to events.c are required whatsoever.
Sorry, my fault. I overlooked last changes to the
HYPERVISOR_event_channel_op() hypercall :-(.
I resend the patch only with the changed hypercall HYPERVISOR_sched_op().
Thanks.
Dietmar.
------------------------------------------------------------------------
# HG changeset patch
# User dietmar.hahn@xxxxxxxxxxxxxxxxxxx
# Date 1164268700 -3600
# Node ID 85056d526e1496d0f3a2449b51e4ba6a2361baec
# Parent 2ef0f17a9af9b6b3b2f76460e0f9da5112c0bd79
Switched to new interface for HYPERVISOR_sched_op().
Signed-off-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx>
diff -r 2ef0f17a9af9 -r 85056d526e14
extras/mini-os/include/x86/x86_32/hypercall-x86_32.h
--- a/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h Wed Nov 22
18:36:48 2006 +0000
+++ b/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h Thu Nov 23
08:58:20 2006 +0100
@@ -167,7 +167,7 @@ HYPERVISOR_fpu_taskswitch(
static inline int
HYPERVISOR_sched_op(
- int cmd, unsigned long arg)
+ int cmd, void *arg)
{
return _hypercall2(int, sched_op, cmd, arg);
}
diff -r 2ef0f17a9af9 -r 85056d526e14
extras/mini-os/include/x86/x86_64/hypercall-x86_64.h
--- a/extras/mini-os/include/x86/x86_64/hypercall-x86_64.h Wed Nov 22
18:36:48 2006 +0000
+++ b/extras/mini-os/include/x86/x86_64/hypercall-x86_64.h Thu Nov 23
08:58:20 2006 +0100
@@ -171,7 +171,7 @@ HYPERVISOR_fpu_taskswitch(
static inline int
HYPERVISOR_sched_op(
- int cmd, unsigned long arg)
+ int cmd, void *arg)
{
return _hypercall2(int, sched_op, cmd, arg);
}
diff -r 2ef0f17a9af9 -r 85056d526e14 extras/mini-os/kernel.c
--- a/extras/mini-os/kernel.c Wed Nov 22 18:36:48 2006 +0000
+++ b/extras/mini-os/kernel.c Thu Nov 23 08:58:20 2006 +0100
@@ -159,5 +159,9 @@ void do_exit(void)
void do_exit(void)
{
printk("Do_exit called!\n");
- for ( ;; ) HYPERVISOR_sched_op(SCHEDOP_shutdown, SHUTDOWN_crash);
+ for( ;; )
+ {
+ struct sched_shutdown sched_shutdown = { .reason = SHUTDOWN_crash };
+ HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
+ }
}