From mboxrd@z Thu Jan 1 00:00:00 1970 From: Antony Saba Subject: Problems calling HVMOP_flush_tlbs Date: Tue, 17 Jan 2012 00:50:01 +0000 Message-ID: <4F14C5B9.9080501@mandiant.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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.xen.org" List-Id: xen-devel@lists.xenproject.org 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