The syntax is: rdmsr <addr> wrmsr <addr> <l> <h>
Signed-off-by: Bernardo Innocenti <[EMAIL PROTECTED]> diff --git a/arch/i386/kdb/kdbasupport.c b/arch/i386/kdb/kdbasupport.c index 482b319..8ecef2e 100644 --- a/arch/i386/kdb/kdbasupport.c +++ b/arch/i386/kdb/kdbasupport.c @@ -223,6 +223,47 @@ kdba_removedbreg(kdb_bp_t *bp) kdba_putdr7(dr7); } +static int +kdba_rdmsr(int argc, const char **argv) +{ + unsigned long addr; + uint64_t val; + int diag; + + if (argc != 1) { + return KDB_ARGCOUNT; + } + + if ((diag = kdbgetularg(argv[1], &addr))) + return diag; + + kdb_printf("msr(0x%lx) = ", addr); + rdmsrl(addr, val); + kdb_printf("0x%llx\n", val); + + return 0; +} + +static int +kdba_wrmsr(int argc, const char **argv) +{ + unsigned long addr; + unsigned long l, h; + int diag; + + if (argc != 3) + return KDB_ARGCOUNT; + + if ((diag = kdbgetularg(argv[1], &addr)) + || (diag = kdbgetularg(argv[2], &l)) + || (diag = kdbgetularg(argv[3], &h))) + return diag; + + wrmsr(addr, l, h); + + return 0; +} + /* * kdba_getregcontents @@ -474,12 +515,11 @@ kdba_setregcontents(const char *regname, * argument is NULL (struct pt_regs). The alternate register * set types supported by this function: * - * d Debug registers + * d Debug registers * c Control registers * u User registers at most recent entry to kernel * for the process currently selected with "pid" command. * Following not yet implemented: - * m Model Specific Registers (extra defines register #) * r Memory Type Range Registers (extra defines register) */ @@ -546,8 +586,6 @@ kdba_dumpregs(struct pt_regs *regs, cr[0], cr[1], cr[2], cr[3], cr[4]); return 0; } - case 'm': - break; case 'r': break; default: @@ -899,6 +937,9 @@ kdba_init(void) { kdb_register("pt_regs", kdba_pt_regs, "address", "Format struct pt_regs", 0); kdb_register("stackdepth", kdba_stackdepth, "[percentage]", "Print processes using >= stack percentage", 0); + //TODO: maybe check CPUID first + kdb_register("rdmsr", kdba_rdmsr, "<maddr>", "Display Model Specific Register", 0); + kdb_register("wrmsr", kdba_wrmsr, "<maddr> <l> <h>", "Modify Model Specific Register", 0); return; } diff --git a/kdb/kdbmain.c b/kdb/kdbmain.c index 0b2cb91..88bf14f 100644 --- a/kdb/kdbmain.c +++ b/kdb/kdbmain.c @@ -2596,8 +2596,7 @@ kdb_rd(int argc, const char **argv) * none. * Remarks: * Currently doesn't allow modification of control or - * debug registers, nor does it allow modification - * of model-specific registers (MSR). + * debug registers. */ static int -- // Bernardo Innocenti \X/ http://www.codewiz.org/ _______________________________________________ Devel mailing list Devel@laptop.org http://mailman.laptop.org/mailman/listinfo/devel