forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.1 KiB
52 lines
1.1 KiB
// SPDX-License-Identifier: GPL-2.0+ |
|
/* |
|
* Copyright 2018, Christophe Leroy CS S.I. |
|
* <[email protected]> |
|
* |
|
* This dumps the content of Segment Registers |
|
*/ |
|
|
|
#include <linux/debugfs.h> |
|
|
|
static void seg_show(struct seq_file *m, int i) |
|
{ |
|
u32 val = mfsr(i << 28); |
|
|
|
seq_printf(m, "0x%01x0000000-0x%01xfffffff ", i, i); |
|
seq_printf(m, "Kern key %d ", (val >> 30) & 1); |
|
seq_printf(m, "User key %d ", (val >> 29) & 1); |
|
if (val & 0x80000000) { |
|
seq_printf(m, "Device 0x%03x", (val >> 20) & 0x1ff); |
|
seq_printf(m, "-0x%05x", val & 0xfffff); |
|
} else { |
|
if (val & 0x10000000) |
|
seq_puts(m, "No Exec "); |
|
seq_printf(m, "VSID 0x%06x", val & 0xffffff); |
|
} |
|
seq_puts(m, "\n"); |
|
} |
|
|
|
static int sr_show(struct seq_file *m, void *v) |
|
{ |
|
int i; |
|
|
|
seq_puts(m, "---[ User Segments ]---\n"); |
|
for (i = 0; i < TASK_SIZE >> 28; i++) |
|
seg_show(m, i); |
|
|
|
seq_puts(m, "\n---[ Kernel Segments ]---\n"); |
|
for (; i < 16; i++) |
|
seg_show(m, i); |
|
|
|
return 0; |
|
} |
|
|
|
DEFINE_SHOW_ATTRIBUTE(sr); |
|
|
|
static int __init sr_init(void) |
|
{ |
|
debugfs_create_file("segment_registers", 0400, arch_debugfs_dir, |
|
NULL, &sr_fops); |
|
return 0; |
|
} |
|
device_initcall(sr_init);
|
|
|