Mercurial > illumos > illumos-gate
changeset 12652:64c37fd33275
6909096 ::irmpools dcmd core dumps on snv 129
author | Scott M. Carter <Scott.Carter@Oracle.COM> |
---|---|
date | Fri, 18 Jun 2010 16:58:41 -0700 |
parents | a33209c74758 |
children | cbaf1872d02a |
files | usr/src/cmd/mdb/common/modules/genunix/irm.c |
diffstat | 1 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/mdb/common/modules/genunix/irm.c Fri Jun 18 14:37:08 2010 -0600 +++ b/usr/src/cmd/mdb/common/modules/genunix/irm.c Fri Jun 18 16:58:41 2010 -0700 @@ -19,8 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. */ #include <sys/mdb_modapi.h> @@ -53,6 +52,28 @@ } } +static int +check_irm_enabled(void) +{ + GElf_Sym sym; + uintptr_t addr; + int value; + + if (mdb_lookup_by_name("irm_enable", &sym) == -1) { + mdb_warn("couldn't find irm_enable"); + return (0); + } + + addr = (uintptr_t)sym.st_value; + + if (mdb_vread(&value, sizeof (value), addr) != sizeof (value)) { + mdb_warn("couldn't read irm_enable at %p", addr); + return (0); + } + + return (value); +} + int irmpools_walk_init(mdb_walk_state_t *wsp) { @@ -88,6 +109,11 @@ if (argc != 0) return (DCMD_USAGE); + if (check_irm_enabled() == 0) { + mdb_warn("IRM is not enabled"); + return (DCMD_ERR); + } + if (!(flags & DCMD_ADDRSPEC)) { if (mdb_walk_dcmd("irmpools", "irmpools", argc, argv) == -1) { mdb_warn("can't walk interrupt pools"); @@ -130,6 +156,11 @@ if (argc != 0) return (DCMD_USAGE); + if (check_irm_enabled() == 0) { + mdb_warn("IRM is not enabled"); + return (DCMD_ERR); + } + if (!(flags & DCMD_ADDRSPEC)) { mdb_warn("can't perform global interrupt request walk"); return (DCMD_ERR);