From c5519894fba5602d92b26f6754e72ed6b401ea2d Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 24 Oct 2012 12:52:27 -0400 Subject: [PATCH] kvm tools: Specify names for VM internal threads Give threads a meaningful name. This makes debugging much easier, and everything else much prettier. Suggested-by: Ingo Molnar Signed-off-by: Sasha Levin [ penberg@kernel.org: specify vcpu names ] Signed-off-by: Pekka Enberg --- tools/kvm/builtin-run.c | 7 ++++++- tools/kvm/disk/core.c | 2 ++ tools/kvm/include/kvm/kvm.h | 6 ++++++ tools/kvm/ioeventfd.c | 2 ++ tools/kvm/kvm-ipc.c | 2 ++ tools/kvm/net/uip/tcp.c | 3 +++ tools/kvm/net/uip/udp.c | 3 +++ tools/kvm/ui/sdl.c | 2 ++ tools/kvm/ui/vnc.c | 2 ++ tools/kvm/util/threadpool.c | 2 ++ tools/kvm/virtio/blk.c | 2 ++ tools/kvm/virtio/net.c | 4 ++++ 12 files changed, 36 insertions(+), 1 deletion(-) diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c index 709ed33bd7fd..dec2e741d0a9 100644 --- a/tools/kvm/builtin-run.c +++ b/tools/kvm/builtin-run.c @@ -171,7 +171,12 @@ static void handle_sigalrm(int sig, siginfo_t *si, void *uc) static void *kvm_cpu_thread(void *arg) { - current_kvm_cpu = arg; + char name[16]; + + current_kvm_cpu = arg; + + sprintf(name, "kvm-vcpu-%lu", current_kvm_cpu->cpu_id); + kvm__set_thread_name(name); if (kvm_cpu__start(current_kvm_cpu)) goto panic_kvm; diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c index b313b2846832..dd59751ca112 100644 --- a/tools/kvm/disk/core.c +++ b/tools/kvm/disk/core.c @@ -63,6 +63,8 @@ static void *disk_image__thread(void *param) int nr, i; u64 dummy; + kvm__set_thread_name("disk-image-io"); + while (read(disk->evt, &dummy, sizeof(dummy)) > 0) { nr = io_getevents(disk->ctx, 1, ARRAY_SIZE(event), event, ¬ime); for (i = 0; i < nr; i++) diff --git a/tools/kvm/include/kvm/kvm.h b/tools/kvm/include/kvm/kvm.h index b4606565131b..cf959eab6160 100644 --- a/tools/kvm/include/kvm/kvm.h +++ b/tools/kvm/include/kvm/kvm.h @@ -10,6 +10,7 @@ #include #include #include +#include #define SIGKVMEXIT (SIGRTMIN + 0) #define SIGKVMPAUSE (SIGRTMIN + 1) @@ -118,4 +119,9 @@ static inline void *guest_flat_to_host(struct kvm *kvm, unsigned long offset) bool kvm__supports_extension(struct kvm *kvm, unsigned int extension); +static inline void kvm__set_thread_name(const char *name) +{ + prctl(PR_SET_NAME, name); +} + #endif /* KVM__KVM_H */ diff --git a/tools/kvm/ioeventfd.c b/tools/kvm/ioeventfd.c index a68d8d0d2db3..ff665d410ba5 100644 --- a/tools/kvm/ioeventfd.c +++ b/tools/kvm/ioeventfd.c @@ -24,6 +24,8 @@ static void *ioeventfd__thread(void *param) { u64 tmp = 1; + kvm__set_thread_name("ioeventfd-worker"); + for (;;) { int nfds, i; diff --git a/tools/kvm/kvm-ipc.c b/tools/kvm/kvm-ipc.c index d23edd271dc2..bdcc0d1f6b73 100644 --- a/tools/kvm/kvm-ipc.c +++ b/tools/kvm/kvm-ipc.c @@ -260,6 +260,8 @@ static void *kvm_ipc__thread(void *param) struct epoll_event event; struct kvm *kvm = param; + kvm__set_thread_name("kvm-ipc"); + for (;;) { int nfds; diff --git a/tools/kvm/net/uip/tcp.c b/tools/kvm/net/uip/tcp.c index 711a716422f1..830aa3fd91a0 100644 --- a/tools/kvm/net/uip/tcp.c +++ b/tools/kvm/net/uip/tcp.c @@ -1,5 +1,6 @@ #include "kvm/uip.h" +#include #include #include #include @@ -176,6 +177,8 @@ static void *uip_tcp_socket_thread(void *p) int len, left, ret; u8 *payload, *pos; + kvm__set_thread_name("uip-tcp"); + sk = p; payload = malloc(UIP_MAX_TCP_PAYLOAD); diff --git a/tools/kvm/net/uip/udp.c b/tools/kvm/net/uip/udp.c index d4518b2527bc..5b6ec1c67c5c 100644 --- a/tools/kvm/net/uip/udp.c +++ b/tools/kvm/net/uip/udp.c @@ -1,5 +1,6 @@ #include "kvm/uip.h" +#include #include #include #include @@ -160,6 +161,8 @@ static void *uip_udp_socket_thread(void *p) int nfds; int i; + kvm__set_thread_name("uip-udp"); + info = p; do { diff --git a/tools/kvm/ui/sdl.c b/tools/kvm/ui/sdl.c index 172a12b768e4..9994490022b6 100644 --- a/tools/kvm/ui/sdl.c +++ b/tools/kvm/ui/sdl.c @@ -206,6 +206,8 @@ static void *sdl__thread(void *p) SDL_Event ev; Uint32 flags; + kvm__set_thread_name("kvm-sdl-worker"); + if (SDL_Init(SDL_INIT_VIDEO) != 0) die("Unable to initialize SDL"); diff --git a/tools/kvm/ui/vnc.c b/tools/kvm/ui/vnc.c index efdc0f42fb19..12e4bd53fe0d 100644 --- a/tools/kvm/ui/vnc.c +++ b/tools/kvm/ui/vnc.c @@ -185,6 +185,8 @@ static void *vnc__thread(void *p) char argv[1][1] = {{0}}; int argc = 1; + kvm__set_thread_name("kvm-vnc-worker"); + server = rfbGetScreen(&argc, (char **) argv, fb->width, fb->height, 8, 3, 4); server->frameBuffer = fb->mem; server->alwaysShared = TRUE; diff --git a/tools/kvm/util/threadpool.c b/tools/kvm/util/threadpool.c index 85ac7e738313..a3638311e2e9 100644 --- a/tools/kvm/util/threadpool.c +++ b/tools/kvm/util/threadpool.c @@ -78,6 +78,8 @@ static void *thread_pool__threadfunc(void *param) { pthread_cleanup_push(thread_pool__threadfunc_cleanup, NULL); + kvm__set_thread_name("threadpool-worker"); + while (running) { struct thread_pool__job *curjob = NULL; diff --git a/tools/kvm/virtio/blk.c b/tools/kvm/virtio/blk.c index cff38aa68948..f76342c9ab91 100644 --- a/tools/kvm/virtio/blk.c +++ b/tools/kvm/virtio/blk.c @@ -179,6 +179,8 @@ static void *virtio_blk_thread(void *dev) u64 data; int r; + kvm__set_thread_name("virtio-blk-io"); + while (1) { r = read(bdev->io_efd, &data, sizeof(u64)); if (r < 0) diff --git a/tools/kvm/virtio/net.c b/tools/kvm/virtio/net.c index d6d344a37d33..ac429cc03a52 100644 --- a/tools/kvm/virtio/net.c +++ b/tools/kvm/virtio/net.c @@ -79,6 +79,8 @@ static void *virtio_net_rx_thread(void *p) u16 head; int len; + kvm__set_thread_name("virtio-net-rx"); + kvm = ndev->kvm; vq = &ndev->vqs[VIRTIO_NET_RX_QUEUE]; @@ -115,6 +117,8 @@ static void *virtio_net_tx_thread(void *p) u16 head; int len; + kvm__set_thread_name("virtio-net-tx"); + kvm = ndev->kvm; vq = &ndev->vqs[VIRTIO_NET_TX_QUEUE]; -- 2.39.5