mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
rust: drm: change default DeviceContext to Normal
Change the default DeviceContext from Registered to Normal for drm::Device, gem::Object, gem::shmem::Object and gem::shmem::ObjectConfig. Normal is the general-purpose, reference-counted context suitable for most uses; Registered represents a device that was registered with userspace and will become a non-owning context obtained through a RegistrationGuard. Update the create_handle/lookup_handle bounds from Object<Registered> to Object<Normal> to match the new default context of GEM objects, and update the driver device type aliases (NovaDevice, TyrDrmDevice) to default to Normal. Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Tested-by: Deborah Brouwer <deborah.brouwer@collabora.com> Link: https://patch.msgid.link/20260628145406.2107056-6-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
49e27d58a0
commit
9030013008
|
|
@ -26,7 +26,7 @@ pub(crate) struct Nova {
|
|||
}
|
||||
|
||||
/// Convienence type alias for the DRM device type for this driver
|
||||
pub(crate) type NovaDevice<Ctx = drm::Registered> = drm::Device<NovaDriver, Ctx>;
|
||||
pub(crate) type NovaDevice<Ctx = drm::Normal> = drm::Device<NovaDriver, Ctx>;
|
||||
|
||||
#[pin_data]
|
||||
pub(crate) struct NovaData {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
pub(crate) struct TyrDrmDriver;
|
||||
|
||||
/// Convenience type alias for the DRM device type for this driver.
|
||||
pub(crate) type TyrDrmDevice<Ctx = drm::Registered> = drm::Device<TyrDrmDriver, Ctx>;
|
||||
pub(crate) type TyrDrmDevice<Ctx = drm::Normal> = drm::Device<TyrDrmDriver, Ctx>;
|
||||
|
||||
pub(crate) struct TyrPlatformDriver;
|
||||
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ pub fn new(
|
|||
/// * The data layout of `Self` remains the same across all implementations of `C`.
|
||||
/// * Any invariants for `C` also apply.
|
||||
#[repr(C)]
|
||||
pub struct Device<T: drm::Driver, C: DeviceContext = Registered> {
|
||||
pub struct Device<T: drm::Driver, C: DeviceContext = Normal> {
|
||||
dev: Opaque<bindings::drm_device>,
|
||||
data: T::Data,
|
||||
_ctx: PhantomData<C>,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
self,
|
||||
device::{
|
||||
DeviceContext,
|
||||
Normal,
|
||||
Registered, //
|
||||
},
|
||||
driver::{
|
||||
|
|
@ -183,7 +184,7 @@ fn size(&self) -> usize {
|
|||
fn create_handle<D, F>(&self, file: &drm::File<F>) -> Result<u32>
|
||||
where
|
||||
Self: AllocImpl<Driver = D>,
|
||||
D: drm::Driver<Object<Registered> = Self, File = F>,
|
||||
D: drm::Driver<Object<Normal> = Self, File = F>,
|
||||
F: drm::file::DriverFile<Driver = D>,
|
||||
{
|
||||
let mut handle: u32 = 0;
|
||||
|
|
@ -198,7 +199,7 @@ fn create_handle<D, F>(&self, file: &drm::File<F>) -> Result<u32>
|
|||
fn lookup_handle<D, F>(file: &drm::File<F>, handle: u32) -> Result<ARef<Self>>
|
||||
where
|
||||
Self: AllocImpl<Driver = D>,
|
||||
D: drm::Driver<Object<Registered> = Self, File = F>,
|
||||
D: drm::Driver<Object<Normal> = Self, File = F>,
|
||||
F: drm::file::DriverFile<Driver = D>,
|
||||
{
|
||||
// SAFETY: The arguments are all valid per the type invariants.
|
||||
|
|
@ -254,7 +255,7 @@ impl<T: IntoGEMObject> BaseObjectPrivate for T {}
|
|||
/// * Any type invariants of `Ctx` apply to the parent DRM device for this GEM object.
|
||||
#[repr(C)]
|
||||
#[pin_data]
|
||||
pub struct Object<T: DriverObject + Send + Sync, Ctx: DeviceContext = Registered> {
|
||||
pub struct Object<T: DriverObject + Send + Sync, Ctx: DeviceContext = Normal> {
|
||||
obj: Opaque<bindings::drm_gem_object>,
|
||||
#[pin]
|
||||
data: T,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
private::Sealed,
|
||||
Device,
|
||||
DeviceContext,
|
||||
Registered, //
|
||||
Normal, //
|
||||
},
|
||||
error::{
|
||||
from_err_ptr,
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
///
|
||||
/// This is used with [`Object::new()`] to control various properties that can only be set when
|
||||
/// initially creating a shmem-backed GEM object.
|
||||
pub struct ObjectConfig<'a, T: DriverObject, C: DeviceContext = Registered> {
|
||||
pub struct ObjectConfig<'a, T: DriverObject, C: DeviceContext = Normal> {
|
||||
/// Whether to set the write-combine map flag.
|
||||
pub map_wc: bool,
|
||||
|
||||
|
|
@ -102,7 +102,7 @@ fn default() -> Self {
|
|||
/// - Any type invariants of `C` apply to the parent DRM device for this GEM object.
|
||||
#[repr(C)]
|
||||
#[pin_data]
|
||||
pub struct Object<T: DriverObject, C: DeviceContext = Registered> {
|
||||
pub struct Object<T: DriverObject, C: DeviceContext = Normal> {
|
||||
#[pin]
|
||||
obj: Opaque<bindings::drm_gem_shmem_object>,
|
||||
/// Parent object that owns this object's DMA reservation object.
|
||||
|
|
@ -409,7 +409,7 @@ impl<T: DriverObject, C: DeviceContext> driver::AllocImpl for Object<T, C> {
|
|||
/// When this is dropped, the `dma_resv` lock is dropped as well.
|
||||
///
|
||||
// TODO: This should be replace with a WwMutex equivalent once we have such bindings in the kernel.
|
||||
struct DmaResvGuard<'a, T: DriverObject, C: DeviceContext = Registered>(
|
||||
struct DmaResvGuard<'a, T: DriverObject, C: DeviceContext = Normal>(
|
||||
&'a Object<T, C>,
|
||||
NotThreadSafe,
|
||||
);
|
||||
|
|
@ -438,7 +438,7 @@ fn drop(&mut self) {
|
|||
///
|
||||
/// - The size of `owner` is >= SIZE.
|
||||
/// - The memory pointed to by `addr` remains valid at least until this object is dropped.
|
||||
pub struct VMap<D, R, C = Registered, const SIZE: usize = 0>
|
||||
pub struct VMap<D, R, C = Normal, const SIZE: usize = 0>
|
||||
where
|
||||
D: DriverObject,
|
||||
C: DeviceContext,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user