summaryrefslogtreecommitdiffstats
path: root/Documentation/admin-guide/kdump
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2020-09-21 13:18:45 +0200
committerPetr Mladek <pmladek@suse.com>2020-09-22 11:27:48 +0200
commit74caba7f2a0685575b3ee5330a118f5922485e02 (patch)
treeeb195b5d665b166c8158af3bcdc151d2b84b447f /Documentation/admin-guide/kdump
parentprintk: move printk_info into separate array (diff)
downloadlinux-74caba7f2a0685575b3ee5330a118f5922485e02.tar.xz
linux-74caba7f2a0685575b3ee5330a118f5922485e02.zip
printk: move dictionary keys to dev_printk_info
Dictionaries are only used for SUBSYSTEM and DEVICE properties. The current implementation stores the property names each time they are used. This requires more space than otherwise necessary. Also, because the dictionary entries are currently considered optional, it cannot be relied upon that they are always available, even if the writer wanted to store them. These issues will increase should new dictionary properties be introduced. Rather than storing the subsystem and device properties in the dict ring, introduce a struct dev_printk_info with separate fields to store only the property values. Embed this struct within the struct printk_info to provide guaranteed availability. Signed-off-by: John Ogness <john.ogness@linutronix.de> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/87mu1jl6ne.fsf@jogness.linutronix.de
Diffstat (limited to 'Documentation/admin-guide/kdump')
-rw-r--r--Documentation/admin-guide/kdump/gdbmacros.txt73
1 files changed, 33 insertions, 40 deletions
diff --git a/Documentation/admin-guide/kdump/gdbmacros.txt b/Documentation/admin-guide/kdump/gdbmacros.txt
index 94fabb165abf..82aecdcae8a6 100644
--- a/Documentation/admin-guide/kdump/gdbmacros.txt
+++ b/Documentation/admin-guide/kdump/gdbmacros.txt
@@ -172,13 +172,13 @@ end
define dump_record
set var $desc = $arg0
- if ($argc > 1)
- set var $prev_flags = $arg1
+ set var $info = $arg1
+ if ($argc > 2)
+ set var $prev_flags = $arg2
else
set var $prev_flags = 0
end
- set var $info = &$desc->info
set var $prefix = 1
set var $newline = 1
@@ -237,44 +237,36 @@ define dump_record
# handle dictionary data
- set var $begin = $desc->dict_blk_lpos.begin % (1U << prb->dict_data_ring.size_bits)
- set var $next = $desc->dict_blk_lpos.next % (1U << prb->dict_data_ring.size_bits)
-
- # handle data-less record
- if ($begin & 1)
- set var $dict_len = 0
- set var $dict = ""
- else
- # handle wrapping data block
- if ($begin > $next)
- set var $begin = 0
- end
-
- # skip over descriptor id
- set var $begin = $begin + sizeof(long)
-
- # handle truncated message
- if ($next - $begin < $info->dict_len)
- set var $dict_len = $next - $begin
- else
- set var $dict_len = $info->dict_len
+ set var $dict = &$info->dev_info.subsystem[0]
+ set var $dict_len = sizeof($info->dev_info.subsystem)
+ if ($dict[0] != '\0')
+ printf " SUBSYSTEM="
+ set var $idx = 0
+ while ($idx < $dict_len)
+ set var $c = $dict[$idx]
+ if ($c == '\0')
+ loop_break
+ else
+ if ($c < ' ' || $c >= 127 || $c == '\\')
+ printf "\\x%02x", $c
+ else
+ printf "%c", $c
+ end
+ end
+ set var $idx = $idx + 1
end
-
- set var $dict = &prb->dict_data_ring.data[$begin]
+ printf "\n"
end
- if ($dict_len > 0)
+ set var $dict = &$info->dev_info.device[0]
+ set var $dict_len = sizeof($info->dev_info.device)
+ if ($dict[0] != '\0')
+ printf " DEVICE="
set var $idx = 0
- set var $line = 1
while ($idx < $dict_len)
- if ($line)
- printf " "
- set var $line = 0
- end
set var $c = $dict[$idx]
if ($c == '\0')
- printf "\n"
- set var $line = 1
+ loop_break
else
if ($c < ' ' || $c >= 127 || $c == '\\')
printf "\\x%02x", $c
@@ -288,10 +280,10 @@ define dump_record
end
end
document dump_record
- Dump a single record. The first parameter is the descriptor
- sequence number, the second is optional and specifies the
- previous record's flags, used for properly formatting
- continued lines.
+ Dump a single record. The first parameter is the descriptor,
+ the second parameter is the info, the third parameter is
+ optional and specifies the previous record's flags, used for
+ properly formatting continued lines.
end
define dmesg
@@ -311,12 +303,13 @@ define dmesg
while (1)
set var $desc = &prb->desc_ring.descs[$id % $desc_count]
+ set var $info = &prb->desc_ring.infos[$id % $desc_count]
# skip non-committed record
set var $state = 3 & ($desc->state_var.counter >> $desc_flags_shift)
if ($state == $desc_committed || $state == $desc_finalized)
- dump_record $desc $prev_flags
- set var $prev_flags = $desc->info.flags
+ dump_record $desc $info $prev_flags
+ set var $prev_flags = $info->flags
end
set var $id = ($id + 1) & $id_mask