mirror of
https://github.com/rust-vmm/vhost-device.git
synced 2025-12-27 07:14:00 +00:00
vhost-device-gpu: Make Adapter new() return Result
Change all GPU adapter new() methods to return io::Result<Self>. This allows callers to decide how to handle initialization failures. Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
This commit is contained in:
parent
9191a0c1de
commit
9d66f7f08b
@ -7,7 +7,7 @@
|
||||
use std::{
|
||||
cell::RefCell,
|
||||
collections::BTreeMap,
|
||||
io::IoSliceMut,
|
||||
io::{self, IoSliceMut},
|
||||
os::{fd::FromRawFd, raw::c_void},
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
@ -103,7 +103,11 @@ pub struct GfxstreamAdapter {
|
||||
}
|
||||
|
||||
impl GfxstreamAdapter {
|
||||
pub fn new(queue_ctl: &VringRwLock, gpu_config: &GpuConfig, gpu_backend: GpuBackend) -> Self {
|
||||
pub fn new(
|
||||
queue_ctl: &VringRwLock,
|
||||
gpu_config: &GpuConfig,
|
||||
gpu_backend: GpuBackend,
|
||||
) -> io::Result<Self> {
|
||||
let fence_state = Arc::new(Mutex::new(FenceState::default()));
|
||||
let fence = Self::create_fence_handler(queue_ctl.clone(), fence_state.clone());
|
||||
|
||||
@ -116,12 +120,12 @@ impl GfxstreamAdapter {
|
||||
}
|
||||
});
|
||||
|
||||
Self {
|
||||
Ok(Self {
|
||||
gpu_backend,
|
||||
fence_state,
|
||||
resources: BTreeMap::new(),
|
||||
scanouts: Default::default(),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn create_fence_handler(
|
||||
|
||||
@ -3,6 +3,8 @@
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0 or BSD-3-Clause
|
||||
|
||||
use std::io;
|
||||
|
||||
use log::trace;
|
||||
use rutabaga_gfx::RutabagaFence;
|
||||
use vhost::vhost_user::{
|
||||
@ -28,11 +30,11 @@ impl NullAdapter {
|
||||
_queue_ctl: &vhost_user_backend::VringRwLock,
|
||||
_config: &GpuConfig,
|
||||
gpu_backend: GpuBackend,
|
||||
) -> Self {
|
||||
) -> io::Result<Self> {
|
||||
trace!("NullAdapter created");
|
||||
Self {
|
||||
Ok(Self {
|
||||
_gpu_backend: gpu_backend,
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -264,7 +266,7 @@ mod tests {
|
||||
let vring = VringRwLock::new(mem, 0x100).unwrap();
|
||||
let config = GpuConfig::new(GpuMode::Null, None, GpuFlags::default()).unwrap();
|
||||
|
||||
NullAdapter::new(&vring, &config, gpu_backend)
|
||||
NullAdapter::new(&vring, &config, gpu_backend).unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
use std::{
|
||||
collections::BTreeMap,
|
||||
io::IoSliceMut,
|
||||
io::{self, IoSliceMut},
|
||||
os::fd::{AsFd, FromRawFd, IntoRawFd, RawFd},
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
@ -142,7 +142,11 @@ pub struct VirglRendererAdapter {
|
||||
}
|
||||
|
||||
impl VirglRendererAdapter {
|
||||
pub fn new(queue_ctl: &VringRwLock, config: &GpuConfig, gpu_backend: GpuBackend) -> Self {
|
||||
pub fn new(
|
||||
queue_ctl: &VringRwLock,
|
||||
config: &GpuConfig,
|
||||
gpu_backend: GpuBackend,
|
||||
) -> io::Result<Self> {
|
||||
let virglrenderer_flags = VirglRendererFlags::new()
|
||||
.use_virgl(true)
|
||||
.use_venus(true)
|
||||
@ -161,14 +165,14 @@ impl VirglRendererAdapter {
|
||||
|
||||
let renderer = VirglRenderer::init(virglrenderer_flags, fence_handler, None)
|
||||
.expect("Failed to initialize virglrenderer");
|
||||
Self {
|
||||
Ok(Self {
|
||||
renderer,
|
||||
gpu_backend,
|
||||
fence_state,
|
||||
resources: BTreeMap::new(),
|
||||
contexts: BTreeMap::new(),
|
||||
scanouts: Default::default(),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -758,7 +762,7 @@ mod virgl_cov_tests {
|
||||
create_vring(&mem, &[] as &[TestingDescChainArgs], GuestAddress(0x2000), GuestAddress(0x4000), 64);
|
||||
|
||||
let backend = dummy_gpu_backend();
|
||||
let mut gpu = VirglRendererAdapter::new(&vring, &cfg, backend);
|
||||
let mut gpu = VirglRendererAdapter::new(&vring, &cfg, backend).unwrap();
|
||||
|
||||
gpu.event_poll();
|
||||
let edid_req = VhostUserGpuEdidRequest {
|
||||
|
||||
@ -24,7 +24,7 @@ macro_rules! handle_adapter {
|
||||
// Pass $vrings to the call
|
||||
let (control_vring, gpu_backend) = $self.extract_backend_and_vring($vrings)?;
|
||||
|
||||
let renderer = $new_adapter(control_vring, gpu_backend);
|
||||
let renderer = $new_adapter(control_vring, gpu_backend)?;
|
||||
|
||||
event_poll_fd = renderer.get_event_poll_fd();
|
||||
maybe_renderer.insert(renderer)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user