This patch add support to get xenstore buffer in unmodified vmx guest. mfn_to_virt it not available in unmodified kernel so use an external symbol for it. This symbol will be exported by event channel pci device driver. The driver will use ioremap to get the access to this page. Signed-off-by: Xiaofeng Ling <xiaofeng.ling@intel.com> Signed-off-by: Arun Sharma <arun.sharma@intel.com> diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Fri Sep 2 22:47:27 2005 @@ -48,12 +48,12 @@ static inline struct ringbuf_head *outbuf(void) { - return mfn_to_virt(xen_start_info.store_mfn); + return XENSTORE_BUF; } static inline struct ringbuf_head *inbuf(void) { - return mfn_to_virt(xen_start_info.store_mfn) + PAGE_SIZE/2; + return XENSTORE_BUF + PAGE_SIZE/2; } static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs) @@ -218,7 +218,7 @@ } /* FIXME zero out page -- domain builder should probably do this*/ - memset(mfn_to_virt(xen_start_info.store_mfn), 0, PAGE_SIZE); + memset(XENSTORE_BUF, 0, PAGE_SIZE); return 0; } diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Fri Sep 2 22:47:27 2005 @@ -38,4 +38,11 @@ int xs_input_avail(void); extern wait_queue_head_t xb_waitq; +#ifdef CONFIG_XEN +#define XENSTORE_BUF mfn_to_virt(xen_start_info.store_mfn) +#else +extern void *shared_xenstore_buf; +#define XENSTORE_BUF shared_xenstore_buf +#endif + #endif /* _XENBUS_COMMS_H */ diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Fri Sep 2 22:47:27 2005 @@ -648,4 +648,5 @@ return 0; } -postcore_initcall(xenbus_probe_init); +module_init(xenbus_probe_init); +MODULE_LICENSE("GPL"); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Rusty Russell
2005-Sep-05 11:14 UTC
Re: [Xen-devel] [PATCH] get xenstore buffer in vmx guest
On Mon, 2005-09-05 at 16:38 +0800, Xiaofeng Ling wrote:> static inline struct ringbuf_head *outbuf(void) > { > - return mfn_to_virt(xen_start_info.store_mfn); > + return XENSTORE_BUF; > }Just a minor thing: I''d really prefer an inline function called xenstore_page_virt() or something, rather than a macro which looks like a constant. Thanks! Rusty. -- A bad analogy is like a leaky screwdriver -- Richard Braakman _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ling, Xiaofeng
2005-Sep-05 14:22 UTC
RE: [Xen-devel] [PATCH] get xenstore buffer in vmx guest
Rusty Russell <mailto:rusty@rustcorp.com.au> wrote:> On Mon, 2005-09-05 at 16:38 +0800, Xiaofeng Ling wrote: >> static inline struct ringbuf_head *outbuf(void) >> { >> - return mfn_to_virt(xen_start_info.store_mfn); >> + return XENSTORE_BUF; >> } > > Just a minor thing: I''d really prefer an inline function called > xenstore_page_virt() or something, rather than a macro which looks > like a constant.ok, so the new patch will be: diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Mon Sep 5 22:15:45 2005 @@ -48,12 +48,12 @@ static inline struct ringbuf_head *outbuf(void) { - return mfn_to_virt(xen_start_info.store_mfn); + return xenstore_page_virt(); } static inline struct ringbuf_head *inbuf(void) { - return mfn_to_virt(xen_start_info.store_mfn) + PAGE_SIZE/2; + return xenstore_page_virt() + PAGE_SIZE/2; } static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs) @@ -218,7 +218,7 @@ } /* FIXME zero out page -- domain builder should probably do this*/ - memset(mfn_to_virt(xen_start_info.store_mfn), 0, PAGE_SIZE); + memset(xenstore_page_virt(), 0, PAGE_SIZE); return 0; } diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Mon Sep 5 22:15:45 2005 @@ -38,4 +38,17 @@ int xs_input_avail(void); extern wait_queue_head_t xb_waitq; +#ifdef CONFIG_XEN +static inline void *xenstore_page_virt(void) +{ + return (void*)mfn_to_virt(xen_start_info.store_mfn); +} +#else +extern void *shared_xenstore_buf; +static inline void *xenstore_page_virt(void) +{ + return shared_xenstore_buf; +} +#endif + #endif /* _XENBUS_COMMS_H */ diff -r 287d36b46fa3 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Tue Aug 30 20:36:49 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Mon Sep 5 22:18:22 2005 @@ -648,4 +648,5 @@ return 0; } -postcore_initcall(xenbus_probe_init); +module_init(xenbus_probe_init); +MODULE_LICENSE("GPL"); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Rusty Russell
2005-Sep-06 00:15 UTC
RE: [Xen-devel] [PATCH] get xenstore buffer in vmx guest
On Mon, 2005-09-05 at 22:22 +0800, Ling, Xiaofeng wrote:> Rusty Russell <mailto:rusty@rustcorp.com.au> wrote: > > Just a minor thing: I''d really prefer an inline function called > > xenstore_page_virt() or something, rather than a macro which looks > > like a constant. > ok, so the new patch will be:> --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Tue Aug 30 20:36:49 2005 > +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h Mon Sep 5 22:15:45 2005 > @@ -38,4 +38,17 @@ > int xs_input_avail(void); > extern wait_queue_head_t xb_waitq; > > +#ifdef CONFIG_XEN > +static inline void *xenstore_page_virt(void) > +{ > + return (void*)mfn_to_virt(xen_start_info.store_mfn); > +}Great! I think the (void*) cast is redundant though?> -postcore_initcall(xenbus_probe_init); > +module_init(xenbus_probe_init); > +MODULE_LICENSE("GPL");This should probably be: MODULE_LICENSE("Dual BSD/GPL"); Cheers, Rusty. -- A bad analogy is like a leaky screwdriver -- Richard Braakman _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Xiaofeng Ling
2005-Sep-06 05:29 UTC
Re: [Xen-devel] [PATCH] get xenstore buffer in vmx guest
Rusty Russell wrote:> On Mon, 2005-09-05 at 22:22 +0800, Ling, Xiaofeng wrote: > >>Rusty Russell <mailto:rusty@rustcorp.com.au> wrote: >>+#ifdef CONFIG_XEN >>+static inline void *xenstore_page_virt(void) >>+{ >>+ return (void*)mfn_to_virt(xen_start_info.store_mfn); >>+} > > > Great! I think the (void*) cast is redundant though?yes> >>-postcore_initcall(xenbus_probe_init); >>+module_init(xenbus_probe_init); >>+MODULE_LICENSE("GPL"); > > > This should probably be: > MODULE_LICENSE("Dual BSD/GPL");ok. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel