git: df8a74fca036 - main - mpi3mr: Process LOG Data Events in Interrupt Top Half for Early Notification
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 28 Apr 2025 03:25:25 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=df8a74fca036a0ba8026f3ae3da830dffb922faa
commit df8a74fca036a0ba8026f3ae3da830dffb922faa
Author: Chandrakanth patil <chandrakanth.patil@broadcom.com>
AuthorDate: 2025-04-27 23:40:14 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2025-04-28 03:22:56 +0000
mpi3mr: Process LOG Data Events in Interrupt Top Half for Early Notification
The driver now processes LOG Data events in the interrupt top
half instead of the bottom half. This allows LOG events to be
handled immediately upon receipt, reducing latency and enabling
early notification to the Library or applications.
This change ensures LOG event handling occurs closer to the
firmware's generation point, improving alignment with event-driven
diagnostic and monitoring mechanisms.
Reviewed by: ssaxena, imp
Differential Revision: https://reviews.freebsd.org/D49751
---
sys/dev/mpi3mr/mpi3mr.c | 7 ++++++-
sys/dev/mpi3mr/mpi3mr_cam.c | 13 -------------
2 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/sys/dev/mpi3mr/mpi3mr.c b/sys/dev/mpi3mr/mpi3mr.c
index 26c0cb06282a..337f6a8e6470 100644
--- a/sys/dev/mpi3mr/mpi3mr.c
+++ b/sys/dev/mpi3mr/mpi3mr.c
@@ -4384,11 +4384,16 @@ static void mpi3mr_process_events(struct mpi3mr_softc *sc,
break;
}
case MPI3_EVENT_DEVICE_INFO_CHANGED:
- case MPI3_EVENT_LOG_DATA:
{
process_evt_bh = 1;
break;
}
+ case MPI3_EVENT_LOG_DATA:
+ {
+ mpi3mr_app_save_logdata(sc, (char*)event_reply->EventData,
+ le16toh(event_reply->EventDataLength) * 4);
+ break;
+ }
case MPI3_EVENT_ENERGY_PACK_CHANGE:
{
mpi3mr_energypackchg_evt_th(sc, event_reply);
diff --git a/sys/dev/mpi3mr/mpi3mr_cam.c b/sys/dev/mpi3mr/mpi3mr_cam.c
index af2bc0f8b55c..c0dc15531ced 100644
--- a/sys/dev/mpi3mr/mpi3mr_cam.c
+++ b/sys/dev/mpi3mr/mpi3mr_cam.c
@@ -1675,14 +1675,6 @@ mpi3mr_process_sastopochg_evt(struct mpi3mr_softc *sc, struct mpi3mr_fw_event_wo
return;
}
-static inline void
-mpi3mr_logdata_evt_bh(struct mpi3mr_softc *sc,
- struct mpi3mr_fw_event_work *fwevt)
-{
- mpi3mr_app_save_logdata(sc, fwevt->event_data,
- fwevt->event_data_size);
-}
-
static void
mpi3mr_pcietopochg_evt_debug(struct mpi3mr_softc *sc,
Mpi3EventDataPcieTopologyChangeList_t *event_data)
@@ -2035,11 +2027,6 @@ mpi3mr_fw_work(struct mpi3mr_softc *sc, struct mpi3mr_fw_event_work *fw_event)
mpi3mr_process_pcietopochg_evt(sc, fw_event);
break;
}
- case MPI3_EVENT_LOG_DATA:
- {
- mpi3mr_logdata_evt_bh(sc, fw_event);
- break;
- }
default:
mpi3mr_dprint(sc, MPI3MR_TRACE,"Unhandled event 0x%0X\n",
fw_event->event);