diff --git a/sys/dev/firmware/arm/scmi_raw.c b/sys/dev/firmware/arm/scmi_raw.c --- a/sys/dev/firmware/arm/scmi_raw.c +++ b/sys/dev/firmware/arm/scmi_raw.c @@ -54,6 +54,13 @@ #include "scmi_protocols.h" #include "scmi_raw.h" +SDT_PROVIDER_DECLARE(scmi); +SDT_PROBE_DEFINE2(scmi, func, scmi_raw_message_inject, hdr_dump, "int", "int"); +SDT_PROBE_DEFINE2(scmi, func, scmi_raw_device_read, hdr_dump, "int", "int"); +SDT_PROBE_DEFINE2(scmi, func, scmi_raw_report, hdr_dump, "int", "int"); +SDT_PROBE_DEFINE3(scmi, func, scmi_raw_buf_insert, raw_alloc, "const char *", "int", "int"); +SDT_PROBE_DEFINE3(scmi, func, scmi_raw_buf_extract, raw_alloc, "const char *", "int", "int"); + static const char *rbq_names[] = { "rbq_replies", "rbq_notifs", @@ -182,6 +189,7 @@ mtx_lock_spin(&rbq->mtx[q_idx]); STAILQ_INSERT_TAIL(&rbq->head[q_idx], rb, next); rbq->cnt[q_idx]++; + SDT_PROBE3(scmi, func, scmi_raw_buf_insert, raw_alloc, rbq->name, q_idx, rbq->cnt[q_idx]); mtx_unlock_spin(&rbq->mtx[q_idx]); } @@ -211,6 +219,8 @@ rb = STAILQ_FIRST(&rbq->head[q_idx]); STAILQ_REMOVE_HEAD(&rbq->head[q_idx], next); rbq->cnt[q_idx]--; + SDT_PROBE3(scmi, func, scmi_raw_buf_extract, raw_alloc, + rbq->name, q_idx, rbq->cnt[q_idx]); } mtx_unlock_spin(&rbq->mtx[q_idx]); @@ -372,6 +382,9 @@ if (ret != 0) goto err; + SDT_PROBE2(scmi, func, scmi_raw_message_inject, hdr_dump, + in_msg->hdr, in_msg->tx_len); + ret = scmi_request_tx(rbq->dev, &in_msg->payld[0]); if (ret != 0) goto err; @@ -437,6 +450,9 @@ } if (rb->offset >= rb->len) { + SDT_PROBE2(scmi, func, scmi_raw_device_read, hdr_dump, + rb->hdr, rb->len); + /* Whole snooped message has been read, return EOF and free raw_buf */ uiop->uio_offset = 0; devfs_clear_cdevpriv(); @@ -524,6 +540,7 @@ memcpy(&rb->hdr, msg, len); rb->len = len; + SDT_PROBE2(scmi, func, scmi_raw_report, hdr_dump, rb->hdr, rb->len); scmi_raw_buf_enqueue(rb); }