Hi Gianni,
I have created a custom hypercall and I want to lock the memory
pages for this hypercall. Below is the hypercall function I wrote in xc_domain.c
in tools/libxc.
int hypercall_test(int handle){
int rc;
int arg=0;
/* Hypercall definitions */
DECLARE_HYPERCALL;
hypercall.op = __HYPERVISOR_jeet1;
//rc = do_xen_hypercall(handle, &hypercall);
hypercall.arg[0] = 0;
hypercall.arg[1] = (unsigned long)&arg;
if (lock_pages (&arg, sizeof(arg)) != 0)
printf ("Could not lock the pages");
else
printf ("Pages locked successfully");
rc = do_xen_hypercall(handle, &hypercall);
printf("%d\n", rc);
unlock_pages(&arg, sizeof(arg));
return rc;
}
Everything compiles correctly and when I call this function from a testing
program, a hypercall is made successfully along with locking pages. But I am not
quite sure how to check if the memory pages have been locked or not.
Can some one please let me know if this is the correct way to achieve this?
Thanks
Regards,
Satyajeet
________________________________________
From: xen-devel-bounces@lists.xensource.com
[xen-devel-bounces@lists.xensource.com] on behalf of Nimgaonkar, Satyajeet
[SatyajeetNimgaonkar@my.unt.edu]
Sent: Tuesday, November 16, 2010 12:37 PM
To: Gianni Tedesco
Cc: Kaushik Barde; Xen Devel
Subject: RE: [Xen-devel] VCPU Structure
Hi Gianni,
Thanks for your reply. I would certainly prefer to lock the pages
instead. I checked the source code and in libxc/xc_domain.c, I see some code on
locking the pages for a hypercall. I my case too, i need to lock memory pages
assigned to a hypercall. Is that a right place I am looking at or can you please
redirect me some code samples about locking memory pages.
Thanks once again.
Regards,
Satyajeet
________________________________________
From: Gianni Tedesco [gianni.tedesco@citrix.com]
Sent: Friday, November 12, 2010 12:00 PM
To: Nimgaonkar, Satyajeet
Cc: Kaushik Barde; Xen Devel
Subject: RE: [Xen-devel] VCPU Structure
On Fri, 2010-11-12 at 17:43 +0000, Nimgaonkar, Satyajeet
wrote:> Hi Kaushik,
> Here is what I wish to do.
> I have implemented a custom hypercall in xen. Now i
> need to access the memory pages that are being assigned to a
> particular process. I intend to do this from the hypercall handler
> itself. Once I have these memory pages, I will compute the hash
> (Memory Integrity block) of it and store it in the VCPU structure.
> This will help me save the state of the memory for a particular
> process. Later I can check if some modification have been done to the
> process by computing and matching the hash value with the one saved in
> the VCPU.
> It would be great if you could give me some insight on
> how to achieve this. Any sample code or examples on this would help a
> lot.
> Thanks a lot.
One way would be to use the MMU, you can mark those pages read-only in
the page table and then you will get a pagefault for any write to such a
page. In the fault handler you would mark the page as modified and
unprotect it by setting it read/write again.
That would save a lot of time doing expensive calculations when you
could just use the existing hardware acceleration designed for exactly
this purpose.
See Volume 3, Chapter 4 of the Intel architecture software developers
manual.
Gianni
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel