Kees Bakker [Thu, 17 Oct 2024 19:54:47 +0000 (21:54 +0200)]
staging: gpib: avoid unintended sign extension
The code was basically like this (assuming size_t can be u64)
var_u64 |= var_u8 << 24
var_u8 is first promoted to i32 and then the shift is done. Next, it is
promoted to u64 by first signextending to 64 bits. This is very unlikely
what was intended. So now it is first forced to u32.
var_u64 |= (u32)var_u8 << 24
Umang Jain [Thu, 7 Nov 2024 19:48:05 +0000 (01:18 +0530)]
staging: vchiq_core: Rectify header include for vchiq_dump_state()
The header vchiq_core.h does not need <linux/debugfs.h>. It needs
the <linux/seq_file.h> for vchiq_dump_state() to dump the vchiq
state through vchiq_debugfs.[ch].
Qiu-ji Chen [Thu, 7 Nov 2024 11:33:37 +0000 (19:33 +0800)]
staging: greybus: uart: Fix atomicity violation in get_serial_info()
Our static checker found a bug where set_serial_info() uses a mutex, but
get_serial_info() does not. Fortunately, the impact of this is relatively
minor. It doesn't cause a crash or any other serious issues. However, if a
race condition occurs between set_serial_info() and get_serial_info(),
there is a chance that the data returned by get_serial_info() will be
meaningless.
Signed-off-by: Qiu-ji Chen <chenqiuji666@gmail.com> Fixes: 0aad5ad563c8 ("greybus/uart: switch to ->[sg]et_serial()") Reviewed-by: Johan Hovold <johan+linaro@kernel.org> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Reviewed-by: Alex Elder <elder@riscstar.com> Link: https://lore.kernel.org/r/20241107113337.402042-1-chenqiuji666@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Dave Penkler [Mon, 4 Nov 2024 17:50:13 +0000 (18:50 +0100)]
staging: gpib: Correct check for max secondary address
GPIB secondary addresses can be between 0 and 31 inclusive
unlike primary addresses where address 31 is not a valid device
address. When 31 is used as a primary talk address it
forms the UNT (Untalk) command and when used as a listener address it
forms the UNL (Unlisten) commmand.
The library was incorrectly not allowing a secondary address
with a value of 31 to be used.
Fixes: 9dde4559e939 ("staging: gpib: Add GPIB common core driver") Signed-off-by: Dave Penkler <dpenkler@gmail.com> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Link: https://lore.kernel.org/r/20241104175014.12317-13-dpenkler@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Dave Penkler [Mon, 4 Nov 2024 17:50:12 +0000 (18:50 +0100)]
staging: gpib: Re-order the lookup tables
Re-order the tables so that the bcm27xx table is used first
as these devices are more popular and numerous than the older ones.
This is slightly more efficient for the later pi3 and subsequent models
but should not be noticable in practice for all users.
Dave Penkler [Mon, 4 Nov 2024 17:50:05 +0000 (18:50 +0100)]
staging: gpib: Update messaging and usb_device refs in agilent_usb
Replace GPIB_DPRINTK with dev_dbg
Replace pr_xxx with dev_xxx wherever possible
Use previously initialized usb_device pointer for usb_put_dev()
Remove commented out console message code.
Dave Penkler [Mon, 4 Nov 2024 17:50:04 +0000 (18:50 +0100)]
staging: gpib: Update messaging and usb_device refs in ni_usb
Replace GPIB_DPRINTK with dev_dbg
Replace pr_xxx with dev_xxx wherever possible
Use previously initialized usb_device pointer
for usb_get_dev() and usb_put_dev().
Philipp Hortmann [Sun, 3 Nov 2024 08:14:22 +0000 (09:14 +0100)]
staging: rtl8723bs: Replace function thread_enter
Replace function thread_enter with its only called function allow_signal
to increase readability. Remove resulting unused local variable
thread_name as well.
Umang Jain [Wed, 23 Oct 2024 11:04:06 +0000 (16:34 +0530)]
staging: vchiq_arm: Track bulk user data pointer separately
A bulk callback transfer can be initiated from two places -
inside kernel interface or from user interface. However,
the callback data pointer 'cb_data' is used for tracking both
sets of data pointer. This commit tracks the callback
data pointer from user interface (named as 'cb_userdata') separately,
in the bulk transfer service callback.
This is esentially done by adding a 'void __user *cb_userdata' for
tracking __user pointers in vchiq_bulk and vchiq_completion_data
structs. Furthermore, the 'cb_userdata' data pointer is appended to
the vchiq_service's callback signature.
Separating the two callback data pointers ('cb_data' and 'cb_userdata')
fixes the sparse warnings around mixing userspace and kernel space
pointers.
As there are no additional sparse warnings left for vc04_services,
drop the relevant entry from the TODO.
Umang Jain [Wed, 23 Oct 2024 11:04:05 +0000 (16:34 +0530)]
staging: vchiq_core: Pass vchiq_bulk pointer to make_service_callback()
Pass struct vchiq_bulk pointer to make_service_callback() instead of
just passing the bulk->cb_data. This is a preparatory change when we
need to pass the callback data user pointer (__user) in a subsequent
commit.
In a previous commit, struct vchiq_bulk 'userdata' got renamed to
'cb_data' since it is the data pointer passed in
VCHIQ_BULK_CALLBACK_MODE's callback. Since struct vchiq_completion_data*
structs also has 'bulk_userdata' for completion records, rename
'bulk_userdata' member to 'cb_data' for these structs as well.
This brings consistency and clarity for the struct members. No
functional change in this patch.
Rename the struct vchiq_bulk 'userdata' member to 'cb_data' to clarify
its purpose. 'cb_data' is meant to be passed to service callback
function in VCHIQ_BULK_MODE_CALLBACK mode.
Umang Jain [Wed, 23 Oct 2024 11:04:02 +0000 (16:34 +0530)]
staging: vchiq_core: Bulk waiter should not piggy back on bulk userdata
Currently, struct bulk_waiter is allocated for VCHIQ_BULK_MODE_BLOCKING
bulk transfer and its pointer is assigned to vchiq_bulk->userdata. Avoid
this kind of piggybacking and introduce a dedicate 'waiter' member in
struct vchiq_bulk.
The 'userdata' is meant for VCHIQ_BULK_MODE_CALLBACK mode, to pass user
specified parameter to the actual callback function.
Philipp Hortmann [Sat, 2 Nov 2024 19:14:34 +0000 (20:14 +0100)]
staging: fieldbus: Delete unused driver
Sven Van Asbroeck contributed this driver in 2019.
The following reasons lead to the removal:
- This driver generates maintenance workload
- only 11 patches during the last 3 years. Part of the patches seem to be
motivated because of maintenance (for example - remove deprecated
function)
- Maintainer lost interest, last "Reviewed-by:" is May 2021
- no blog about usage of this driver
The staging subsystem is the way for drivers into the kernel - at current
speed and interest this is never going to happen. I think that fieldbus
is an interesting topic. But when almost nobody cares about this driver,
it does not make sense to keep it. Please consider that support will
remain for years in the longterm kernels.
Philipp Hortmann [Sun, 20 Oct 2024 14:49:29 +0000 (16:49 +0200)]
staging: rtl8712: Remove driver using deprecated API wext
This driver is in the staging area since 2010.
The following reasons lead to the removal:
- This driver generates maintenance workload for itself and for API wext
- A MAC80211 driver was available in 2016 time frame; This driver does
not compile anymore but would be a better starting point than the
current driver. Here the note from the TODO file:
A replacement for this driver with MAC80211 support is available
at https://github.com/chunkeey/rtl8192su
- no progress changing to mac80211
- Using this hardware is security wise not state of the art as WPA3 is
not supported.
The longterm kernels will still support this hardware for years.
Umang Jain [Thu, 17 Oct 2024 13:36:29 +0000 (19:06 +0530)]
staging: vchiq_dev: Drop userdata local pointer
The 'userdata' local pointer can be dropped which is set to bulk_waiter.
We can directly pass the waiter->bulk_waiter pointer to
vchiq_bulk_xfer_waiting().
Umang Jain [Thu, 17 Oct 2024 13:36:28 +0000 (19:06 +0530)]
staging: vchiq_core: Simplify bulk transfer queue message function
vchiq_bulk_xfer_queue_msg_killable() is a common function between
various bulk transfer code paths (blocking, callback and no-callback).
These code paths were simplified earlier by passing a populated
struct vchiq_bulk pointer in order to avoid open-coding the parameters
required to initiate a bulk transfer.
Now simplify the vchiq_bulk_xfer_queue_msg_killable() in a similar way
i.e. avoid open-coding the function parameters and pass the struct
vchiq_bulk pointer directly, coming from the various bulk transfer code
paths.
Umang Jain [Thu, 17 Oct 2024 13:36:27 +0000 (19:06 +0530)]
staging: vc04_services: Simplify (no)callback bulk transfer code paths
The (no)callback mode bulk transfer tends to open-code every function
parameter needed to initiate the bulk transfer. Instead of doing that,
simply pass a populated struct vchiq_bulk down the function chain.
Umang Jain [Thu, 17 Oct 2024 13:36:26 +0000 (19:06 +0530)]
staging: vc04_services: Simplify block bulk transfer code paths
Blocking bulk transfer functions tend to open-code every function
parameter needed to initiate the bulk transfer. Instead of doing
that, simply pass a populated struct vchiq_bulk down the function
chain.
Umang Jain [Thu, 17 Oct 2024 13:36:25 +0000 (19:06 +0530)]
staging: vchiq_core: Simplify bulk data preparatory functions
Two functions create_pagelist() and vchiq_prepare_bulk_data()
open code bulk data arguments ('size' and 'dir') in their function
signatures which can easily be obtained by struct vchiq_bulk pointer.
Retrieve the arguments from vchiq_bulk pointer instead and reduce
the number of arguments passed in create_pagelist() and
vchiq_bulk_prepare_data().
Umang Jain [Thu, 17 Oct 2024 13:36:24 +0000 (19:06 +0530)]
staging: vchiq_core: Subsume 'offset' in struct vchiq_bulk
Subsume offset and uoffset inside struct vchiq_bulk instead of
open-coding them in vchiq_prepare_bulk_data() function. It helps in
reducing function parameters and can be easily retrieved from the
struct vchiq_bulk pointer for creating pagelist.
Everest K.C. [Thu, 17 Oct 2024 22:07:24 +0000 (16:07 -0600)]
staging: gpib: Change return type and error code of fmh_gpib_get_dma_residue()
fmh_gpib_get_dma_residue() returns unsigned int with -1 as error code.
This error cannot be caught.
Fix this by changing the return type of the function to int and
returning the error code, that was captured. Also, change the data
type of variable residue to int in the function fmh_gpib_dma_read().
Dan Carpenter [Thu, 17 Oct 2024 19:31:46 +0000 (22:31 +0300)]
staging: gpib: fix uninitialized variable in usb_gpib_command()
The number of bytes written is supposed to be zero at the start of this
function but only one caller, ibcmd(), initializes it to zero. For the
other three callers, setup_serial_poll(), read_serial_poll_byte() and
cleanup_serial_poll(), it's an uninitialized variable.
Everest K.C. [Thu, 17 Oct 2024 09:25:10 +0000 (03:25 -0600)]
staging: gpib: Change return type and error code of fluke_get_dma_residue
fluke_get_dma_residue() returns unsigned int with -1 as error code.
This error cannot be caught.
Fix this by changing the return type of the function to int and
returning the error code, that was captured. Also, change the data
type of variable residue to int in the function fluke_dma_read().
Arnd Bergmann [Wed, 16 Oct 2024 11:15:20 +0000 (11:15 +0000)]
staging: gpib: use proper format string in request_module
Using a string variable as a format causes a -Wformat-security
warning. Since the only use of the temporary module_string[] is to hold
the sprintf() output, just pass the format string and argument directly
to request_module().
Arnd Bergmann [Wed, 16 Oct 2024 11:15:19 +0000 (11:15 +0000)]
staging: gpib: add bus specific Kconfig dependencies
A number of GPIB drivers fail to build when CONFIG_HAS_IOPORT is disabled,
which can be avoided with a CONFIG_ISA_BUS or CONFIG_PCMCIA dependency.
For completeness, mark all of the new device drivers with a dependency
on whichever bus they use, and hide the symbols for chip drivers that
are already selected by teh device drivers using them.
Arnd Bergmann [Wed, 16 Oct 2024 11:15:18 +0000 (11:15 +0000)]
staging: gpib: make port I/O code conditional
A few of the helper modules contain functions for both IORESOURCE_MEM
and IORESOURCE_IO type access, with the latter not being supported
on all architectures but also not used by all the drivers.
Add #ifdef checks around these to allow building the library code
and use it on MMIO-only configurations.
On architectures that don't support the ISA DMA API, this causes a build
failure. The corresponding dma_alloc() call is already in an #ifdef,
so use the same one for dma_free().
Note that nothing seems to set PC2_DMA, so parts of this driver
are likely unused. ISA DMA usually does not work on PCI or PCMCIA
devices, only on physical ISA slots.
Arnd Bergmann [Wed, 16 Oct 2024 11:15:16 +0000 (11:15 +0000)]
staging: gpib: avoid unused const variables
Variables that are 'static const' but not used anywhere cause a warning
with "gcc -Wunused-const-variable", which we may want to enable by default
in the future.
The gpib code already has a mix of 'enum' and 'static const' variables
for named constants, so convert the ones that are causing problems to
enums as well, or move them closer to the only users where possible.