From: Jan Kiszka <jan.kiszka@siemens.com>
To: "Michael S. Tsirkin" <mst@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Anthony Liguori <aliguori@amazon.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Laszlo Ersek <lersek@redhat.com>
Subject: Re: [Qemu-devel] [PULL v3 08/14] Add a 'name' parameter to qemu_thread_create
Date: Tue, 11 Mar 2014 16:31:30 +0100 [thread overview]
Message-ID: <531F2C52.50401@siemens.com> (raw)
In-Reply-To: <1394392713-31471-9-git-send-email-mst@redhat.com>
On 2014-03-09 20:20, Michael S. Tsirkin wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> If enabled, set the thread name at creation (on GNU systems with
> pthread_set_np)
> Fix up all the callers with a thread name
Seems like not all older Linux systems come with support for
pthread_setname_np. Just ran into a linker bug on a box with glib 2.11.
Can we discover the availability, if nothing helps during configure?
Thanks,
Jan
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> ---
> include/qemu/thread.h | 2 +-
> cpus.c | 25 ++++++++++++++++++++-----
> hw/block/dataplane/virtio-blk.c | 2 +-
> hw/usb/ccid-card-emulated.c | 8 ++++----
> libcacard/vscclient.c | 2 +-
> migration.c | 2 +-
> thread-pool.c | 2 +-
> ui/vnc-jobs.c | 3 ++-
> util/compatfd.c | 3 ++-
> util/qemu-thread-posix.c | 9 +++++++--
> util/qemu-thread-win32.c | 2 +-
> 11 files changed, 41 insertions(+), 19 deletions(-)
>
> diff --git a/include/qemu/thread.h b/include/qemu/thread.h
> index bf1e110..f7e3b9b 100644
> --- a/include/qemu/thread.h
> +++ b/include/qemu/thread.h
> @@ -52,7 +52,7 @@ void qemu_event_reset(QemuEvent *ev);
> void qemu_event_wait(QemuEvent *ev);
> void qemu_event_destroy(QemuEvent *ev);
>
> -void qemu_thread_create(QemuThread *thread,
> +void qemu_thread_create(QemuThread *thread, const char *name,
> void *(*start_routine)(void *),
> void *arg, int mode);
> void *qemu_thread_join(QemuThread *thread);
> diff --git a/cpus.c b/cpus.c
> index 945d85b..b6421fd 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -1117,8 +1117,13 @@ void resume_all_vcpus(void)
> }
> }
>
> +/* For temporary buffers for forming a name */
> +#define VCPU_THREAD_NAME_SIZE 16
> +
> static void qemu_tcg_init_vcpu(CPUState *cpu)
> {
> + char thread_name[VCPU_THREAD_NAME_SIZE];
> +
> tcg_cpu_address_space_init(cpu, cpu->as);
>
> /* share a single thread for all cpus with TCG */
> @@ -1127,8 +1132,10 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
> cpu->halt_cond = g_malloc0(sizeof(QemuCond));
> qemu_cond_init(cpu->halt_cond);
> tcg_halt_cond = cpu->halt_cond;
> - qemu_thread_create(cpu->thread, qemu_tcg_cpu_thread_fn, cpu,
> - QEMU_THREAD_JOINABLE);
> + snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
> + cpu->cpu_index);
> + qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
> + cpu, QEMU_THREAD_JOINABLE);
> #ifdef _WIN32
> cpu->hThread = qemu_thread_get_handle(cpu->thread);
> #endif
> @@ -1144,11 +1151,15 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
>
> static void qemu_kvm_start_vcpu(CPUState *cpu)
> {
> + char thread_name[VCPU_THREAD_NAME_SIZE];
> +
> cpu->thread = g_malloc0(sizeof(QemuThread));
> cpu->halt_cond = g_malloc0(sizeof(QemuCond));
> qemu_cond_init(cpu->halt_cond);
> - qemu_thread_create(cpu->thread, qemu_kvm_cpu_thread_fn, cpu,
> - QEMU_THREAD_JOINABLE);
> + snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
> + cpu->cpu_index);
> + qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
> + cpu, QEMU_THREAD_JOINABLE);
> while (!cpu->created) {
> qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
> }
> @@ -1156,10 +1167,14 @@ static void qemu_kvm_start_vcpu(CPUState *cpu)
>
> static void qemu_dummy_start_vcpu(CPUState *cpu)
> {
> + char thread_name[VCPU_THREAD_NAME_SIZE];
> +
> cpu->thread = g_malloc0(sizeof(QemuThread));
> cpu->halt_cond = g_malloc0(sizeof(QemuCond));
> qemu_cond_init(cpu->halt_cond);
> - qemu_thread_create(cpu->thread, qemu_dummy_cpu_thread_fn, cpu,
> + snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
> + cpu->cpu_index);
> + qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
> QEMU_THREAD_JOINABLE);
> while (!cpu->created) {
> qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
> diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
> index 2237edb..d1c7ad4 100644
> --- a/hw/block/dataplane/virtio-blk.c
> +++ b/hw/block/dataplane/virtio-blk.c
> @@ -358,7 +358,7 @@ static void start_data_plane_bh(void *opaque)
>
> qemu_bh_delete(s->start_bh);
> s->start_bh = NULL;
> - qemu_thread_create(&s->thread, data_plane_thread,
> + qemu_thread_create(&s->thread, "data_plane", data_plane_thread,
> s, QEMU_THREAD_JOINABLE);
> }
>
> diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
> index aa913df..7213c89 100644
> --- a/hw/usb/ccid-card-emulated.c
> +++ b/hw/usb/ccid-card-emulated.c
> @@ -546,10 +546,10 @@ static int emulated_initfn(CCIDCardState *base)
> printf("%s: failed to initialize vcard\n", EMULATED_DEV_NAME);
> return -1;
> }
> - qemu_thread_create(&card->event_thread_id, event_thread, card,
> - QEMU_THREAD_JOINABLE);
> - qemu_thread_create(&card->apdu_thread_id, handle_apdu_thread, card,
> - QEMU_THREAD_JOINABLE);
> + qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
> + card, QEMU_THREAD_JOINABLE);
> + qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
> + card, QEMU_THREAD_JOINABLE);
> return 0;
> }
>
> diff --git a/libcacard/vscclient.c b/libcacard/vscclient.c
> index 24f7088..3477ab3 100644
> --- a/libcacard/vscclient.c
> +++ b/libcacard/vscclient.c
> @@ -269,7 +269,7 @@ on_host_init(VSCMsgHeader *mhHeader, VSCMsgInit *incoming)
> send_msg(VSC_ReaderRemove, VSCARD_MINIMAL_READER_ID, NULL, 0);
> /* launch the event_thread. This will trigger reader adds for all the
> * existing readers */
> - qemu_thread_create(&thread_id, event_thread, NULL, 0);
> + qemu_thread_create(&thread_id, "vsc/event", event_thread, NULL, 0);
> return 0;
> }
>
> diff --git a/migration.c b/migration.c
> index 14235b2..00f465e 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -695,6 +695,6 @@ void migrate_fd_connect(MigrationState *s)
> /* Notify before starting migration thread */
> notifier_list_notify(&migration_state_notifiers, s);
>
> - qemu_thread_create(&s->thread, migration_thread, s,
> + qemu_thread_create(&s->thread, "migration", migration_thread, s,
> QEMU_THREAD_JOINABLE);
> }
> diff --git a/thread-pool.c b/thread-pool.c
> index 3735fd3..fbdd3ff 100644
> --- a/thread-pool.c
> +++ b/thread-pool.c
> @@ -140,7 +140,7 @@ static void do_spawn_thread(ThreadPool *pool)
> pool->new_threads--;
> pool->pending_threads++;
>
> - qemu_thread_create(&t, worker_thread, pool, QEMU_THREAD_DETACHED);
> + qemu_thread_create(&t, "worker", worker_thread, pool, QEMU_THREAD_DETACHED);
> }
>
> static void spawn_thread_bh_fn(void *opaque)
> diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c
> index 2d3fce8..3f3c47b 100644
> --- a/ui/vnc-jobs.c
> +++ b/ui/vnc-jobs.c
> @@ -333,7 +333,8 @@ void vnc_start_worker_thread(void)
> return ;
>
> q = vnc_queue_init();
> - qemu_thread_create(&q->thread, vnc_worker_thread, q, QEMU_THREAD_DETACHED);
> + qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread, q,
> + QEMU_THREAD_DETACHED);
> queue = q; /* Set global queue */
> }
>
> diff --git a/util/compatfd.c b/util/compatfd.c
> index 430a41c..341ada6 100644
> --- a/util/compatfd.c
> +++ b/util/compatfd.c
> @@ -88,7 +88,8 @@ static int qemu_signalfd_compat(const sigset_t *mask)
> memcpy(&info->mask, mask, sizeof(*mask));
> info->fd = fds[1];
>
> - qemu_thread_create(&thread, sigwait_compat, info, QEMU_THREAD_DETACHED);
> + qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, info,
> + QEMU_THREAD_DETACHED);
>
> return fds[0];
> }
> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
> index 0fa6c81..45113b4 100644
> --- a/util/qemu-thread-posix.c
> +++ b/util/qemu-thread-posix.c
> @@ -394,8 +394,7 @@ void qemu_event_wait(QemuEvent *ev)
> }
> }
>
> -
> -void qemu_thread_create(QemuThread *thread,
> +void qemu_thread_create(QemuThread *thread, const char *name,
> void *(*start_routine)(void*),
> void *arg, int mode)
> {
> @@ -421,6 +420,12 @@ void qemu_thread_create(QemuThread *thread,
> if (err)
> error_exit(err, __func__);
>
> +#ifdef _GNU_SOURCE
> + if (name_threads) {
> + pthread_setname_np(thread->thread, name);
> + }
> +#endif
> +
> pthread_sigmask(SIG_SETMASK, &oldset, NULL);
>
> pthread_attr_destroy(&attr);
> diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c
> index e42cb77..b9c957b 100644
> --- a/util/qemu-thread-win32.c
> +++ b/util/qemu-thread-win32.c
> @@ -333,7 +333,7 @@ void *qemu_thread_join(QemuThread *thread)
> return ret;
> }
>
> -void qemu_thread_create(QemuThread *thread,
> +void qemu_thread_create(QemuThread *thread, const char *name,
> void *(*start_routine)(void *),
> void *arg, int mode)
> {
>
--
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2014-03-11 15:31 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-09 19:19 [Qemu-devel] [PULL v3 00/14] acpi,pc,pci,virtio,memory bug fixes Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 01/14] acpi-build: append description for non-hotplug Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 02/14] acpi-test-data: update expected files Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 03/14] virtio-net: remove function calls from assert Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 04/14] memory_region_present: return false if address is not found in child MemoryRegion Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 05/14] PCIE: fix regression with coldplugged multifunction device Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 06/14] Rework --name to use QemuOpts Michael S. Tsirkin
2014-03-09 19:19 ` [Qemu-devel] [PULL v3 07/14] Add 'debug-threads' suboption to --name Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 08/14] Add a 'name' parameter to qemu_thread_create Michael S. Tsirkin
2014-03-11 15:31 ` Jan Kiszka [this message]
2014-03-11 15:49 ` [Qemu-devel] [PATCH] qemu-thread-posix: Fix build against older glibc version Jan Kiszka
2014-03-11 16:10 ` Peter Maydell
2014-03-11 16:13 ` Dr. David Alan Gilbert
2014-03-11 16:20 ` Peter Maydell
2014-03-11 16:36 ` Dr. David Alan Gilbert
2014-03-11 17:51 ` Peter Maydell
2014-03-11 18:39 ` Michael S. Tsirkin
2014-03-11 19:46 ` Dr. David Alan Gilbert
2014-03-11 19:53 ` Peter Maydell
2014-03-11 20:03 ` Michael S. Tsirkin
2014-03-11 20:27 ` Peter Maydell
2014-03-11 20:35 ` Michael S. Tsirkin
2014-03-11 20:39 ` Eric Blake
2014-03-11 20:04 ` Dr. David Alan Gilbert
2014-04-02 14:18 ` Ed Maste
2014-04-02 15:38 ` Dr. David Alan Gilbert
2014-03-11 18:08 ` Dr. David Alan Gilbert
2014-03-11 19:02 ` Peter Maydell
2014-03-11 15:55 ` [Qemu-devel] [PULL v3 08/14] Add a 'name' parameter to qemu_thread_create Dr. David Alan Gilbert
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 09/14] MAINTAINERS: drop an out of date address Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 10/14] acpi-test: retain both asl and aml files on failure Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 11/14] acpi-test: issue errors instead of warnings when possible Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 12/14] pam: partly fix write-only mode Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 13/14] pckbd: return 'keyboard enabled' on read input port command Michael S. Tsirkin
2014-03-09 19:20 ` [Qemu-devel] [PULL v3 14/14] qemu: x86: ignore ioapic polarity Michael S. Tsirkin
2014-03-10 15:38 ` [Qemu-devel] [PULL v3 00/14] acpi, pc, pci, virtio, memory bug fixes Peter Maydell
2014-03-10 19:05 ` Michael S. Tsirkin
2014-03-11 10:55 ` Peter Maydell
2014-03-11 11:22 ` Michael S. Tsirkin
2014-03-11 11:32 ` Peter Maydell
2014-03-11 11:49 ` Michael S. Tsirkin
2014-03-11 12:09 ` Peter Maydell
2014-03-11 12:22 ` Michael S. Tsirkin
2014-03-11 12:31 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=531F2C52.50401@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=aliguori@amazon.com \
--cc=dgilbert@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lersek@redhat.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.