int os_preop_switch2pqosmbm(cmd_t *cmd, boolean_t *smpl) { page_t *cur = page_current_get(); win_type_t type = PAGE_WIN_TYPE(cur); int ret = 0; if ((type == WIN_TYPE_PQOS_CMT_MONIPROC) || (type == WIN_TYPE_PQOS_CMT_MONILWP)) { if (perf_profiling_smpl(B_FALSE) != 0) return -1; if (disp_flag2_wait() != DISP_FLAG_PROFILING_DATA_READY) return -1; CMD_PQOS_MBM(cmd)->pid = DYN_PQOS_CMT_PROC(cur)->pid; CMD_PQOS_MBM(cmd)->lwpid = DYN_PQOS_CMT_PROC(cur)->lwpid; CMD_PQOS_MBM(cmd)->flags = PERF_PQOS_FLAG_TOTAL_BW | PERF_PQOS_FLAG_LOCAL_BW; perf_pqos_cmt_stop(CMD_PQOS_MBM(cmd)->pid, CMD_PQOS_MBM(cmd)->lwpid); ret = perf_pqos_proc_setup(CMD_PQOS_MBM(cmd)->pid, CMD_PQOS_MBM(cmd)->lwpid, CMD_PQOS_MBM(cmd)->flags); } return (ret); }
int os_preop_switch2pqoscmt(cmd_t *cmd, boolean_t *smpl) { page_t *cur = page_current_get(); win_type_t type = PAGE_WIN_TYPE(cur); int ret = 0; switch (type) { case WIN_TYPE_MONIPROC: CMD_PQOS_CMT(cmd)->pid = DYN_MONI_PROC(cur)->pid; CMD_PQOS_CMT(cmd)->lwpid = 0; CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC; break; case WIN_TYPE_RAW_NUM: case WIN_TYPE_TOPNPROC: CMD_PQOS_CMT(cmd)->pid = 0; CMD_PQOS_CMT(cmd)->lwpid = 0; CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC; break; case WIN_TYPE_MONILWP: CMD_PQOS_CMT(cmd)->pid = DYN_MONI_LWP(cur)->pid; CMD_PQOS_CMT(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid; CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC; break; case WIN_TYPE_PQOS_MBM_MONIPROC: case WIN_TYPE_PQOS_MBM_MONILWP: CMD_PQOS_CMT(cmd)->pid = DYN_PQOS_MBM_PROC(cur)->pid; CMD_PQOS_CMT(cmd)->lwpid = DYN_PQOS_MBM_PROC(cur)->lwpid; CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC; break; default: return (-1); } perf_pqos_cmt_stop(CMD_PQOS_CMT(cmd)->pid, CMD_PQOS_CMT(cmd)->lwpid); if (perf_profiling_smpl(B_FALSE) != 0) return -1; if (disp_flag2_wait() != DISP_FLAG_PROFILING_DATA_READY) return -1; if (CMD_PQOS_CMT(cmd)->pid == 0) { ret = perf_pqos_active_proc_setup(CMD_PQOS_CMT(cmd)->flags, B_FALSE); } else { ret = perf_pqos_proc_setup(CMD_PQOS_CMT(cmd)->pid, CMD_PQOS_CMT(cmd)->lwpid, CMD_PQOS_CMT(cmd)->flags); } return (ret); }
static void sortkey_set(int cmd_id, page_t *page) { win_type_t win_type = PAGE_WIN_TYPE(page); int *arr = NULL; if (win_type == WIN_TYPE_RAW_NUM) { arr = s_rawnum_sortkey; } else { arr = s_topnproc_sortkey; } if ((cmd_id >= CMD_1_ID) && (cmd_id <= CMD_5_ID) && (arr != NULL)) { g_sortkey = arr[cmd_id - CMD_1_ID]; } }
static int callchain_id_get(void) { page_t *cur = page_current_get(); if (cur == NULL) { return (CMD_INVALID_ID); } switch (PAGE_WIN_TYPE(cur)) { case WIN_TYPE_MONIPROC: case WIN_TYPE_MONILWP: return (CMD_CALLCHAIN_ID); case WIN_TYPE_LAT_PROC: case WIN_TYPE_LAT_LWP: return (CMD_LLCALLCHAIN_ID); default: return (CMD_INVALID_ID); } }
int os_op_switch2ll(cmd_t *cmd, boolean_t smpl) { page_t *cur = page_current_get(); int type = PAGE_WIN_TYPE(cur); switch (type) { case WIN_TYPE_MONIPROC: CMD_LAT(cmd)->pid = DYN_MONI_PROC(cur)->pid; CMD_LAT(cmd)->lwpid = 0; break; case WIN_TYPE_MONILWP: CMD_LAT(cmd)->pid = DYN_MONI_LWP(cur)->pid; CMD_LAT(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid; break; default: return (-1); } return (op_page_next(cmd, smpl)); }
int os_preop_switch2accdst(cmd_t *cmd, boolean_t *smpl) { page_t *cur = page_current_get(); win_type_t type = PAGE_WIN_TYPE(cur); switch (type) { case WIN_TYPE_LAT_PROC: CMD_ACCDST(cmd)->pid = DYN_LAT(cur)->pid; CMD_ACCDST(cmd)->lwpid = 0; break; case WIN_TYPE_LAT_LWP: CMD_ACCDST(cmd)->pid = DYN_LAT(cur)->pid; CMD_ACCDST(cmd)->lwpid = DYN_LAT(cur)->lwpid; break; default: return (-1); } return (0); }
/* * The common entry to process all commands. */ void cmd_execute(cmd_t *cmd, boolean_t *badcmd) { cmd_id_t cmd_id; win_type_t type; page_t *cur; switch_t *s; boolean_t b = B_TRUE, smpl = B_FALSE; if ((cmd_id = CMD_ID(cmd)) == CMD_INVALID_ID) { goto L_EXIT; } b = B_FALSE; if ((cur = page_current_get()) == NULL) { /* It's the first window. */ type = WIN_TYPE_RAW_NUM; } else { type = PAGE_WIN_TYPE(cur); } s = &s_switch[type][cmd_id]; if (s->preop != NULL) { (void) s->preop(cmd, &smpl); } if (s->op != NULL) { (void) s->op(cmd, smpl); } L_EXIT: if (badcmd != NULL) { *badcmd = b; } }
int os_preop_switch2callchain(cmd_t *cmd, boolean_t *smpl) { page_t *cur = page_current_get(); win_type_t type = PAGE_WIN_TYPE(cur); switch (type) { case WIN_TYPE_MONIPROC: CMD_CALLCHAIN(cmd)->pid = DYN_MONI_PROC(cur)->pid; CMD_CALLCHAIN(cmd)->lwpid = 0; break; case WIN_TYPE_MONILWP: CMD_CALLCHAIN(cmd)->pid = DYN_MONI_LWP(cur)->pid; CMD_CALLCHAIN(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid; break; default: return (-1); } *smpl = B_TRUE; return (perf_profiling_partpause(COUNT_RMA)); }