diff options
author | rminnich@lanl.gov[iap10] <rminnich@lanl.gov[iap10]> | 2005-03-03 16:07:46 +0000 |
---|---|---|
committer | rminnich@lanl.gov[iap10] <rminnich@lanl.gov[iap10]> | 2005-03-03 16:07:46 +0000 |
commit | 52da82dbd60e024458d4c345692577efb6e8a8a3 (patch) | |
tree | d0e8a264c3605e4e27a9d2c2ab47f7671ac2a245 | |
parent | 7554eb1321a25e9db13a381cf52a5a8842e1a350 (diff) | |
download | xen-52da82dbd60e024458d4c345692577efb6e8a8a3.tar.gz xen-52da82dbd60e024458d4c345692577efb6e8a8a3.tar.bz2 xen-52da82dbd60e024458d4c345692577efb6e8a8a3.zip |
bitkeeper revision 1.1159.258.19 (42273652yPWGOWH6C8w45TOchk7Jog)
This patch enables argument passing to plan 9 domains, so that users can
now have parameters for things like Venti etc.
Signed-off-by: ron minnich <rminnich@lanl.gov>
Signed-off-by: ian.pratt@cl.cam.ac.uk
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rwxr-xr-x | tools/libxc/xc_plan9_build.c | 21 |
2 files changed, 18 insertions, 4 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 44556798fe..d1c20d6e5f 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -46,6 +46,7 @@ mwilli2@equilibrium.research.intel-research.net mwilli2@pug.(none) rac61@labyrinth.cl.cam.ac.uk rgr22@boulderdash.cl.cam.ac.uk +rminnich@lanl.gov rn@wyvis.camb.intel-research.net rn@wyvis.research.intel-research.net rneugeba@wyvis.research diff --git a/tools/libxc/xc_plan9_build.c b/tools/libxc/xc_plan9_build.c index 33c9a54914..fc67a293ea 100755 --- a/tools/libxc/xc_plan9_build.c +++ b/tools/libxc/xc_plan9_build.c @@ -125,7 +125,8 @@ static int unsigned long tot_pages, unsigned long *virt_load_addr, unsigned long *ksize, unsigned long *symtab_addr, unsigned long *symtab_len, - unsigned long *first_data_page, unsigned long *pdb_page); + unsigned long *first_data_page, unsigned long *pdb_page, + const char *cmdline); #define P9ROUND (P9SIZE / 8) @@ -230,7 +231,7 @@ setup_guestos(int xc_handle, if (loadp9image(kernel_gfd, xc_handle, dom, cpage_array, tot_pages, virt_load_addr, &ksize, &symtab_addr, &symtab_len, - &first_data_page, &first_page_after_kernel)) + &first_data_page, &first_page_after_kernel, cmdline)) goto error_out; DPRINTF(("First data page is 0x%lx\n", first_data_page)); DPRINTF(("First page after kernel is 0x%lx\n", @@ -623,7 +624,7 @@ xc_plan9_build(int xc_handle, * Plan 9 memory layout (initial) * ---------------- * | info from xen| @0 - * ---------------- + * ---------------|<--- boot args (start at 0x1200 + 64) * | stack | * ----------------<--- page 2 * | empty | @@ -658,7 +659,8 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, unsigned long tot_pages, unsigned long *virt_load_addr, unsigned long *ksize, unsigned long *symtab_addr, unsigned long *symtab_len, - unsigned long *first_data_page, unsigned long *pdb_page) + unsigned long *first_data_page, unsigned long *pdb_page, + const char *cmdline) { unsigned long datapage; Exec ehdr; @@ -669,6 +671,7 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, PAGE *image = 0; unsigned long image_tot_pages = 0; unsigned long textround; + static PAGE args; ret = -1; @@ -736,6 +739,16 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, image, image_tot_pages * 4096, page_array, 0x100); DPRINTF(("done copying kernel to guest memory\n")); + /* now do the bootargs */ + /* in plan 9, the x=y bootargs start at 0x1200 + 64 in real memory */ + /* we'll copy to page 1, so we offset into the page struct at + * 0x200 + 64 + */ + memset(&args, 0, sizeof(args)); + memcpy(&args.data[0x200 + 64], cmdline, strlen(cmdline)); + printf("Copied :%s: to page for args\n", cmdline); + ret = memcpy_toguest(xc_handle, dom, &args, sizeof(args), page_array,1); + dumpit(xc_handle, dom, 0 /*0x100000>>12*/, 4, page_array) ; out: if (image) free(image); |