a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow/*
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * This file and its contents are supplied under the terms of the
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * Common Development and Distribution License ("CDDL"), version 1.0.
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * You may only use this file in accordance with the terms of version
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * 1.0 of the CDDL.
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow *
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * A full copy of the text of the CDDL should have accompanied this
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * source. A copy of the CDDL is also available via the Internet at
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * http://www.illumos.org/license/CDDL.
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow */
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow/*
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow * Copyright (c) 2013, Joyent, Inc. All rights reserved.
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow */
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow#include "ddi_periodic.h"
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow#include <mdb/mdb_modapi.h>
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow#include <sys/ddi_periodic.h>
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow#include <sys/sysmacros.h>
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow#include <stdio.h>
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow/*ARGSUSED*/
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulowint
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulowdprinfo(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow{
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow char prflags[4];
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow ddi_periodic_impl_t dpr;
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow boolean_t verbose = B_FALSE;
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (!(flags & DCMD_ADDRSPEC)) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (mdb_walk_dcmd("ddi_periodic", "ddi_periodic", argc, argv)
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow == -1) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_warn("cannot walk 'ddi_periodic'");
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow return (DCMD_ERR);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow return (DCMD_OK);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (mdb_getopts(argc, argv,
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow 'v', MDB_OPT_SETBITS, B_TRUE, &verbose, NULL) != argc)
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow return (DCMD_USAGE);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (mdb_vread(&dpr, sizeof (dpr), addr) == -1) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_warn("could not read ddi_periodic_impl_t at %p", addr);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow return (DCMD_ERR);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (DCMD_HDRSPEC(flags)) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_printf("%16s %4s %3s %5s %5s %12s %s\n", "ADDR", "ID",
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow "LVL", "FLAGS", "MS", "FIRE_COUNT", "HANDLER");
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (verbose) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_printf("%16s %16s %16s %s\n", "", "THREAD",
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow "CYCLIC_ID", "ARGUMENT");
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow prflags[0] = dpr.dpr_flags & DPF_DISPATCHED ? 'D' : '-';
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow prflags[1] = dpr.dpr_flags & DPF_EXECUTING ? 'X' : '-';
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow prflags[2] = dpr.dpr_flags & DPF_CANCELLED ? 'C' : '-';
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow prflags[3] = '\0';
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_printf("%16p %4x %3d %5s %5d %12x %a\n", addr, dpr.dpr_id,
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow dpr.dpr_level, prflags, (int)(dpr.dpr_interval / 1000000),
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow dpr.dpr_fire_count, dpr.dpr_handler);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow if (verbose) {
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow mdb_printf("%16s %16p %16p %a\n", "", dpr.dpr_thread,
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow dpr.dpr_cyclic_id, dpr.dpr_arg);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow }
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow return (DCMD_OK);
a288e5a9793fdffe5e842d7e61ab45263e75eacaJoshua M. Clulow}