WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: dom0 bootstrap for xenstore

On Thu, 2005-06-16 at 06:17 +0100, Keir Fraser wrote:
> > I suggested that we simply mmap /dev/kmem for the xenstored to access
> > the domain0 page for the moment.  That doesn't work: we'll do something
> > else.
> 
> Just use xc_map_foreign_range(), as you would for mapping any other 
> domain's xenstore page.

So here's my patch against latest bk, including test program but we have
an issue.  On unmap, I hit the BUG_ON() on mm/rmap.c:482.  Is this some
issue with using xc_map_foreign_range() on non-foreign pages?

Rusty.
diff -urpN --exclude TAGS -X 
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal 
xen/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c 
xen-dom0-store/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c
--- xen/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c   2005-06-16 
18:03:10.000000000 +1000
+++ xen-dom0-store/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c        
2005-06-16 15:12:49.000000000 +1000
@@ -196,6 +196,34 @@ static int privcmd_ioctl(struct inode *i
     }
     break;
 
+    case IOCTL_PRIVCMD_INITDOMAIN_STORE:
+    {
+        extern int do_xenbus_probe(void*);
+
+        if (xen_start_info.store_evtchn != 0) {
+           ret = -EINVAL;
+           break;
+       }
+
+       /* Allocate page. */
+       xen_start_info.store_page = get_zeroed_page(GFP_KERNEL);
+       if (!xen_start_info.store_page) {
+           ret = -ENOMEM;
+           break;
+       }
+
+       /* Initial connect. Setup channel and page. */
+       xen_start_info.store_evtchn = data;
+       ret = pfn_to_mfn(virt_to_phys((void *)xen_start_info.store_page)
+                        >> PAGE_SHIFT);
+
+       strcpy((char *)xen_start_info.store_page, "HELLO THERE!");
+
+       /* We'll return then this will wait for daemon to answer */
+       //kthread_run(do_xenbus_probe, NULL, "xenbus_probe");
+    }
+    break;
+
     default:
         ret = -EINVAL;
         break;
diff -urpN --exclude TAGS -X 
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal 
xen/linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h 
xen-dom0-store/linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h
--- xen/linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h  
2005-06-16 18:03:13.000000000 +1000
+++ 
xen-dom0-store/linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h   
    2005-06-16 13:47:48.000000000 +1000
@@ -84,5 +84,7 @@ typedef struct privcmd_blkmsg
     _IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
 #define IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN \
     _IOC(_IOC_READ, 'P', 4, sizeof(unsigned long))
+#define IOCTL_PRIVCMD_INITDOMAIN_STORE \
+    _IOC(_IOC_READ, 'P', 5, 0)
 
 #endif /* __PRIVCMD_H__ */
diff -urpN --exclude TAGS -X 
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal 
xen/tools/xenstore/Makefile xen-dom0-store/tools/xenstore/Makefile
--- xen/tools/xenstore/Makefile 2005-06-16 18:03:27.000000000 +1000
+++ xen-dom0-store/tools/xenstore/Makefile      2005-06-16 14:46:51.000000000 
+1000
@@ -82,18 +82,22 @@ stresstest: xs_stress xenstored_test
        rm -rf $(TESTDIR)/store
        export $(TESTENV); PID=`./xenstored_test --output-pid`; ./xs_stress 
10000; ret=$$?; kill $$PID; exit $$ret
 
+xs_dom0_test: xs_dom0_test.o utils.o
+       $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxc -o $@
+
 TAGS:
        etags `find . -name '*.[ch]'`
 
 tarball: clean
        cd .. && tar -c -j -v -h -f xenstore.tar.bz2 xenstore/
 
-install: xenstored libxenstore.a
+install: xenstored libxenstore.a xs_dom0_test
        $(INSTALL_DIR) -p $(DESTDIR)/var/run/xenstored
        $(INSTALL_DIR) -p $(DESTDIR)/var/lib/xenstored
        $(INSTALL_DIR) -p $(DESTDIR)/usr/sbin
        $(INSTALL_DIR) -p $(DESTDIR)/usr/include
        $(INSTALL_PROG) xenstored $(DESTDIR)/usr/sbin
+       $(INSTALL_PROG) xs_dom0_test $(DESTDIR)/usr/sbin
        $(INSTALL_DIR) -p $(DESTDIR)/usr/$(LIBDIR)
        $(INSTALL_DATA) libxenstore.a $(DESTDIR)/usr/$(LIBDIR)
        $(INSTALL_DATA) xs.h $(DESTDIR)/usr/include
diff -urpN --exclude TAGS -X 
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal 
xen/tools/xenstore/xs_dom0_test.c xen-dom0-store/tools/xenstore/xs_dom0_test.c
--- xen/tools/xenstore/xs_dom0_test.c   1970-01-01 10:00:00.000000000 +1000
+++ xen-dom0-store/tools/xenstore/xs_dom0_test.c        2005-06-16 
16:51:00.000000000 +1000
@@ -0,0 +1,43 @@
+/* Test introduction of domain 0 */
+#include <linux/ioctl.h>
+#include <sys/ioctl.h>
+#include "xs.h"
+#include "utils.h"
+#include <xc.h>
+#include <xen/linux/privcmd.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+int main()
+{
+       int h, local = 0, kernel = 0;
+       long err;
+       void *page;
+
+       h = xc_interface_open();
+       if (h < 0)
+               barf_perror("Failed to open xc");
+
+       if (xc_evtchn_bind_interdomain(h, DOMID_SELF, 0, &local, &kernel) != 0)
+               barf_perror("Failed to bind interdomain");
+
+       printf("Got ports %i & %i\n", local, kernel);
+
+       err = ioctl(h, IOCTL_PRIVCMD_INITDOMAIN_STORE, kernel);
+       if (err < 0)
+               barf_perror("Failed to initialize store");
+       printf("Got mfn %li\n", err);
+
+       page = xc_map_foreign_range(h, 0, getpagesize(), PROT_READ|PROT_WRITE,
+                                   err);
+       if (!page)
+               barf_perror("Failed to map page %li", err);
+       printf("Mapped page at %p\n", page);
+       printf("Page says %s\n", (char *)page);
+       munmap(page, getpagesize());
+       printf("unmapped\n");
+       
+       return 0;
+}
+       

-- 
A bad analogy is like a leaky screwdriver -- Richard Braakman


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel