The `RpcMessage` type is the right container for the `log_event` method, since it contains all the data we passed to it. Move it there so callers don't need to extract the required data themselves.
Signed-off-by: Alexandre Courbot <[email protected]> --- drivers/gpu/nova-core/gsp/cmdq.rs | 66 ++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/cmdq.rs index 2ffb8f4b2ef4..a059ce74ba2d 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -615,6 +615,34 @@ fn parse(dev: &device::Device, element: GspMessage<'a>) -> Result<RpcMessage<'a> contents: (slice_1, slice_2), }) } + + /// Logs an event, meaning a message that no caller was waiting for. + /// + /// An OS error or robust-channel record is logged at error level and an unknown function code + /// at warning level. Other events are not logged. + fn log(&self, dev: &device::Device) { + let function = self.header.function(); + let seq = self.header.sequence(); + + match function { + Ok(MsgFunction::OsErrorLog) => { + dev_err!(dev, "GSP reported an OS error (seq {})\n", seq); + } + Ok(MsgFunction::RcTriggered) => { + dev_err!(dev, "GSP triggered robust-channel recovery (seq {})\n", seq); + } + // Nothing to do for the remaining known function codes. + Ok(_) => {} + Err(raw) => { + dev_warn!( + dev, + "unknown GSP message function {:#x} (seq {})\n", + raw, + seq + ); + } + } + } } /// GSP command queue. @@ -948,7 +976,7 @@ fn receive_msg<M: MessageFromGsp>(&mut self, timeout: Delta) -> Result<M> } }) } else { - self.log_event(function, rpc_message.header.sequence()); + rpc_message.log(self.dev); Err(ENOMSG) }; @@ -990,36 +1018,6 @@ fn await_msg<M: MessageFromGsp>(&mut self) -> Result<M> } } - /// Logs an event, meaning a message that no caller was waiting for. - /// - /// An OS error or robust-channel record is logged at error level and an unknown function code - /// at warning level. Every other event is recorded only by the receive trace in - /// [`Self::wait_for_msg`]. - fn log_event(&self, function: Result<MsgFunction, u32>, seq: u32) { - match function { - Ok(MsgFunction::OsErrorLog) => { - dev_err!(&self.dev, "GSP reported an OS error (seq {})\n", seq); - } - Ok(MsgFunction::RcTriggered) => { - dev_err!( - &self.dev, - "GSP triggered robust-channel recovery (seq {})\n", - seq - ); - } - // Nothing to do for the remaining known function codes. - Ok(_) => {} - Err(raw) => { - dev_warn!( - &self.dev, - "unknown GSP message function {:#x} (seq {})\n", - raw, - seq - ); - } - } - } - /// Logs and consumes every message the queue holds. /// /// # Errors @@ -1036,12 +1034,10 @@ fn drain(&mut self) -> Result { dev_err!(&self.dev, "GSP drain: message length overflow\n"); EIO })?; - let rpc_msg = RpcMessage::parse(self.dev, msg)?; - let function = rpc_msg.header.function(); - let seq = rpc_msg.header.sequence(); + + RpcMessage::parse(self.dev, msg)?.log(self.dev); self.gsp_mem.advance_cpu_read_ptr(pages); - self.log_event(function, seq); } Ok(()) -- 2.56.0
