[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-ia64-devel] [PATCH]minios: reworking and clean up
Applied, thanks. On Mon, Nov 17, 2008 at 10:00:15AM +0100, Dietmar Hahn wrote: > Hi, > > I did some reworking of mini-os code to get it compile fine again. > Further needed is the patch discussed last weak with Samuel Thibault on the > list. > The attached patch cleans up the hypervisor calls. > Thanks. > > Dietmar. > # HG changeset patch > # User dietmar.hahn@xxxxxxxxxxxxxxxxxxx > # Date 1226909985 -3600 > # Node ID bc50b227afe354b9550e80f2ce1a496268701c0d > # Parent 9bc00e9716cd8c7d3fe0ffd71b28d3235fc125ac > Clean up the hypervisor interface - move all hypervisor calls to xencomm > > Signed-off-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> > > diff -r 9bc00e9716cd -r bc50b227afe3 extras/mini-os/arch/ia64/xencomm.c > --- a/extras/mini-os/arch/ia64/xencomm.c Fri Nov 07 19:34:59 2008 +0900 > +++ b/extras/mini-os/arch/ia64/xencomm.c Mon Nov 17 09:19:45 2008 +0100 > @@ -24,6 +24,8 @@ > > > #include <os.h> > +#include <mini-os/errno.h> > +#include <mini-os/lib.h> > #include <hypervisor.h> > #include <xen/xencomm.h> > #include <xen/grant_table.h> > @@ -38,6 +40,7 @@ struct xencomm_mini > > #define xen_guest_handle(hnd) ((hnd).p) > > +struct xencomm_handle; > > /* Translate virtual address to physical address. */ > uint64_t > @@ -50,6 +53,16 @@ xencomm_vaddr_to_paddr(uint64_t vaddr) > return __pa(vaddr); > > return 0; > +} > + > +/* Inline version. To be used only on linear space (kernel space). */ > +static struct xencomm_handle * > +xencomm_create_inline(void *buffer) > +{ > + unsigned long paddr; > + > + paddr = xencomm_vaddr_to_paddr((unsigned long)buffer); > + return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG); > } > > #define min(a,b) (((a) < (b)) ? (a) : (b)) > @@ -201,6 +214,14 @@ xencommize_mini_grant_table_op(struct xe > return rc; > } > > +static inline int > +xencomm_arch_hypercall_grant_table_op(unsigned int cmd, > + struct xencomm_handle *uop, > + unsigned int count) > +{ > + return _hypercall3(int, grant_table_op, cmd, uop, count); > +} > + > int > xencomm_mini_hypercall_grant_table_op(unsigned int cmd, void *op, > unsigned int count) > @@ -268,3 +289,107 @@ HYPERVISOR_suspend(unsigned long srec) > return xencomm_arch_hypercall_suspend(xencomm_create_inline(&arg)); > } > > +int > +HYPERVISOR_event_channel_op(int cmd, void *arg) > +{ > + int rc; > + struct xencomm_handle *newArg; > + > + newArg = xencomm_create_inline(arg); > + rc = _hypercall2(int, event_channel_op, cmd, newArg); > + if (unlikely(rc == -ENOSYS)) { > + struct evtchn_op op; > + > + op.cmd = SWAP(cmd); > + memcpy(&op.u, arg, sizeof(op.u)); > + rc = _hypercall1(int, event_channel_op_compat, &op); > + } > + return rc; > +} > + > +static int > +xencomm_arch_xen_version(int cmd, struct xencomm_handle *arg) > +{ > + return _hypercall2(int, xen_version, cmd, arg); > +} > + > +static int > +xencomm_arch_xen_feature(int cmd, struct xencomm_handle *arg) > +{ > + struct xencomm_handle *newArg; > + > + newArg = xencomm_create_inline(arg); > + return _hypercall2(int, xen_version, cmd, newArg); > +} > + > +int > +HYPERVISOR_xen_version(int cmd, void *arg) > +{ > + switch(cmd) { > + case XENVER_version: > + return xencomm_arch_xen_version(cmd, 0); > + case XENVER_get_features: > + return xencomm_arch_xen_feature(cmd, arg); > + default: > + return -1; > + } > +} > + > +int > +HYPERVISOR_console_io(int cmd, int count, char *str) > +{ > + struct xencomm_handle *newStr; > + > + newStr = xencomm_create_inline(str); > + return _hypercall3(int, console_io, cmd, count, newStr); > +} > + > +int > +HYPERVISOR_sched_op_compat(int cmd, unsigned long arg) > +{ > + return _hypercall2(int, sched_op_compat, cmd, arg); > +} > + > +int > +HYPERVISOR_sched_op(int cmd, void *arg) > +{ > + struct xencomm_handle *newArg; > + > + newArg = xencomm_create_inline(arg); > + return _hypercall2(int, sched_op, cmd, newArg); > +} > + > +int > +HYPERVISOR_callback_op(int cmd, void *arg) > +{ > + struct xencomm_handle *newArg; > + > + newArg = xencomm_create_inline(arg); > + return _hypercall2(int, callback_op, cmd, newArg); > +} > + > +int > +HYPERVISOR_opt_feature(void *arg) > +{ > + struct xencomm_handle *new_arg; > + > + new_arg = xencomm_create_inline(arg); > + > + return _hypercall1(int, opt_feature, new_arg); > +} > + > +int > +HYPERVISOR_shutdown(unsigned int reason) > +{ > + struct sched_shutdown sched_shutdown = { > + .reason = reason > + }; > + > + int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); > + > + if (rc == -ENOSYS) > + rc = HYPERVISOR_sched_op_compat(SCHEDOP_shutdown, reason); > + > + return rc; > +} > + > diff -r 9bc00e9716cd -r bc50b227afe3 > extras/mini-os/include/ia64/hypercall-ia64.h > --- a/extras/mini-os/include/ia64/hypercall-ia64.h Fri Nov 07 19:34:59 > 2008 +0900 > +++ b/extras/mini-os/include/ia64/hypercall-ia64.h Mon Nov 17 09:19:45 > 2008 +0100 > @@ -34,8 +34,6 @@ > #ifndef __HYPERCALL_H__ > #define __HYPERCALL_H__ > > -#include <mini-os/lib.h> /* memcpy() */ > -#include <mini-os/errno.h> /* ENOSYS() */ > #include <xen/event_channel.h> > #include <xen/sched.h> > #include <xen/version.h> > @@ -114,123 +112,24 @@ extern unsigned long __hypercall(unsigne > }) > > > -extern unsigned long xencomm_vaddr_to_paddr(unsigned long vaddr); > -struct xencomm_handle; > +int HYPERVISOR_event_channel_op(int cmd, void *arg); > > -/* Inline version. To be used only on linear space (kernel space). */ > -static inline struct xencomm_handle * > -xencomm_create_inline(void *buffer) > -{ > - unsigned long paddr; > +int HYPERVISOR_xen_version(int cmd, void *arg); > > - paddr = xencomm_vaddr_to_paddr((unsigned long)buffer); > - return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG); > -} > +int HYPERVISOR_console_io(int cmd, int count, char *str); > > -static inline int > -xencomm_arch_event_channel_op(int cmd, void *arg) > -{ > - int rc; > - struct xencomm_handle *newArg; > +int HYPERVISOR_sched_op_compat(int cmd, unsigned long arg); > > - newArg = xencomm_create_inline(arg); > - rc = _hypercall2(int, event_channel_op, cmd, newArg); > - if (unlikely(rc == -ENOSYS)) { > - struct evtchn_op op; > +int HYPERVISOR_sched_op(int cmd, void *arg); > > - op.cmd = SWAP(cmd); > - memcpy(&op.u, arg, sizeof(op.u)); > - rc = _hypercall1(int, event_channel_op_compat, &op); > - } > - return rc; > -} > -#define HYPERVISOR_event_channel_op xencomm_arch_event_channel_op > - > -static inline int > -xencomm_arch_xen_version(int cmd, struct xencomm_handle *arg) > -{ > - return _hypercall2(int, xen_version, cmd, arg); > -} > - > -static inline int > -xencomm_arch_xen_feature(int cmd, struct xencomm_handle *arg) > -{ > - struct xencomm_handle *newArg; > - > - newArg = xencomm_create_inline(arg); > - return _hypercall2(int, xen_version, cmd, newArg); > -} > - > -static inline int > -HYPERVISOR_xen_version(int cmd, void *arg) > -{ > - switch(cmd) { > - case XENVER_version: > - return xencomm_arch_xen_version(cmd, 0); > - case XENVER_get_features: > - return xencomm_arch_xen_feature(cmd, arg); > - default: > - return -1; > - } > -} > - > -static inline int > -xencomm_arch_console_io(int cmd, int count, char *str) > -{ > - struct xencomm_handle *newStr; > - > - newStr = xencomm_create_inline(str); > - return _hypercall3(int, console_io, cmd, count, newStr); > -} > - > - > -#define HYPERVISOR_console_io xencomm_arch_console_io > - > -static inline int > -HYPERVISOR_sched_op_compat(int cmd, unsigned long arg) > -{ > - return _hypercall2(int, sched_op_compat, cmd, arg); > -} > - > -static inline int > -xencomm_arch_sched_op(int cmd, void *arg) > -{ > - struct xencomm_handle *newArg; > - > - newArg = xencomm_create_inline(arg); > - return _hypercall2(int, sched_op, cmd, newArg); > -} > - > -#define HYPERVISOR_sched_op xencomm_arch_sched_op > - > -static inline int > -xencomm_arch_callback_op(int cmd, void *arg) > -{ > - struct xencomm_handle *newArg; > - > - newArg = xencomm_create_inline(arg); > - return _hypercall2(int, callback_op, cmd, newArg); > -} > -#define HYPERVISOR_callback_op xencomm_arch_callback_op > - > -static inline int > -xencomm_arch_hypercall_grant_table_op(unsigned int cmd, > - struct xencomm_handle *uop, > - unsigned int count) > -{ > - return _hypercall3(int, grant_table_op, cmd, uop, count); > -} > +int HYPERVISOR_callback_op(int cmd, void *arg); > > int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int > count); > > -static inline int > -HYPERVISOR_opt_feature(void *arg) > -{ > - struct xencomm_handle *new_arg; > +int HYPERVISOR_opt_feature(void *arg); > > - new_arg = xencomm_create_inline(arg); > +int HYPERVISOR_suspend(unsigned long srec); > > - return _hypercall1(int, opt_feature, new_arg); > -} > +int HYPERVISOR_shutdown(unsigned int reason); > > #endif /* __HYPERCALL_H__ */ > diff -r 9bc00e9716cd -r bc50b227afe3 extras/mini-os/include/ia64/os.h > --- a/extras/mini-os/include/ia64/os.h Fri Nov 07 19:34:59 2008 +0900 > +++ b/extras/mini-os/include/ia64/os.h Mon Nov 17 09:19:45 2008 +0100 > @@ -192,21 +192,6 @@ __synch_cmpxchg(volatile void *ptr, uint > > extern shared_info_t *HYPERVISOR_shared_info; > > -static inline int > -HYPERVISOR_shutdown(unsigned int reason) > -{ > - struct sched_shutdown sched_shutdown = { > - .reason = reason > - }; > - > - int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); > - > - if (rc == -ENOSYS) > - rc = HYPERVISOR_sched_op_compat(SCHEDOP_shutdown, reason); > - > - return rc; > -} > - > > /* > * This code is from the originally os.h and should be put in a > _______________________________________________ > Xen-ia64-devel mailing list > Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-ia64-devel -- yamahata _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |