Skip to content

Commit

Permalink
kvm tools: Dump vCPUs in order
Browse files Browse the repository at this point in the history
* Ingo Molnar <mingo@elte.hu> wrote:

> The patch below addresses these concerns, serializes the output, tidies up the
> printout, resulting in this new output:

There's one bug remaining that my patch does not address: the vCPUs are not
printed in order:

# vCPU #0's dump:
# vCPU #2's dump:
# vCPU torvalds#24's dump:
# vCPU #5's dump:
# vCPU torvalds#39's dump:
# vCPU torvalds#38's dump:
# vCPU torvalds#51's dump:
# vCPU torvalds#11's dump:
# vCPU torvalds#10's dump:
# vCPU torvalds#12's dump:

This is undesirable as the order of printout is highly random, so successive
dumps are difficult to compare.

The patch below serializes the signalling itself. (this is on top of the
previous patch)

The patch also tweaks the vCPU printout line a bit so that it does not start
with '#', which is discarded if such messages are pasted into Git commit
messages.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
  • Loading branch information
Ingo Molnar authored and penberg committed May 9, 2011
1 parent 4cd62c7 commit 1d8d90d
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions tools/kvm/kvm-run.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <kvm/term.h>
#include <kvm/ioport.h>
#include <kvm/threadpool.h>
#include <kvm/barrier.h>

/* header files for gitish interface */
#include <kvm/kvm-run.h>
Expand Down Expand Up @@ -132,7 +133,7 @@ static const struct option options[] = {
* Serialize debug printout so that the output of multiple vcpus does not
* get mixed up:
*/
static DEFINE_MUTEX(printout_mutex);
static int printout_done;

static void handle_sigusr1(int sig)
{
Expand All @@ -141,13 +142,13 @@ static void handle_sigusr1(int sig)
if (!cpu)
return;

mutex_lock(&printout_mutex);
printf("\n#\n# vCPU #%ld's dump:\n#\n", cpu->cpu_id);
printf("\n #\n # vCPU #%ld's dump:\n #\n", cpu->cpu_id);
kvm_cpu__show_registers(cpu);
kvm_cpu__show_code(cpu);
kvm_cpu__show_page_tables(cpu);
fflush(stdout);
mutex_unlock(&printout_mutex);
printout_done = 1;
mb();
}

static void handle_sigquit(int sig)
Expand All @@ -160,7 +161,15 @@ static void handle_sigquit(int sig)
if (!cpu)
continue;

printout_done = 0;
pthread_kill(cpu->thread, SIGUSR1);
/*
* Wait for the vCPU to dump state before signalling
* the next thread. Since this is debug code it does
* not matter that we are burning CPU time a bit:
*/
while (!printout_done)
mb();
}

serial8250__inject_sysrq(kvm);
Expand Down

0 comments on commit 1d8d90d

Please sign in to comment.