From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhiguo Subject: libxc: fix bug of xc_tbuf_get_size() Date: Tue, 09 Feb 2010 18:57:09 +0800 Message-ID: <4B713F85.5040103@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 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: Keir Fraser , xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org The size in pages of trace buffer should be t_info->tbuf_size rather than t_info pages. Signed-off-by: Yu Zhiguo diff --git a/tools/libxc/xc_tbuf.c b/tools/libxc/xc_tbuf.c --- a/tools/libxc/xc_tbuf.c +++ b/tools/libxc/xc_tbuf.c @@ -15,6 +15,7 @@ */ #include "xc_private.h" +#include static int tbuf_enable(int xc_handle, int enable) { @@ -44,6 +45,7 @@ int xc_tbuf_get_size(int xc_handle, unsigned long *size) { + struct t_info *t_info; int rc; DECLARE_SYSCTL; @@ -52,9 +54,19 @@ sysctl.u.tbuf_op.cmd = XEN_SYSCTL_TBUFOP_get_info; rc = xc_sysctl(xc_handle, &sysctl); - if (rc == 0) - *size = sysctl.u.tbuf_op.size; - return rc; + if ( rc != 0 ) + return rc; + + t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, + sysctl.u.tbuf_op.size, PROT_READ | PROT_WRITE, + sysctl.u.tbuf_op.buffer_mfn); + + if ( t_info == NULL || t_info->tbuf_size == 0 ) + return -1; + + *size = t_info->tbuf_size; + + return 0; } int xc_tbuf_enable(int xc_handle, unsigned long pages, unsigned long *mfn,