[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Clean up xenstore/console shared page initialisation, which is
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 20bd6f55b813aa145fff73891fcdd9a1c4db9b8c # Parent 8ee7df2c18d14d254c940ac5bd514a59295f869c Clean up xenstore/console shared page initialisation, which is now handled solely by the domain builder. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> diff -r 8ee7df2c18d1 -r 20bd6f55b813 linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c --- a/linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c Mon Nov 14 10:35:50 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c Mon Nov 14 10:36:42 2005 @@ -30,6 +30,12 @@ return mfn_to_virt(xen_start_info->console_mfn); } +static inline void notify_daemon(void) +{ + /* Use evtchn: this is called early, before irq is set up. */ + notify_remote_via_evtchn(xen_start_info->console_evtchn); +} + int xencons_ring_send(const char *data, unsigned len) { int sent = 0; @@ -47,8 +53,7 @@ wmb(); intf->out_prod = prod; - /* Use evtchn: this is called early, before irq is set up. */ - notify_remote_via_evtchn(xen_start_info->console_evtchn); + notify_daemon(); return sent; } @@ -70,8 +75,10 @@ 1, regs); } - wmb(); + mb(); intf->in_cons = cons; + + notify_daemon(); return IRQ_HANDLED; } @@ -102,6 +109,9 @@ xencons_irq = err; + /* In case we have in-flight data after save/restore... */ + notify_daemon(); + return 0; } diff -r 8ee7df2c18d1 -r 20bd6f55b813 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Mon Nov 14 10:35:50 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c Mon Nov 14 10:36:42 2005 @@ -36,7 +36,7 @@ #include <asm-xen/xenbus.h> #include "xenbus_comms.h" -static int xenbus_irq = 0; +static int xenbus_irq; extern void xenbus_probe(void *); extern int xenstored_ready; @@ -51,7 +51,7 @@ static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs) { - if(unlikely(xenstored_ready == 0)) { + if (unlikely(xenstored_ready == 0)) { xenstored_ready = 1; schedule_work(&probe_work); } @@ -188,9 +188,6 @@ } xenbus_irq = err; - - /* FIXME zero out page -- domain builder should probably do this*/ - memset(mfn_to_virt(xen_start_info->store_mfn), 0, PAGE_SIZE); return 0; } diff -r 8ee7df2c18d1 -r 20bd6f55b813 tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Mon Nov 14 10:35:50 2005 +++ b/tools/libxc/xc_linux_build.c Mon Nov 14 10:36:42 2005 @@ -619,7 +619,9 @@ *store_mfn = page_array[(vstoreinfo_start-dsi.v_start) >> PAGE_SHIFT]; *console_mfn = page_array[(vconsole_start-dsi.v_start) >> PAGE_SHIFT]; - + if ( xc_clear_domain_page(xc_handle, dom, *store_mfn) || + xc_clear_domain_page(xc_handle, dom, *console_mfn) ) + goto error_out; start_info = xc_map_foreign_range( xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, diff -r 8ee7df2c18d1 -r 20bd6f55b813 tools/libxc/xc_linux_restore.c --- a/tools/libxc/xc_linux_restore.c Mon Nov 14 10:35:50 2005 +++ b/tools/libxc/xc_linux_restore.c Mon Nov 14 10:36:42 2005 @@ -11,8 +11,6 @@ #include "xg_private.h" #include "xg_save_restore.h" - - /* max mfn of the whole machine */ static uint32_t max_mfn; diff -r 8ee7df2c18d1 -r 20bd6f55b813 tools/libxc/xc_private.c --- a/tools/libxc/xc_private.c Mon Nov 14 10:35:50 2005 +++ b/tools/libxc/xc_private.c Mon Nov 14 10:36:42 2005 @@ -336,6 +336,19 @@ return 0; } +int xc_clear_domain_page(int xc_handle, + uint32_t domid, + unsigned long dst_pfn) +{ + void *vaddr = xc_map_foreign_range( + xc_handle, domid, PAGE_SIZE, PROT_WRITE, dst_pfn); + if ( vaddr == NULL ) + return -1; + memset(vaddr, 0, PAGE_SIZE); + munmap(vaddr, PAGE_SIZE); + return 0; +} + unsigned long xc_get_filesz(int fd) { uint16_t sig; diff -r 8ee7df2c18d1 -r 20bd6f55b813 tools/libxc/xc_vmx_build.c --- a/tools/libxc/xc_vmx_build.c Mon Nov 14 10:35:50 2005 +++ b/tools/libxc/xc_vmx_build.c Mon Nov 14 10:36:42 2005 @@ -495,6 +495,9 @@ } *store_mfn = page_array[(v_end-2) >> PAGE_SHIFT]; + if ( xc_clear_domain_page(xc_handle, dom, *store_mfn) ) + goto error_out; + shared_page_frame = (v_end - PAGE_SIZE) >> PAGE_SHIFT; if ((e820_page = xc_map_foreign_range( diff -r 8ee7df2c18d1 -r 20bd6f55b813 tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Mon Nov 14 10:35:50 2005 +++ b/tools/libxc/xenctrl.h Mon Nov 14 10:36:42 2005 @@ -424,6 +424,9 @@ int xc_copy_to_domain_page(int xc_handle, uint32_t domid, unsigned long dst_pfn, void *src_page); +int xc_clear_domain_page(int xc_handle, uint32_t domid, + unsigned long dst_pfn); + int xc_ia64_copy_to_domain_pages(int xc_handle, uint32_t domid, void* src_page, unsigned long dst_pfn, int nr_pages); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |