mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
gpu: nova-core: preserve error information in gpu_name()
Change gpu_name() to return a Result instead of an Option. This avoids silently discarding error information when parsing the GPU name string from the GSP. Update the callsite to log a warning with the error details on failure, rather than just displaying "invalid GPU name". Suggested-by: Danilo Krummrich <dakr@kernel.org> Signed-off-by: John Hubbard <jhubbard@nvidia.com> Link: https://patch.msgid.link/20260108005811.86014-2-jhubbard@nvidia.com Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
committed by
Danilo Krummrich
parent
2d7b4a44fb
commit
8d6a8e7922
@@ -238,11 +238,10 @@ impl super::Gsp {
|
||||
|
||||
// Obtain and display basic GPU information.
|
||||
let info = commands::get_gsp_info(&mut self.cmdq, bar)?;
|
||||
dev_info!(
|
||||
pdev.as_ref(),
|
||||
"GPU name: {}\n",
|
||||
info.gpu_name().unwrap_or("invalid GPU name")
|
||||
);
|
||||
match info.gpu_name() {
|
||||
Ok(name) => dev_info!(pdev.as_ref(), "GPU name: {}\n", name),
|
||||
Err(e) => dev_warn!(pdev.as_ref(), "GPU name unavailable: {:?}\n", e),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
use core::{
|
||||
array,
|
||||
convert::Infallible, //
|
||||
convert::Infallible,
|
||||
ffi::FromBytesUntilNulError,
|
||||
str::Utf8Error, //
|
||||
};
|
||||
|
||||
use kernel::{
|
||||
@@ -204,13 +206,27 @@ impl MessageFromGsp for GetGspStaticInfoReply {
|
||||
}
|
||||
}
|
||||
|
||||
/// Error type for [`GetGspStaticInfoReply::gpu_name`].
|
||||
#[derive(Debug)]
|
||||
pub(crate) enum GpuNameError {
|
||||
/// The GPU name string does not contain a null terminator.
|
||||
NoNullTerminator(FromBytesUntilNulError),
|
||||
|
||||
/// The GPU name string contains invalid UTF-8.
|
||||
#[expect(dead_code)]
|
||||
InvalidUtf8(Utf8Error),
|
||||
}
|
||||
|
||||
impl GetGspStaticInfoReply {
|
||||
/// Returns the name of the GPU as a string, or `None` if the string given by the GSP was
|
||||
/// invalid.
|
||||
pub(crate) fn gpu_name(&self) -> Option<&str> {
|
||||
/// Returns the name of the GPU as a string.
|
||||
///
|
||||
/// Returns an error if the string given by the GSP does not contain a null terminator or
|
||||
/// contains invalid UTF-8.
|
||||
pub(crate) fn gpu_name(&self) -> core::result::Result<&str, GpuNameError> {
|
||||
CStr::from_bytes_until_nul(&self.gpu_name)
|
||||
.ok()
|
||||
.and_then(|cstr| cstr.to_str().ok())
|
||||
.map_err(GpuNameError::NoNullTerminator)?
|
||||
.to_str()
|
||||
.map_err(GpuNameError::InvalidUtf8)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user