@@ -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++)
@@ -10,6 +10,7 @@
#include <linux/types.h>
#include <time.h>
#include <signal.h>
+#include <sys/prctl.h>
#define SIGKVMEXIT (SIGRTMIN + 0)
#define SIGKVMPAUSE (SIGRTMIN + 1)
@@ -118,4 +119,10 @@ 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 */
+
@@ -24,6 +24,8 @@ static void *ioeventfd__thread(void *param)
{
u64 tmp = 1;
+ kvm__set_thread_name("ioeventfd-worker");
+
for (;;) {
int nfds, i;
@@ -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;
@@ -1,5 +1,6 @@
#include "kvm/uip.h"
+#include <kvm/kvm.h>
#include <linux/virtio_net.h>
#include <linux/kernel.h>
#include <linux/list.h>
@@ -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);
@@ -1,5 +1,6 @@
#include "kvm/uip.h"
+#include <kvm/kvm.h>
#include <linux/virtio_net.h>
#include <linux/kernel.h>
#include <linux/list.h>
@@ -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 {
@@ -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");
@@ -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;
@@ -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;
@@ -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)
@@ -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];
Give threads a meaningful name. This makes debugging much easier, and everything else much prettier. Suggested-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Sasha Levin <sasha.levin@oracle.com> --- tools/kvm/disk/core.c | 2 ++ tools/kvm/include/kvm/kvm.h | 7 +++++++ 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 ++++ 11 files changed, 31 insertions(+)