Date: Thu, 9 Jun 2016 16:05:40 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r301739 - head/sys/cam Message-ID: <201606091605.u59G5evI037458@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: imp Date: Thu Jun 9 16:05:40 2016 New Revision: 301739 URL: https://svnweb.freebsd.org/changeset/base/301739 Log: Improve debugging of xpt. Sponsored by: Netflix Modified: head/sys/cam/cam_xpt.c Modified: head/sys/cam/cam_xpt.c ============================================================================== --- head/sys/cam/cam_xpt.c Thu Jun 9 15:43:00 2016 (r301738) +++ head/sys/cam/cam_xpt.c Thu Jun 9 16:05:40 2016 (r301739) @@ -309,6 +309,7 @@ static xpt_devicefunc_t xptsetasyncfunc; static xpt_busfunc_t xptsetasyncbusfunc; static cam_status xptregister(struct cam_periph *periph, void *arg); +static const char * xpt_action_name(uint32_t action); static __inline int device_is_queued(struct cam_ed *device); static __inline int @@ -812,6 +813,10 @@ xpt_rescan(union ccb *ccb) xpt_free_ccb(ccb); return; } + CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, + ("xpt_rescan: func %#x %s\n", ccb->ccb_h.func_code, + xpt_action_name(ccb->ccb_h.func_code))); + ccb->ccb_h.ppriv_ptr1 = ccb->ccb_h.cbfcnp; ccb->ccb_h.cbfcnp = xpt_rescan_done; xpt_setup_ccb(&ccb->ccb_h, ccb->ccb_h.path, CAM_PRIORITY_XPT); @@ -2451,7 +2456,8 @@ xpt_action(union ccb *start_ccb) { CAM_DEBUG(start_ccb->ccb_h.path, CAM_DEBUG_TRACE, - ("xpt_action: func=%#x\n", start_ccb->ccb_h.func_code)); + ("xpt_action: func %#x %s\n", start_ccb->ccb_h.func_code, + xpt_action_name(start_ccb->ccb_h.func_code))); start_ccb->ccb_h.status = CAM_REQ_INPROG; (*(start_ccb->ccb_h.path->bus->xport->action))(start_ccb); @@ -2466,7 +2472,8 @@ xpt_action_default(union ccb *start_ccb) path = start_ccb->ccb_h.path; CAM_DEBUG(path, CAM_DEBUG_TRACE, - ("xpt_action_default: func=%#x\n", start_ccb->ccb_h.func_code)); + ("xpt_action_default: func %#x %s\n", start_ccb->ccb_h.func_code, + xpt_action_name(start_ccb->ccb_h.func_code))); switch (start_ccb->ccb_h.func_code) { case XPT_SCSI_IO: @@ -3012,6 +3019,11 @@ call_sim: } break; } + CAM_DEBUG(path, CAM_DEBUG_TRACE, + ("xpt_action_default: func= %#x %s status %#x\n", + start_ccb->ccb_h.func_code, + xpt_action_name(start_ccb->ccb_h.func_code), + start_ccb->ccb_h.status)); } void @@ -4234,6 +4246,12 @@ xpt_async(u_int32_t async_code, struct c ccb->casync.async_code = async_code; ccb->casync.async_arg_size = 0; size = xpt_async_size(async_code); + CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, + ("xpt_async: func %#x %s aync_code %d %s\n", + ccb->ccb_h.func_code, + xpt_action_name(ccb->ccb_h.func_code), + async_code, + xpt_async_string(async_code))); if (size > 0 && async_arg != NULL) { ccb->casync.async_arg_ptr = malloc(size, M_CAMXPT, M_NOWAIT); if (ccb->casync.async_arg_ptr == NULL) { @@ -4441,7 +4459,11 @@ xpt_done(union ccb *done_ccb) struct cam_doneq *queue; int run, hash; - CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("xpt_done\n")); + CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, + ("xpt_done: func= %#x %s status %#x\n", + done_ccb->ccb_h.func_code, + xpt_action_name(done_ccb->ccb_h.func_code), + done_ccb->ccb_h.status)); if ((done_ccb->ccb_h.func_code & XPT_FC_QUEUED) == 0) return; @@ -4463,7 +4485,8 @@ void xpt_done_direct(union ccb *done_ccb) { - CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("xpt_done_direct\n")); + CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, + ("xpt_done_direct: status %#x\n", done_ccb->ccb_h.status)); if ((done_ccb->ccb_h.func_code & XPT_FC_QUEUED) == 0) return; @@ -5050,6 +5073,9 @@ xpt_register_async(int event, ac_callbac xpt_action((union ccb *)&csa); status = csa.ccb_h.status; + CAM_DEBUG(csa.ccb_h.path, CAM_DEBUG_TRACE, + ("xpt_register_async: func %p\n", cbfunc)); + if (xptpath) { xpt_path_unlock(path); xpt_free_path(path); @@ -5301,3 +5327,67 @@ camisr_runqueue(void) mtx_unlock(&queue->cam_doneq_mtx); } } + +struct kv +{ + uint32_t v; + const char *name; +}; + +static struct kv map[] = { + { XPT_NOOP, "XPT_NOOP" }, + { XPT_SCSI_IO, "XPT_SCSI_IO" }, + { XPT_GDEV_TYPE, "XPT_GDEV_TYPE" }, + { XPT_GDEVLIST, "XPT_GDEVLIST" }, + { XPT_PATH_INQ, "XPT_PATH_INQ" }, + { XPT_REL_SIMQ, "XPT_REL_SIMQ" }, + { XPT_SASYNC_CB, "XPT_SASYNC_CB" }, + { XPT_SDEV_TYPE, "XPT_SDEV_TYPE" }, + { XPT_SCAN_BUS, "XPT_SCAN_BUS" }, + { XPT_DEV_MATCH, "XPT_DEV_MATCH" }, + { XPT_DEBUG, "XPT_DEBUG" }, + { XPT_PATH_STATS, "XPT_PATH_STATS" }, + { XPT_GDEV_STATS, "XPT_GDEV_STATS" }, + { XPT_DEV_ADVINFO, "XPT_DEV_ADVINFO" }, + { XPT_ASYNC, "XPT_ASYNC" }, + { XPT_ABORT, "XPT_ABORT" }, + { XPT_RESET_BUS, "XPT_RESET_BUS" }, + { XPT_RESET_DEV, "XPT_RESET_DEV" }, + { XPT_TERM_IO, "XPT_TERM_IO" }, + { XPT_SCAN_LUN, "XPT_SCAN_LUN" }, + { XPT_GET_TRAN_SETTINGS, "XPT_GET_TRAN_SETTINGS" }, + { XPT_SET_TRAN_SETTINGS, "XPT_SET_TRAN_SETTINGS" }, + { XPT_CALC_GEOMETRY, "XPT_CALC_GEOMETRY" }, + { XPT_ATA_IO, "XPT_ATA_IO" }, + { XPT_GET_SIM_KNOB, "XPT_GET_SIM_KNOB" }, + { XPT_SET_SIM_KNOB, "XPT_SET_SIM_KNOB" }, + { XPT_SMP_IO, "XPT_SMP_IO" }, + { XPT_SCAN_TGT, "XPT_SCAN_TGT" }, + { XPT_ENG_INQ, "XPT_ENG_INQ" }, + { XPT_ENG_EXEC, "XPT_ENG_EXEC" }, + { XPT_EN_LUN, "XPT_EN_LUN" }, + { XPT_TARGET_IO, "XPT_TARGET_IO" }, + { XPT_ACCEPT_TARGET_IO, "XPT_ACCEPT_TARGET_IO" }, + { XPT_CONT_TARGET_IO, "XPT_CONT_TARGET_IO" }, + { XPT_IMMED_NOTIFY, "XPT_IMMED_NOTIFY" }, + { XPT_NOTIFY_ACK, "XPT_NOTIFY_ACK" }, + { XPT_IMMEDIATE_NOTIFY, "XPT_IMMEDIATE_NOTIFY" }, + { XPT_NOTIFY_ACKNOWLEDGE, "XPT_NOTIFY_ACKNOWLEDGE" }, + { 0, 0 } +}; + +static const char * +xpt_action_name(uint32_t action) +{ + static char buffer[32]; /* Only for unknown messages -- racy */ + struct kv *walker = map; + + while (walker->name != NULL) { + if (walker->v == action) + return (walker->name); + walker++; + } + + snprintf(buffer, sizeof(buffer), "%#x", action); + return (buffer); +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606091605.u59G5evI037458>