All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org,
	Jason Wessel <jason.wessel@windriver.com>,
	kgdb-bugreport@lists.sourceforge.net,
	Andi Kleen <andi@firstfloor.org>, Tom Tromey <tromey@redhat.com>,
	Ben Widawsky <ben@bwidawsk.net>,
	"David S. Miller" <davem@davemloft.net>,
	sparclinux@vger.kernel.org
Subject: Re: [PATCH v5 16/20] scripts/gdb: Add internal helper and convenience function for per-cpu lookup
Date: Tue, 29 Jan 2013 13:51:09 +0000	[thread overview]
Message-ID: <20130129135109.GF14302@pd.tnic> (raw)
In-Reply-To: <04960fa208fbd9c0962eb4f70aa45d28aec59e8d.1359463075.git.jan.kiszka@siemens.com>

On Tue, Jan 29, 2013 at 01:37:59PM +0100, Jan Kiszka wrote:
> This function allows to obtain a per-cpu variable, either of the current
> or an explicitly specified CPU.
> 
> Note: sparc64 version is untested.
> 
> CC: "David S. Miller" <davem@davemloft.net>
> CC: sparclinux@vger.kernel.org
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  scripts/gdb/percpu.py      |   61 ++++++++++++++++++++++++++++++++++++++++++++
>  scripts/gdb/vmlinux-gdb.py |    1 +
>  2 files changed, 62 insertions(+), 0 deletions(-)
>  create mode 100644 scripts/gdb/percpu.py
> 
> diff --git a/scripts/gdb/percpu.py b/scripts/gdb/percpu.py
> new file mode 100644
> index 0000000..864962c
> --- /dev/null
> +++ b/scripts/gdb/percpu.py
> @@ -0,0 +1,61 @@
> +#
> +# gdb helper commands and functions for Linux kernel debugging
> +#
> +#  per-cpu tools

This is actually a very cool thing for CPU guys: it can show what kind
of hybrid CPUs they've been glueing together, like the following, for
example:

...
(gdb) p $lx_per_cpu("cpu_info").x86_virt_bits
$5 = 48 '0'
(gdb) p $lx_per_cpu("cpu_info").x86_vendor_id
$6 = "GenuineIntel\000\000\000"
(gdb) p $lx_per_cpu("cpu_info").x86_model_id
$7 = "AMD Phenom(tm) 9550 Quad-Core Processor", '\000' <repeats 24 times>
(gdb)

Since when does Intel produce CPUs called "AMD Phenom(tm) 9550 Quad-Core
Processor"? .. hahaha..

> +#
> +# Copyright (c) Siemens AG, 2011-2013
> +#
> +# Authors:
> +#  Jan Kiszka <jan.kiszka@siemens.com>
> +#
> +# This work is licensed under the terms of the GNU GPL version 2.
> +#
> +
> +import gdb
> +
> +from utils import *
> +from task import *
> +
> +MAX_CPUS = 4096
> +
> +def get_current_cpu():
> +	if get_gdbserver_type() = GDBSERVER_QEMU:
> +		return gdb.selected_thread().num - 1
> +	elif get_gdbserver_type() = GDBSERVER_KGDB:
> +		tid = gdb.selected_thread().ptid[2]
> +		if tid > (0x100000000 - MAX_CPUS - 2):
> +			return 0x100000000 - tid - 2
> +		else:
> +			return get_thread_info(get_task_by_pid(tid))['cpu']
> +	else:
> +		raise gdb.GdbError("Sorry, obtaining the current CPU is "
> +				   "not yet supported with this gdb server.")
> +
> +def per_cpu(var_ptr, cpu):
> +	if cpu = -1:
> +		cpu = get_current_cpu()
> +	if is_target_arch("sparc:v9"):
> +		offset = gdb.parse_and_eval("trap_block[" + str(cpu) +
> +					    "].__per_cpu_base")
> +	else:
> +		offset = gdb.parse_and_eval("__per_cpu_offset[" + str(cpu) +
> +					    "]")
> +	pointer = var_ptr.cast(get_long_type()) + offset
> +	return pointer.cast(var_ptr.type).dereference()
> +
> +
> +class PerCpu(gdb.Function):
> +	__doc__ = "Return per-cpu variable.\n" \
> +		  "\n" \
> +		  "$lx_per_cpu(\"VAR\"[, CPU]): Return the per-cpu variable called VAR for the\n" \
> +		  "given CPU number. If CPU is omitted, the CPU of the current context is used.\n" \
> +		  "Note that VAR has to be quoted as string."


Ok, seriously now:

apropos shows the "Return per-cpu... " line above. Have you found out
which gdb command shows the rest? help and info both say "Undefined
command".

Thanks.

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

WARNING: multiple messages have this Message-ID (diff)
From: Borislav Petkov <bp@alien8.de>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org,
	Jason Wessel <jason.wessel@windriver.com>,
	kgdb-bugreport@lists.sourceforge.net,
	Andi Kleen <andi@firstfloor.org>, Tom Tromey <tromey@redhat.com>,
	Ben Widawsky <ben@bwidawsk.net>,
	"David S. Miller" <davem@davemloft.net>,
	sparclinux@vger.kernel.org
Subject: Re: [PATCH v5 16/20] scripts/gdb: Add internal helper and convenience function for per-cpu lookup
Date: Tue, 29 Jan 2013 14:51:09 +0100	[thread overview]
Message-ID: <20130129135109.GF14302@pd.tnic> (raw)
In-Reply-To: <04960fa208fbd9c0962eb4f70aa45d28aec59e8d.1359463075.git.jan.kiszka@siemens.com>

On Tue, Jan 29, 2013 at 01:37:59PM +0100, Jan Kiszka wrote:
> This function allows to obtain a per-cpu variable, either of the current
> or an explicitly specified CPU.
> 
> Note: sparc64 version is untested.
> 
> CC: "David S. Miller" <davem@davemloft.net>
> CC: sparclinux@vger.kernel.org
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  scripts/gdb/percpu.py      |   61 ++++++++++++++++++++++++++++++++++++++++++++
>  scripts/gdb/vmlinux-gdb.py |    1 +
>  2 files changed, 62 insertions(+), 0 deletions(-)
>  create mode 100644 scripts/gdb/percpu.py
> 
> diff --git a/scripts/gdb/percpu.py b/scripts/gdb/percpu.py
> new file mode 100644
> index 0000000..864962c
> --- /dev/null
> +++ b/scripts/gdb/percpu.py
> @@ -0,0 +1,61 @@
> +#
> +# gdb helper commands and functions for Linux kernel debugging
> +#
> +#  per-cpu tools

This is actually a very cool thing for CPU guys: it can show what kind
of hybrid CPUs they've been glueing together, like the following, for
example:

...
(gdb) p $lx_per_cpu("cpu_info").x86_virt_bits
$5 = 48 '0'
(gdb) p $lx_per_cpu("cpu_info").x86_vendor_id
$6 = "GenuineIntel\000\000\000"
(gdb) p $lx_per_cpu("cpu_info").x86_model_id
$7 = "AMD Phenom(tm) 9550 Quad-Core Processor", '\000' <repeats 24 times>
(gdb)

Since when does Intel produce CPUs called "AMD Phenom(tm) 9550 Quad-Core
Processor"? .. hahaha..

> +#
> +# Copyright (c) Siemens AG, 2011-2013
> +#
> +# Authors:
> +#  Jan Kiszka <jan.kiszka@siemens.com>
> +#
> +# This work is licensed under the terms of the GNU GPL version 2.
> +#
> +
> +import gdb
> +
> +from utils import *
> +from task import *
> +
> +MAX_CPUS = 4096
> +
> +def get_current_cpu():
> +	if get_gdbserver_type() == GDBSERVER_QEMU:
> +		return gdb.selected_thread().num - 1
> +	elif get_gdbserver_type() == GDBSERVER_KGDB:
> +		tid = gdb.selected_thread().ptid[2]
> +		if tid > (0x100000000 - MAX_CPUS - 2):
> +			return 0x100000000 - tid - 2
> +		else:
> +			return get_thread_info(get_task_by_pid(tid))['cpu']
> +	else:
> +		raise gdb.GdbError("Sorry, obtaining the current CPU is "
> +				   "not yet supported with this gdb server.")
> +
> +def per_cpu(var_ptr, cpu):
> +	if cpu == -1:
> +		cpu = get_current_cpu()
> +	if is_target_arch("sparc:v9"):
> +		offset = gdb.parse_and_eval("trap_block[" + str(cpu) +
> +					    "].__per_cpu_base")
> +	else:
> +		offset = gdb.parse_and_eval("__per_cpu_offset[" + str(cpu) +
> +					    "]")
> +	pointer = var_ptr.cast(get_long_type()) + offset
> +	return pointer.cast(var_ptr.type).dereference()
> +
> +
> +class PerCpu(gdb.Function):
> +	__doc__ = "Return per-cpu variable.\n" \
> +		  "\n" \
> +		  "$lx_per_cpu(\"VAR\"[, CPU]): Return the per-cpu variable called VAR for the\n" \
> +		  "given CPU number. If CPU is omitted, the CPU of the current context is used.\n" \
> +		  "Note that VAR has to be quoted as string."


Ok, seriously now:

apropos shows the "Return per-cpu... " line above. Have you found out
which gdb command shows the rest? help and info both say "Undefined
command".

Thanks.

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

  reply	other threads:[~2013-01-29 13:51 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-29 12:37 [PATCH v5 00/20] Add gdb python scripts as kernel debugging helpers Jan Kiszka
2013-01-29 12:37 ` Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 01/20] scripts/gdb: Add infrastructure Jan Kiszka
2013-02-13 21:43   ` Tom Tromey
2013-01-29 12:37 ` [PATCH v5 02/20] scripts/gdb: Add cache for type objects Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 03/20] scripts/gdb: Add container_of helper and convenience function Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 04/20] scripts/gdb: Add module iteration helper Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 05/20] scripts/gdb: Add lx-symbols command Jan Kiszka
2013-02-14 15:40   ` Tom Tromey
2013-02-14 15:48     ` Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 06/20] scripts/gdb: Add internal helper and convenience function to look up a module Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 07/20] scripts/gdb: Add lx_modvar convenience function Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 08/20] scripts/gdb: Add get_target_endianness helper Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 09/20] scripts/gdb: Add read_u16/32/64 helpers Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 10/20] scripts/gdb: Add lx-dmesg command Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 11/20] scripts/gdb: Add task iteration helper Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 12/20] scripts/gdb: Add helper and convenience function to look up tasks Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 13/20] scripts/gdb: Add is_target_arch helper Jan Kiszka
2013-02-13 21:38   ` Tom Tromey
2013-01-29 12:37 ` [PATCH v5 14/20] scripts/gdb: Add internal helper and convenience function to retrieve thread_info Jan Kiszka
2013-01-29 12:37   ` Jan Kiszka
2013-01-29 13:59   ` [PATCH v5 14/20] scripts/gdb: Add internal helper and convenience function to retrieve thread_in Borislav Petkov
2013-01-29 13:59     ` [PATCH v5 14/20] scripts/gdb: Add internal helper and convenience function to retrieve thread_info Borislav Petkov
2013-01-29 12:37 ` [PATCH v5 15/20] scripts/gdb: Add get_gdbserver_type helper Jan Kiszka
2013-01-29 12:37 ` [PATCH v5 16/20] scripts/gdb: Add internal helper and convenience function for per-cpu lookup Jan Kiszka
2013-01-29 12:37   ` Jan Kiszka
2013-01-29 13:51   ` Borislav Petkov [this message]
2013-01-29 13:51     ` Borislav Petkov
2013-01-29 13:56     ` Jan Kiszka
2013-01-29 13:56       ` Jan Kiszka
2013-01-29 14:12       ` Borislav Petkov
2013-01-29 14:12         ` Borislav Petkov
2013-01-29 14:25         ` Jan Kiszka
2013-01-29 14:25           ` Jan Kiszka
2013-01-29 12:38 ` [PATCH v5 17/20] scripts/gdb: Add lx_current convenience function Jan Kiszka
2013-01-29 12:38 ` [PATCH v5 18/20] scripts/gdb: Add helper to iterate over CPU masks Jan Kiszka
2013-01-29 12:38 ` [PATCH v5 19/20] scripts/gdb: Add lx-lsmod command Jan Kiszka
2013-01-29 12:38 ` [PATCH v5 20/20] scripts/gdb: Add basic documentation Jan Kiszka
2013-02-06  9:23   ` [PATCH v6 " Jan Kiszka
2013-02-09 16:15   ` [PATCH v5 " Rob Landley
2013-01-29 14:15 ` [PATCH v5 00/20] Add gdb python scripts as kernel debugging helpers Borislav Petkov
2013-01-29 14:15   ` Borislav Petkov

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=20130129135109.GF14302@pd.tnic \
    --to=bp@alien8.de \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=ben@bwidawsk.net \
    --cc=davem@davemloft.net \
    --cc=jan.kiszka@siemens.com \
    --cc=jason.wessel@windriver.com \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sparclinux@vger.kernel.org \
    --cc=tromey@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.