Use common code for enabling tracing via xenmon and xentrace, also fixing

the last two remaining xc_private.h users outside of libxc.

Signed-off-by: John Levon <john.levon@sun.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2006-05-16 09:18:25 +01:00
1 parent 1c9887d59b
commit b152f0ed7a
4 files changed
+78 -143

No files matched your search

+24 -7
View File
@@ -16,7 +16,7 @@
#include "xc_private.h"
int xc_tbuf_enable(int xc_handle, int enable)
static int tbuf_enable(int xc_handle, int enable)
{
DECLARE_DOM0_OP;
@@ -30,7 +30,7 @@ int xc_tbuf_enable(int xc_handle, int enable)
return xc_dom0_op(xc_handle, &op);
}
int xc_tbuf_set_size(int xc_handle, uint32_t size)
int xc_tbuf_set_size(int xc_handle, unsigned long size)
{
DECLARE_DOM0_OP;
@@ -42,7 +42,7 @@ int xc_tbuf_set_size(int xc_handle, uint32_t size)
return xc_dom0_op(xc_handle, &op);
}
int xc_tbuf_get_size(int xc_handle, uint32_t *size)
int xc_tbuf_get_size(int xc_handle, unsigned long *size)
{
int rc;
DECLARE_DOM0_OP;
@@ -57,10 +57,17 @@ int xc_tbuf_get_size(int xc_handle, uint32_t *size)
return rc;
}
int xc_tbuf_get_mfn(int xc_handle, unsigned long *mfn)
int xc_tbuf_enable(int xc_handle, size_t cnt, unsigned long *mfn,
unsigned long *size)
{
int rc;
DECLARE_DOM0_OP;
int rc;
if ( xc_tbuf_set_size(xc_handle, cnt) != 0 )
return -1;
if ( tbuf_enable(xc_handle, 1) != 0 )
return -1;
op.cmd = DOM0_TBUFCONTROL;
op.interface_version = DOM0_INTERFACE_VERSION;
@@ -68,8 +75,17 @@ int xc_tbuf_get_mfn(int xc_handle, unsigned long *mfn)
rc = xc_dom0_op(xc_handle, &op);
if ( rc == 0 )
*mfn = op.u.tbufcontrol.buffer_mfn;
return rc;
{
*size = op.u.tbufcontrol.size;
*mfn = op.u.tbufcontrol.buffer_mfn;
}
return 0;
}
int xc_tbuf_disable(int xc_handle)
{
return tbuf_enable(xc_handle, 0);
}
int xc_tbuf_set_cpu_mask(int xc_handle, uint32_t mask)
@@ -95,3 +111,4 @@ int xc_tbuf_set_evt_mask(int xc_handle, uint32_t mask)
return do_dom0_op(xc_handle, &op);
}
+16 -17
View File
@@ -529,15 +529,23 @@ long xc_get_tot_pages(int xc_handle, uint32_t domid);
*/
/**
* This function enables or disables tracing. Trace buffer memory must
* be already allocated by setting the size to a non-zero value, otherwise
* tracing cannot be enabled.
* xc_tbuf_enable - enable tracing buffers
*
* @parm xc_handle a handle to an open hypervisor interface
* @parm enable the desired action, 1 for enable, 0 for disable
* @return 0 on success, -1 on failure.
* @parm cnt size of tracing buffers to create (in pages)
* @parm mfn location to store mfn of the trace buffers to
* @parm size location to store the size (in bytes) of a trace buffer to
*
* Gets the machine address of the trace pointer area and the size of the
* per CPU buffers.
*/
int xc_tbuf_enable(int xc_handle, int enable);
int xc_tbuf_enable(int xc_handle, size_t cnt, unsigned long *mfn,
unsigned long *size);
/*
* Disable tracing buffers.
*/
int xc_tbuf_disable(int xc_handle);
/**
* This function sets the size of the trace buffers. Setting the size
@@ -549,7 +557,7 @@ int xc_tbuf_enable(int xc_handle, int enable);
* @parm size the size in pages per cpu for the trace buffers
* @return 0 on success, -1 on failure.
*/
int xc_tbuf_set_size(int xc_handle, uint32_t size);
int xc_tbuf_set_size(int xc_handle, unsigned long size);
/**
* This function retrieves the current size of the trace buffers.
@@ -559,16 +567,7 @@ int xc_tbuf_set_size(int xc_handle, uint32_t size);
* @parm size will contain the size in bytes for the trace buffers
* @return 0 on success, -1 on failure.
*/
int xc_tbuf_get_size(int xc_handle, uint32_t *size);
/**
* This function retrieves the machine frame of the trace buffer.
* @parm xc_handle a handle to an open hypervisor interface
* @parm mfn will contain the machine frame of the buffer.
* @return 0 on success, -1 on failure.
*/
int xc_tbuf_get_mfn(int xc_handle, unsigned long *mfn);
int xc_tbuf_get_size(int xc_handle, unsigned long *size);
int xc_tbuf_set_cpu_mask(int xc_handle, uint32_t mask);
+26 -63
View File
@@ -35,6 +35,7 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
@@ -46,7 +47,14 @@
#include <sys/select.h>
#include <xen/linux/evtchn.h>
#include "xc_private.h"
#define PERROR(_m, _a...) \
do { \
int __saved_errno = errno; \
fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a , \
__saved_errno, strerror(__saved_errno)); \
errno = __saved_errno; \
} while (0)
typedef struct { int counter; } atomic_t;
#define _atomic_read(v) ((v).counter)
@@ -326,79 +334,34 @@ void wait_for_event(void)
}
}
void enable_tracing_or_die(int xc_handle)
static void get_tbufs(unsigned long *mfn, unsigned long *size)
{
int enable = 1;
int tbsize = DEFAULT_TBUF_SIZE;
if (xc_tbuf_enable(xc_handle, enable) != 0) {
if (xc_tbuf_set_size(xc_handle, tbsize) != 0) {
perror("set_size Hypercall failure");
exit(1);
int xc_handle = xc_interface_open();
int ret;
if ( xc_handle < 0 )
{
exit(EXIT_FAILURE);
}
printf("Set default trace buffer allocation (%d pages)\n", tbsize);
if (xc_tbuf_enable(xc_handle, enable) != 0) {
perror("Could not enable trace buffers\n");
exit(1);
ret = xc_tbuf_enable(xc_handle, DEFAULT_TBUF_SIZE, mfn, size);
if ( ret != 0 )
{
perror("Couldn't enable trace buffers");
exit(1);
}
}
else
printf("Tracing enabled\n");
xc_interface_close(xc_handle);
}
void disable_tracing(void)
{
int enable = 0;
int xc_handle = xc_interface_open();
xc_tbuf_enable(xc_handle, enable);
xc_tbuf_disable(xc_handle);
xc_interface_close(xc_handle);
}
/**
* get_tbufs - get pointer to and size of the trace buffers
* @mfn: location to store mfn of the trace buffers to
* @size: location to store the size of a trace buffer to
*
* Gets the machine address of the trace pointer area and the size of the
* per CPU buffers.
*/
void get_tbufs(unsigned long *mfn, unsigned long *size)
{
int ret;
dom0_op_t op; /* dom0 op we'll build */
int xc_handle = xc_interface_open(); /* for accessing control interface */
unsigned int tbsize;
enable_tracing_or_die(xc_handle);
if (xc_tbuf_get_size(xc_handle, &tbsize) != 0) {
perror("Failure to get tbuf info from Xen. Guess size is 0?");
exit(1);
}
else
printf("Current tbuf size: 0x%x\n", tbsize);
op.cmd = DOM0_TBUFCONTROL;
op.interface_version = DOM0_INTERFACE_VERSION;
op.u.tbufcontrol.op = DOM0_TBUF_GET_INFO;
ret = do_dom0_op(xc_handle, &op);
xc_interface_close(xc_handle);
if ( ret != 0 )
{
PERROR("Failure to get trace buffer pointer from Xen");
exit(EXIT_FAILURE);
}
*mfn = op.u.tbufcontrol.buffer_mfn;
*size = op.u.tbufcontrol.size;
}
/**
* map_tbufs - memory map Xen trace buffers into user space
* @tbufs_mfn: mfn of the trace buffers
+12 -56
View File
@@ -28,8 +28,6 @@
#include <xenctrl.h>
#include "xc_private.h"
#define PERROR(_m, _a...) \
do { \
int __saved_errno = errno; \
@@ -103,67 +101,25 @@ void write_rec(unsigned int cpu, struct t_rec *rec, FILE *out)
}
}
void enable_tracing_or_die(int xc_handle)
{
int enable = 1;
int tbsize = DEFAULT_TBUF_SIZE;
if (xc_tbuf_enable(xc_handle, enable) != 0) {
if (xc_tbuf_set_size(xc_handle, tbsize) != 0) {
perror("set_size Hypercall failure");
exit(1);
}
printf("Set default trace buffer allocation (%d pages)\n", tbsize);
if (xc_tbuf_enable(xc_handle, enable) != 0) {
perror("Could not enable trace buffers\n");
exit(1);
}
}
else
printf("Tracing enabled\n");
}
/**
* get_tbufs - get pointer to and size of the trace buffers
* @mfn: location to store mfn of the trace buffers to
* @size: location to store the size of a trace buffer to
*
* Gets the machine address of the trace pointer area and the size of the
* per CPU buffers.
*/
void get_tbufs(unsigned long *mfn, unsigned long *size)
static void get_tbufs(unsigned long *mfn, unsigned long *size)
{
int xc_handle = xc_interface_open();
int ret;
dom0_op_t op; /* dom0 op we'll build */
int xc_handle = xc_interface_open(); /* for accessing control interface */
unsigned int tbsize;
enable_tracing_or_die(xc_handle);
if (xc_tbuf_get_size(xc_handle, &tbsize) != 0) {
perror("Failure to get tbuf info from Xen. Guess size is 0?");
exit(1);
}
else
printf("Current tbuf size: 0x%x\n", tbsize);
op.cmd = DOM0_TBUFCONTROL;
op.interface_version = DOM0_INTERFACE_VERSION;
op.u.tbufcontrol.op = DOM0_TBUF_GET_INFO;
ret = do_dom0_op(xc_handle, &op);
xc_interface_close(xc_handle);
if ( ret != 0 )
if ( xc_handle < 0 )
{
PERROR("Failure to get trace buffer pointer from Xen");
exit(EXIT_FAILURE);
}
*mfn = op.u.tbufcontrol.buffer_mfn;
*size = op.u.tbufcontrol.size;
ret = xc_tbuf_enable(xc_handle, DEFAULT_TBUF_SIZE, mfn, size);
if ( ret != 0 )
{
perror("Couldn't enable trace buffers");
exit(1);
}
xc_interface_close(xc_handle);
}
/**
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.