diff --git a/builtin-run.c b/builtin-run.c index 709ed33..dec2e74 100644 --- a/builtin-run.c +++ b/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/disk/core.c b/disk/core.c index b313b28..dd59751 100644 --- a/disk/core.c +++ b/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/include/kvm/kvm.h b/include/kvm/kvm.h index b460656..cf959ea 100644 --- a/include/kvm/kvm.h +++ b/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/ioeventfd.c b/ioeventfd.c index a68d8d0..ff665d4 100644 --- a/ioeventfd.c +++ b/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/kvm-ipc.c b/kvm-ipc.c index d23edd2..bdcc0d1 100644 --- a/kvm-ipc.c +++ b/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/net/uip/tcp.c b/net/uip/tcp.c index 711a716..830aa3f 100644 --- a/net/uip/tcp.c +++ b/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/net/uip/udp.c b/net/uip/udp.c index d4518b2..5b6ec1c 100644 --- a/net/uip/udp.c +++ b/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/ui/sdl.c b/ui/sdl.c index 172a12b..9994490 100644 --- a/ui/sdl.c +++ b/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/ui/vnc.c b/ui/vnc.c index efdc0f4..12e4bd5 100644 --- a/ui/vnc.c +++ b/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/util/threadpool.c b/util/threadpool.c index 85ac7e7..a363831 100644 --- a/util/threadpool.c +++ b/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/virtio/blk.c b/virtio/blk.c index cff38aa..f76342c 100644 --- a/virtio/blk.c +++ b/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/virtio/net.c b/virtio/net.c index d6d344a..ac429cc 100644 --- a/virtio/net.c +++ b/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];