rust: device: change the from_raw() function
Subsystems (3)
PATCH 1/1 rust: device: change the from_raw() function
The function Device::from_raw() increments a refcount by a call to bindings::get_device(ptr). This can be confused because usually from_raw() functions don't increment a refcount.
Hence, rename Device::from_raw() to avoid confuion with other "from_raw" semantics.
The new name of function should be "get_device" to be consistent with the function get_device() already exist in .c files.
This function body also changed, because the into() will convert the &'a Device into ARef<Device> and also call inc_ref from the AlwaysRefCounted trait implemented for Device.
--- rust/kernel/device.rs | 15 +++------------ rust/kernel/firmware.rs | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-)
rust/kernel/device.rs +3 -12
@@ -51,18 +51,9 @@ impl Device {/// /// It must also be ensured that `bindings::device::release` can be called from any thread. /// While not officially documented, this should be the case for any `struct device`. -pub unsafe fn from_raw (ptr: *mut bindings::device ) ->ARef <Self > { -// SAFETY: By the safety requirements, ptr is valid. -// Initially increase the reference count by one to compensate for the final decrement once -// this newly created `ARef<Device>` instance is dropped. -unsafe { bindings::get_device (ptr) }; - -// CAST: `Self` is a `repr(transparent)` wrapper around `bindings::device`. -let ptr = ptr.cast ::<Self >(); - -// SAFETY: `ptr` is valid by the safety requirements of this function. By the above call to -// `bindings::get_device` we also own a reference to the underlying `struct device`. -unsafe {ARef ::from_raw (ptr::NonNull ::new_unchecked (ptr)) } +pub unsafe fn get_device (ptr: *mut bindings::device ) ->ARef <Self > { +// SAFETY: By the safety requirements ptr is valid +unsafe {Self ::as_ref (ptr) }.into () }/// Obtain the raw `struct device *`.
rust/kernel/firmware.rs +1 -1
@@ -44,7 +44,7 @@ fn request_nowarn() -> Self {/// /// # fn no_run() -> Result<(), Error> { /// # // SAFETY: *NOT* safe, just for the example to get an `ARef<Device>` instance -/// # let dev = unsafe { Device::from_raw(core::ptr::null_mut()) }; +/// # let dev = unsafe { Device::get_device(core::ptr::null_mut()) }; /// /// let fw = Firmware::request(c_str!("path/to/firmware.bin"), &dev)?; /// let blob = fw.data();
Signature · 8 lines
The motivation from this change was will discussion in: https://rust-for-linux.zulipchat.com/#narrow/stream/291566-Library/topic/Inconsistency.20of.20.60from_raw.60.2E I would like to thanks for Greg <[email protected]>, Danilo <[email protected]> and Alice <[email protected]> for help me with this patch. 2.46.2
Quoted 6 lines · Guilherme Giacomo Simoes
The function
Device::from_raw()increments a refcount by a call tobindings::get_device(ptr). This can be confused because usuallyfrom_raw()functions don't increment a refcount.
Hence, renameDevice::from_raw()to avoid confuion with other "from_raw" semantics.
Quoted 8 lines
The new name of function should be "
get_device" to be consistent with the functionget_device()already exist in .c files.This function body also changed, because the
into()will convert the&'a DeviceintoARef<Device>and also callinc_reffrom theAlwaysRefCountedtrait implemented for Device.Signed-off-by Guilherme Giacomo Simoes <[email protected]>
This looks really good right now, thanks!
Quoted 1 line
---
^^^ note that this is the '---' that Alice mentioned, next time you could put information that is helpful but you don't want to include in the commit log here.
Regards,
Boqun
Quoted 54 lines
rust/kernel/device.rs | 15 +++------------ rust/kernel/firmware.rs | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-)rust/kernel/device.rs +3
-12@@ -51,18 +51,9 @@ impl Device {/// /// It must also be ensured that `bindings::device::release` can be called from any thread. /// While not officially documented, this should be the case for any `struct device`. -pub unsafe fn from_raw (ptr: *mut bindings::device ) ->ARef <Self > { -// SAFETY: By the safety requirements, ptr is valid. -// Initially increase the reference count by one to compensate for the final decrement once -// this newly created `ARef<Device>` instance is dropped. -unsafe { bindings::get_device (ptr) }; - -// CAST: `Self` is a `repr(transparent)` wrapper around `bindings::device`. -let ptr = ptr.cast ::<Self >(); - -// SAFETY: `ptr` is valid by the safety requirements of this function. By the above call to -// `bindings::get_device` we also own a reference to the underlying `struct device`. -unsafe {ARef ::from_raw (ptr::NonNull ::new_unchecked (ptr)) } +pub unsafe fn get_device (ptr: *mut bindings::device ) ->ARef <Self > { +// SAFETY: By the safety requirements ptr is valid +unsafe {Self ::as_ref (ptr) }.into () }/// Obtain the raw `struct device *`. rust/kernel/firmware.rs +1
-1@@ -44,7 +44,7 @@ fn request_nowarn() -> Self {/// /// # fn no_run() -> Result<(), Error> { /// # // SAFETY: *NOT* safe, just for the example to get an `ARef<Device>` instance -/// # let dev = unsafe { Device::from_raw(core::ptr::null_mut()) }; +/// # let dev = unsafe { Device::get_device(core::ptr::null_mut()) }; /// /// let fw = Firmware::request(c_str!("path/to/firmware.bin"), &dev)?; /// let blob = fw.data(); Signature · 8 lines
The motivation from this change was will discussion in: https://rust-for-linux.zulipchat.com/#narrow/stream/291566-Library/topic/Inconsistency.20of.20.60from_raw.60.2E I would like to thanks for Greg <[email protected]>, Danilo <[email protected]> and Alice <[email protected]> for help me with this patch. 2.46.2
Greg KH
maintainerQuoted 13 lines · Guilherme Giacomo Simoes
The function
Device::from_raw()increments a refcount by a call tobindings::get_device(ptr). This can be confused because usuallyfrom_raw()functions don't increment a refcount.
Hence, renameDevice::from_raw()to avoid confuion with other "from_raw" semantics.The new name of function should be "
get_device" to be consistent with the functionget_device()already exist in .c files.This function body also changed, because the
into()will convert the&'a DeviceintoARef<Device>and also callinc_reffrom theAlwaysRefCountedtrait implemented for Device.
Quoted 6 lines
Signed-off-by Guilherme Giacomo Simoes <[email protected]>--- rust/kernel/device.rs | 15 +++------------ rust/kernel/firmware.rs | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-)
Hi,
This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree.
You are receiving this message because of the following common error(s) as indicated below:
- This looks like a new version of a previously submitted patch, but you did not list below the --- line any changes from the previous version. Please read the section entitled "The canonical patch format" in the kernel file, Documentation/process/submitting-patches.rst for what needs to be done here to properly describe this.
If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers.
thanks,
greg k-h's patch email bot
Quoted 20 lines · Greg KH
Hi,
This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree.
You are receiving this message because of the following common error(s) as indicated below:
- This looks like a new version of a previously submitted patch, but you did not list below the --- line any changes from the previous version. Please read the section entitled "The canonical patch format" in the kernel file,
Documentation/process/submitting-patches.rstfor what needs to be done here to properly describe this.
Quoted 8 lines
If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers.
thanks,
greg k-h's patch email bot
How I created a new patch, and not another version of previous patch, I really don't incremental changes after --- line
Greg KH
maintainerQuoted 26 lines · Guilherme Giácomo Simões
Quoted 25 lines · Greg KH
Hi,
This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree.
You are receiving this message because of the following common error(s) as indicated below:
- This looks like a new version of a previously submitted patch, but you did not list below the --- line any changes from the previous version. Please read the section entitled "The canonical patch format" in the kernel file,
Documentation/process/submitting-patches.rstfor what needs to be done here to properly describe this.If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers.
Quoted 6 lines
Quoted 3 lines
thanks,
greg k-h's patch email bot
How I created a new patch, and not another version of previous patch, I really don't incremental changes after --- line
You did make a new version of the previous patches, please document it as such.
thanks,
greg k-h