From mboxrd@z Thu Jan 1 00:00:00 1970 From: veerasena reddy Subject: How to share a page between dom0 and Hypervisror Date: Mon, 6 Jun 2011 18:58:46 +0530 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1725905424==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --===============1725905424== Content-Type: multipart/alternative; boundary=0016e646916e434ad604a50b1523 --0016e646916e434ad604a50b1523 Content-Type: text/plain; charset=ISO-8859-1 Hi, In one of experiments, I need to map a page allocated in dom0 to hypervisor and access/modify the page contents in hypervisor. I tried this by adding a new hypercall, and pass the GPA of the page to its handler in hypervisor which does the following: ==================== Hypercall handler ================ DO(my_rd_wr)(int cmd, XEN_GUEST_HANDLE(void) arg) { unsigned long dom0_gpa; unsigned long gmfn; unsigned long mfn; void *my_rd_wr_page; struct domain *d = current->domain; printk(XENLOG_G_DEBUG "%s:L%u: Entered\n", __FUNCTION__, __LINE__); switch( cmd ) { case 0x1: if ( copy_from_guest(&dom0_gpa, arg, 1) ) return -EFAULT; printk(XENLOG_G_DEBUG "%s:L%u: GPA read 0x%lx\n", __FUNCTION__, __LINE__, dom0_gpa); gmfn = dom0_gpa >> 12; mfn = gmfn_to_mfn(d, gmfn); if ( !mfn_valid(mfn) || !get_page_and_type(mfn_to_page(mfn), d, PGT_writable_page) ) { printk(XENLOG_G_WARNING "Bad GMFN %lx (MFN %lx)\n", gmfn, mfn); return 0; } my_rd_wr_page = map_domain_page(mfn); /* Do your initialization of the page here; just write '2' in all bytes */ memset(my_rd_wr_page, 2, 1<<12); unmap_domain_page(my_rd_wr_page); put_page_and_type(mfn_to_page(mfn)); break; default: printk(XENLOG_G_DEBUG "%s:L%u: unhandled\n", __FUNCTION__, __LINE__); break; } return 0; } ============================ I have allocated a page from a sample dom0 kernel module (using vmalloc()), and passed the physical address of it to hypercall. void my_rd_wr_page_setup(void) { unsigned long my_gpa; int err; char *my_rd_wr_page = NULL; my_rd_wr_page = __vmalloc( 1 * PAGE_SIZE, GFP_KERNEL | __GFP_HIGHMEM, __pgprot(__PAGE_KERNEL & ~_PAGE_NX)); my_gpa = vmalloc_to_pfn((char *)&my_rd_wr_page) << PAGE_SHIFT; printk("%s: Before Hypercall; my_rd_wr_page=%p my_gpa=%lx\n", __FUNCTION__, my_rd_wr_page, my_gpa); memset(my_rd_wr_page, 0, PAGE_SIZE); err = _hypercall2(int, my_rd_wr, 0x1, (void *)&my_gpa); printk("%s: Hypercall returned; errno-%d\n", __FUNCTION__, err); } When I loaded the module, the following error has been observed: =============== On dom0 =========== xen_features[0].writable_page_tables = 0 xen_features[0].writable_descriptor_tables = 0 xen_features[0].auto_translated_physmap = 0 xen_features[0].supervisor_mode_kernel = 0 xen_features[0].pae_pgdir_above_4gb = 1 my_rd_wr_page_setup: Before Hypercall; my_rd_wr_page=ffffc90010f7e000 my_gpa=d7cf000 my_rd_wr_page_setup: Hypercall returned; errno-0 ===================================== On hypervisor: (XEN) do_my_rd_wr:L178: GPA read 0xd7cf000 (XEN) mm.c:2037:d0 Error pfn d7cf: rd=ffff8300773c0000, od=0000000000000000, caf=180000000000000, taf=0000000000000000 (XEN) Bad GMFN d7cf (MFN d7cf) ==================================== >>From the dom0 messages (where i read the features), it looks like writable_page_tables is not set. Is it causing the issue in my case. Could you please advice if i did something wrong here. You are most welcome if you have completely different approach which works; Thanks a lot in advance Regards, VSR. --0016e646916e434ad604a50b1523 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: base64 SGksPGJyPjxicj5JbiBvbmUgb2YgZXhwZXJpbWVudHMsIEkgbmVlZCB0byBtYXAgYSBwYWdlIGFs bG9jYXRlZCBpbiBkb20wIHRvIGh5cGVydmlzb3IgYW5kIGFjY2Vzcy9tb2RpZnkgdGhlIHBhZ2Ug Y29udGVudHMgaW4gaHlwZXJ2aXNvci48YnI+SSB0cmllZCB0aGlzIGJ5IGFkZGluZyBhIG5ldyBo eXBlcmNhbGwsIGFuZCBwYXNzIHRoZSBHUEEgb2YgdGhlIHBhZ2UgdG8gaXRzIGhhbmRsZXIgaW4g aHlwZXJ2aXNvciB3aGljaCBkb2VzIHRoZSBmb2xsb3dpbmc6PGJyPgo8YnI+PT09PT09PT09PT09 PT09PT09PT0gSHlwZXJjYWxsIGhhbmRsZXKgID09PT09PT09PT09PT09PT08YnI+RE8obXlfcmRf d3IpKGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEUodm9pZCkgYXJnKTxicj57PGJyPqCgoKCgoKAg dW5zaWduZWQgbG9uZyBkb20wX2dwYTs8YnI+oKCgoKCgoCB1bnNpZ25lZCBsb25nIGdtZm47PGJy PqCgoKCgoKAgdW5zaWduZWQgbG9uZyBtZm47PGJyPqCgoKCgoKAgdm9pZCAqbXlfcmRfd3JfcGFn ZTs8YnI+CqCgoKCgoKAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnJlbnQtJmd0O2RvbWFpbjs8YnI+ PGJyPqCgoKCgoKAgcHJpbnRrKFhFTkxPR19HX0RFQlVHICZxdW90OyVzOkwldTogRW50ZXJlZFxu JnF1b3Q7LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTs8YnI+oKCgoKCgoCBzd2l0Y2goIGNtZCAp PGJyPqCgoKCgoKAgezxicj6goKCgoKCgoKCgoKCgoKAgY2FzZSAweDE6PGJyPqCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgIGlmICggY29weV9mcm9tX2d1ZXN0KCZhbXA7ZG9tMF9ncGEsIGFyZywgMSkg KTxicj4KoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCByZXR1cm4gLUVGQVVMVDs8YnI+ oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgcHJpbnRrKFhFTkxPR19HX0RFQlVHICZxdW90OyVzOkwl dTogR1BBIHJlYWQgMHglbHhcbiZxdW90Oyw8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKAgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgZG9tMF9ncGEpOzxi cj4KPGJyPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIGdtZm4gPSBkb20wX2dwYSAmZ3Q7Jmd0OyAx Mjs8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgbWZuID0gZ21mbl90b19tZm4oZCwgZ21mbik7 PGJyPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIGlmICggIW1mbl92YWxpZChtZm4pIHx8PGJyPqCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgIWdldF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdl KG1mbiksIGQsIFBHVF93cml0YWJsZV9wYWdlKSApPGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oCB7PGJyPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgcHJpbnRrKFhFTkxPR19HX1dB Uk5JTkc8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgICZxdW90O0Jh ZCBHTUZOICVseCAoTUZOICVseClcbiZxdW90OywgZ21mbiwgbWZuKTs8YnI+oKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoCByZXR1cm4gMDs8YnI+CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg IH08YnI+oKCgoKCgoKCgoKCgoKCgIDxicj6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBteV9yZF93 cl9wYWdlID0gbWFwX2RvbWFpbl9wYWdlKG1mbik7PGJyPjxicj6goKCgoKCgoKCgoKCgoKCgoKCg oKCgoCAvKiBEbyB5b3VyIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWdlIGhlcmU7IGp1c3Qgd3Jp dGUgJiMzOTsyJiMzOTsgaW4gYWxsIGJ5dGVzICovPGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oCBtZW1zZXQobXlfcmRfd3JfcGFnZSwgMiwgMSZsdDsmbHQ7MTIpOzxicj48YnI+oKCgoKCgoKCg oKCgoKCgoKCgoKCgoKAgdW5tYXBfZG9tYWluX3BhZ2UobXlfcmRfd3JfcGFnZSk7PGJyPqCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgIHB1dF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdlKG1mbikpOzxi cj6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBicmVhazsgPGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoCA8YnI+oKCgoKCgoKCgoKCgoKCgIGRlZmF1bHQ6PGJyPqCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgIHByaW50ayhYRU5MT0dfR19ERUJVRyAmcXVvdDslczpMJXU6IHVuaGFuZGxlZFxuJnF1b3Q7 LDxicj6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBfX0ZV TkNUSU9OX18sIF9fTElORV9fKTs8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgYnJlYWs7PGJy PgqgoKCgoKCgIH08YnI+PGJyPqCgoKCgoKAgcmV0dXJuIDA7PGJyPn08YnI+PT09PT09PT09PT09 PT09PT09PT09PT09PT09PTxicj48YnI+SSBoYXZlIGFsbG9jYXRlZCBhIHBhZ2UgZnJvbSBhIHNh bXBsZSBkb20wIGtlcm5lbCBtb2R1bGUgKHVzaW5nIHZtYWxsb2MoKSksIGFuZCBwYXNzZWQgdGhl IHBoeXNpY2FsIGFkZHJlc3Mgb2YgaXQgdG8gaHlwZXJjYWxsLjxicj48YnI+dm9pZCBteV9yZF93 cl9wYWdlX3NldHVwKHZvaWQpPGJyPgp7PGJyPqCgoCB1bnNpZ25lZCBsb25nIG15X2dwYTs8YnI+ oKCgIGludCBlcnI7PGJyPqCgoCBjaGFyICpteV9yZF93cl9wYWdlID0gTlVMTDs8YnI+PGJyPqCg oCBteV9yZF93cl9wYWdloKCgoCA9IF9fdm1hbGxvYyg8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCg oKAgMSAqIFBBR0VfU0laRSw8YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgR0ZQX0tFUk5FTCB8 IF9fR0ZQX0hJR0hNRU0sPGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBfX3BncHJvdChfX1BB R0VfS0VSTkVMICZhbXA7IH5fUEFHRV9OWCkpOzxicj48YnI+oKCgIG15X2dwYSA9IHZtYWxsb2Nf dG9fcGZuKChjaGFyICopJmFtcDtteV9yZF93cl9wYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOzxi cj6goKAgcHJpbnRrKCZxdW90OyVzOiBCZWZvcmUgSHlwZXJjYWxsOyBteV9yZF93cl9wYWdlPSVw IG15X2dwYT0lbHhcbiZxdW90OywgX19GVU5DVElPTl9fLCBteV9yZF93cl9wYWdlLCBteV9ncGEp Ozxicj4KoKCgIG1lbXNldChteV9yZF93cl9wYWdlLCAwLCBQQUdFX1NJWkUpOzxicj6goKAgZXJy ID0gX2h5cGVyY2FsbDIoaW50LCBteV9yZF93ciwgMHgxLCAodm9pZCAqKSZhbXA7bXlfZ3BhKTs8 YnI+oKCgIHByaW50aygmcXVvdDslczogSHlwZXJjYWxsIHJldHVybmVkOyBlcnJuby0lZFxuJnF1 b3Q7LCBfX0ZVTkNUSU9OX18sIGVycik7PGJyPn08YnI+PGJyPjxicj5XaGVuIEkgbG9hZGVkIHRo ZSBtb2R1bGUsIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFzIGJlZW4gb2JzZXJ2ZWQ6PGJyPgo8YnI+ PT09PT09PT09PT09PT09IE9uIGRvbTAgPT09PT09PT09PT08YnI+eGVuX2ZlYXR1cmVzWzBdLndy aXRhYmxlX3BhZ2VfdGFibGVzID0gMDxicj54ZW5fZmVhdHVyZXNbMF0ud3JpdGFibGVfZGVzY3Jp cHRvcl90YWJsZXMgPSAwPGJyPnhlbl9mZWF0dXJlc1swXS5hdXRvX3RyYW5zbGF0ZWRfcGh5c21h cCA9IDA8YnI+eGVuX2ZlYXR1cmVzWzBdLnN1cGVydmlzb3JfbW9kZV9rZXJuZWwgPSAwPGJyPgp4 ZW5fZmVhdHVyZXNbMF0ucGFlX3BnZGlyX2Fib3ZlXzRnYiA9IDE8YnI+bXlfcmRfd3JfcGFnZV9z ZXR1cDogQmVmb3JlIEh5cGVyY2FsbDsgbXlfcmRfd3JfcGFnZT1mZmZmYzkwMDEwZjdlMDAwIG15 X2dwYT1kN2NmMDAwPGJyPm15X3JkX3dyX3BhZ2Vfc2V0dXA6IEh5cGVyY2FsbCByZXR1cm5lZDsg ZXJybm8tMDxicj49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PGJyPgpPbiBo eXBlcnZpc29yOjxicj4oWEVOKSBkb19teV9yZF93cjpMMTc4OiBHUEEgcmVhZCAweGQ3Y2YwMDA8 YnI+KFhFTikgbW0uYzoyMDM3OmQwIEVycm9yIHBmbiBkN2NmOiByZD1mZmZmODMwMDc3M2MwMDAw LCBvZD0wMDAwMDAwMDAwMDAwMDAwLCBjYWY9MTgwMDAwMDAwMDAwMDAwLCB0YWY9MDAwMDAwMDAw MDAwMDAwMDxicj4oWEVOKSBCYWQgR01GTiBkN2NmIChNRk4gZDdjZik8YnI+PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PGJyPgo8YnI+RnJvbSB0aGUgZG9tMCBtZXNzYWdlcyAo d2hlcmUgaSByZWFkIHRoZSBmZWF0dXJlcyksIGl0IGxvb2tzIGxpa2Ugd3JpdGFibGVfcGFnZV90 YWJsZXMgaXMgbm90IHNldC4gSXMgaXQgY2F1c2luZyB0aGUgaXNzdWUgaW4gbXkgY2FzZS48YnI+ PGJyPkNvdWxkIHlvdSBwbGVhc2UgYWR2aWNlIGlmIGkgZGlkIHNvbWV0aGluZyB3cm9uZyBoZXJl Ljxicj5Zb3UgYXJlIG1vc3Qgd2VsY29tZSBpZiB5b3UgaGF2ZSBjb21wbGV0ZWx5IGRpZmZlcmVu dCBhcHByb2FjaCB3aGljaCB3b3Jrczs8YnI+Cjxicj5UaGFua3MgYSBsb3QgaW4gYWR2YW5jZTxi cj48YnI+UmVnYXJkcyw8YnI+VlNSLjxicj4K --0016e646916e434ad604a50b1523-- --===============1725905424== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============1725905424==--