[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Problems calling HVMOP_flush_tlbs


  • To: "xen-devel@xxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxx>
  • From: Antony Saba <Antony.Saba@xxxxxxxxxxxx>
  • Date: Tue, 17 Jan 2012 00:50:01 +0000
  • Accept-language: en-US
  • Acceptlanguage: en-US
  • Delivery-date: Tue, 17 Jan 2012 00:51:06 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AczUsfPNvr7hMdedTR+pQNZ77OMhWA==
  • Thread-topic: Problems calling HVMOP_flush_tlbs

Hello xen-devel,

I am using xen 4.2.1 and have tried the following with kernel 3.0.0 and 
3.2.1.

I am trying to invoke the HVMOP_flush_tlbs hypercall but have been 
unsuccessful.  I am basing my call on the functions in in xc_misc.c, 
trying to guess what is meant by "@arg must be null" in the comment 
where HVMOP_flush_tlbs is defined.  What is the correct way to invoke 
this hypercall?

If I call it like this, I receive an invalid parameter (EINVAL) error:
     struct privcmd_hypercall
     {
         uint64_t op;
         uint64_t arg[5];
     } hypercall;
     hypercall.op     = __HYPERVISOR_hvm_op;
     hypercall.arg[0] = HVMOP_flush_tlbs;
     hypercall.arg[1] = 0;
     ret = do_xen_hypercall(xch, (void*)&hypercall);


If I call it like this, I get function not implemented (ENOSYS), where 3 
is a valid domain id:
     hypercall.op     = __HYPERVISOR_hvm_op;
     hypercall.arg[0] = HVMOP_flush_tlbs;
     hypercall.arg[1] = 3;  /* 3 is the domain whose tlbs should be 
flushed */
     hypercall.arg[2] = 0;

I have also tried this, mimicking the arg struct for the other HVMOP 
calls, which also returns ENOSYS:
    typedef struct _arg_t {
         domid_t domid;
         uint64_t ptr;
    } arg_t;
    struct privcmd_hypercall {
         uint64_t op;
         uint64_t arg[5];
     } hypercall;
     DECLARE_HYPERCALL_BUFFER(arg_t, arg);
     arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));

     hypercall.op     = __HYPERVISOR_hvm_op;
     hypercall.arg[0] = HVMOP_flush_tlbs;
     hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
     hypercall.arg[2]= 0;
     arg->ptr = 0;
     arg->domid = 0; /* or a valid dom id, the results are the same */


Any help is appreciated.

-Tony

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.