aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Rostedt (Google) <rostedt@goodmis.org>2022-04-17 14:21:52 -0400
committerSteven Rostedt (Google) <rostedt@goodmis.org>2022-04-20 10:58:59 -0400
commit84e434958ea800f02eef543ec845a5fc8cabb252 (patch)
treedfb8da1e48fb8126b90d3c995fd7e393a61bcf1e
parent006843bae8bf40545b0fc5150fc963adb996d059 (diff)
downloadtrace-cmd-84e434958ea800f02eef543ec845a5fc8cabb252.tar.gz
trace-cmd library: Have tracecmd_tsync_with_guest() not depend on cid/port
Have tracecmd_tsync_with_guest() get passed a file descriptor for connecting with the guest instead of passing in the cid and port, as this will allow it to be used for network connections as well. Link: https://lore.kernel.org/linux-trace-devel/20220417182154.1041513-6-rostedt@goodmis.org Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r--lib/trace-cmd/include/private/trace-cmd-private.h2
-rw-r--r--lib/trace-cmd/trace-timesync.c36
-rw-r--r--tracecmd/trace-record.c7
3 files changed, 9 insertions, 36 deletions
diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h
index 24295e4e..06906b04 100644
--- a/lib/trace-cmd/include/private/trace-cmd-private.h
+++ b/lib/trace-cmd/include/private/trace-cmd-private.h
@@ -493,7 +493,7 @@ tracecmd_tsync_with_host(const struct tracecmd_tsync_protos *tsync_protos,
int tracecmd_tsync_with_host_stop(struct tracecmd_time_sync *tsync);
struct tracecmd_time_sync *
tracecmd_tsync_with_guest(unsigned long long trace_id, int loop_interval,
- unsigned int cid, unsigned int port, int guest_pid,
+ unsigned int fd, int guest_pid,
int guest_cpus, const char *proto_name, const char *clock);
int tracecmd_tsync_with_guest_stop(struct tracecmd_time_sync *tsync);
int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync, int cpu,
diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c
index b41aece8..2f812ca5 100644
--- a/lib/trace-cmd/trace-timesync.c
+++ b/lib/trace-cmd/trace-timesync.c
@@ -345,25 +345,6 @@ error:
}
#ifdef VSOCK
-static int vsock_open(unsigned int cid, unsigned int port)
-{
- struct sockaddr_vm addr = {
- .svm_family = AF_VSOCK,
- .svm_cid = cid,
- .svm_port = port,
- };
- int sd;
-
- sd = socket(AF_VSOCK, SOCK_STREAM, 0);
- if (sd < 0)
- return -errno;
-
- if (connect(sd, (struct sockaddr *)&addr, sizeof(addr)))
- return -errno;
-
- return sd;
-}
-
static int vsock_make(void)
{
struct sockaddr_vm addr = {
@@ -388,7 +369,7 @@ static int vsock_make(void)
return sd;
}
-int __hidden vsock_get_port(int sd, unsigned int *port)
+static int vsock_get_port(int sd, unsigned int *port)
{
struct sockaddr_vm addr;
socklen_t addr_len = sizeof(addr);
@@ -406,11 +387,6 @@ int __hidden vsock_get_port(int sd, unsigned int *port)
}
#else
-static int vsock_open(unsigned int cid, unsigned int port)
-{
- return -ENOTSUP;
-}
-
static int vsock_make(void)
{
return -ENOTSUP;
@@ -811,8 +787,7 @@ static void *tsync_host_thread(void *data)
* tracecmd_tsync_with_guest - Synchronize timestamps with guest
*
* @trace_id: Local ID for the current trace session
- * @cid: CID of the guest
- * @port: VSOCKET port, on which the guest listens for tsync requests
+ * @fd: file descriptor of guest
* @guest_pid: PID of the host OS process, running the guest
* @guest_cpus: Number of the guest VCPUs
* @proto_name: Name of the negotiated time synchronization protocol
@@ -826,14 +801,13 @@ static void *tsync_host_thread(void *data)
*/
struct tracecmd_time_sync *
tracecmd_tsync_with_guest(unsigned long long trace_id, int loop_interval,
- unsigned int cid, unsigned int port, int guest_pid,
+ unsigned int fd, int guest_pid,
int guest_cpus, const char *proto_name, const char *clock)
{
struct tracecmd_time_sync *tsync;
cpu_set_t *pin_mask = NULL;
pthread_attr_t attrib;
size_t mask_size = 0;
- int fd = -1;
int ret;
if (!proto_name)
@@ -846,9 +820,6 @@ tracecmd_tsync_with_guest(unsigned long long trace_id, int loop_interval,
tsync->trace_id = trace_id;
tsync->loop_interval = loop_interval;
tsync->proto_name = strdup(proto_name);
- fd = vsock_open(cid, port);
- if (fd < 0)
- goto error;
tsync->msg_handle = tracecmd_msg_handle_alloc(fd, 0);
if (!tsync->msg_handle) {
@@ -1034,7 +1005,6 @@ out:
/**
* tracecmd_tsync_with_host - Synchronize timestamps with host
- *
* @tsync_protos: List of tsync protocols, supported by the host
* @clock: Trace clock, used for that session
* @port: returned, VSOCKET port, on which the guest listens for tsync requests
diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index c3e52a48..56fa5a79 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -3976,19 +3976,22 @@ static int host_tsync(struct common_record_context *ctx,
unsigned int tsync_port, char *proto)
{
struct trace_guest *guest;
+ int fd;
if (!proto)
return -1;
+
guest = trace_get_guest(instance->cid, NULL);
if (guest == NULL)
return -1;
start_mapping_vcpus(guest);
+ fd = trace_open_vsock(instance->cid, tsync_port);
instance->tsync = tracecmd_tsync_with_guest(top_instance.trace_id,
instance->tsync_loop_interval,
- instance->cid, tsync_port,
- guest->pid, instance->cpu_count,
+ fd, guest->pid,
+ instance->cpu_count,
proto, ctx->clock);
stop_mapping_vcpus(instance, guest);