mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge tag 'printk-for-5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux
Pull printk updates from Petr Mladek: - Remove some twists in the console registration code. It does not change the existing behavior except for one corner case. The proper default console (with tty binding) will be registered again even when it has been removed in the meantime. It is actually a bug fix. Anyway, this modified behavior requires some manual interaction. - Optimize gdb extension for huge ring buffers. - Do not use atomic operations for a local bitmap variable. - Update git links in MAINTAINERS. * tag 'printk-for-5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux: MAINTAIERS/printk: Add link to printk git MAINTAINERS/vsprintf: Update link to printk git tree scripts/gdb: lx-dmesg: read records individually printk/console: Clean up boot console handling in register_console() printk/console: Remove need_default_console variable printk/console: Remove unnecessary need_default_console manipulation printk/console: Rename has_preferred_console to need_default_console printk/console: Split out code that enables default console vsprintf: Use non-atomic bitmap API when applicable
This commit is contained in:
@@ -44,19 +44,17 @@ class LxDmesg(gdb.Command):
|
||||
sz = prb_desc_ring_type.get_type().sizeof
|
||||
desc_ring = utils.read_memoryview(inf, addr, sz).tobytes()
|
||||
|
||||
# read in descriptor array
|
||||
# read in descriptor count, size, and address
|
||||
off = prb_desc_ring_type.get_type()['count_bits'].bitpos // 8
|
||||
desc_ring_count = 1 << utils.read_u32(desc_ring, off)
|
||||
desc_sz = prb_desc_type.get_type().sizeof
|
||||
off = prb_desc_ring_type.get_type()['descs'].bitpos // 8
|
||||
addr = utils.read_ulong(desc_ring, off)
|
||||
descs = utils.read_memoryview(inf, addr, desc_sz * desc_ring_count).tobytes()
|
||||
desc_addr = utils.read_ulong(desc_ring, off)
|
||||
|
||||
# read in info array
|
||||
# read in info size and address
|
||||
info_sz = printk_info_type.get_type().sizeof
|
||||
off = prb_desc_ring_type.get_type()['infos'].bitpos // 8
|
||||
addr = utils.read_ulong(desc_ring, off)
|
||||
infos = utils.read_memoryview(inf, addr, info_sz * desc_ring_count).tobytes()
|
||||
info_addr = utils.read_ulong(desc_ring, off)
|
||||
|
||||
# read in text data ring structure
|
||||
off = printk_ringbuffer_type.get_type()['text_data_ring'].bitpos // 8
|
||||
@@ -64,12 +62,11 @@ class LxDmesg(gdb.Command):
|
||||
sz = prb_data_ring_type.get_type().sizeof
|
||||
text_data_ring = utils.read_memoryview(inf, addr, sz).tobytes()
|
||||
|
||||
# read in text data
|
||||
# read in text data size and address
|
||||
off = prb_data_ring_type.get_type()['size_bits'].bitpos // 8
|
||||
text_data_sz = 1 << utils.read_u32(text_data_ring, off)
|
||||
off = prb_data_ring_type.get_type()['data'].bitpos // 8
|
||||
addr = utils.read_ulong(text_data_ring, off)
|
||||
text_data = utils.read_memoryview(inf, addr, text_data_sz).tobytes()
|
||||
text_data_addr = utils.read_ulong(text_data_ring, off)
|
||||
|
||||
counter_off = atomic_long_type.get_type()['counter'].bitpos // 8
|
||||
|
||||
@@ -102,17 +99,20 @@ class LxDmesg(gdb.Command):
|
||||
desc_off = desc_sz * ind
|
||||
info_off = info_sz * ind
|
||||
|
||||
desc = utils.read_memoryview(inf, desc_addr + desc_off, desc_sz).tobytes()
|
||||
|
||||
# skip non-committed record
|
||||
state = 3 & (utils.read_u64(descs, desc_off + sv_off +
|
||||
counter_off) >> desc_flags_shift)
|
||||
state = 3 & (utils.read_u64(desc, sv_off + counter_off) >> desc_flags_shift)
|
||||
if state != desc_committed and state != desc_finalized:
|
||||
if did == head_id:
|
||||
break
|
||||
did = (did + 1) & desc_id_mask
|
||||
continue
|
||||
|
||||
begin = utils.read_ulong(descs, desc_off + begin_off) % text_data_sz
|
||||
end = utils.read_ulong(descs, desc_off + next_off) % text_data_sz
|
||||
begin = utils.read_ulong(desc, begin_off) % text_data_sz
|
||||
end = utils.read_ulong(desc, next_off) % text_data_sz
|
||||
|
||||
info = utils.read_memoryview(inf, info_addr + info_off, info_sz).tobytes()
|
||||
|
||||
# handle data-less record
|
||||
if begin & 1 == 1:
|
||||
@@ -125,16 +125,17 @@ class LxDmesg(gdb.Command):
|
||||
# skip over descriptor id
|
||||
text_start = begin + utils.get_long_type().sizeof
|
||||
|
||||
text_len = utils.read_u16(infos, info_off + len_off)
|
||||
text_len = utils.read_u16(info, len_off)
|
||||
|
||||
# handle truncated message
|
||||
if end - text_start < text_len:
|
||||
text_len = end - text_start
|
||||
|
||||
text = text_data[text_start:text_start + text_len].decode(
|
||||
encoding='utf8', errors='replace')
|
||||
text_data = utils.read_memoryview(inf, text_data_addr + text_start,
|
||||
text_len).tobytes()
|
||||
text = text_data[0:text_len].decode(encoding='utf8', errors='replace')
|
||||
|
||||
time_stamp = utils.read_u64(infos, info_off + ts_off)
|
||||
time_stamp = utils.read_u64(info, ts_off)
|
||||
|
||||
for line in text.splitlines():
|
||||
msg = u"[{time:12.6f}] {line}\n".format(
|
||||
|
||||
Reference in New Issue
Block a user