Anirudh Rayabharam
9c10825787
rapidio: handle create_workqueue() failure
...
commit 69ce3ae36d upstream.
In case create_workqueue() fails, release all resources and return -ENOMEM
to caller to avoid potential NULL pointer deref later. Move up the
create_workequeue() call to return early and avoid unwinding the call to
riocm_rx_fill().
Cc: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: stable <stable@vger.kernel.org >
Signed-off-by: Anirudh Rayabharam <mail@anirudhrb.com >
Link: https://lore.kernel.org/r/20210503115736.2104747-46-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2023-05-16 11:05:25 +09:00
Greg Kroah-Hartman
1f11d86543
Revert "rapidio: fix a NULL pointer dereference when create_workqueue() fails"
...
commit 5e68b86c7b upstream.
This reverts commit 23015b22e4 .
Because of recent interactions with developers from @umn.edu, all
commits from them have been recently re-reviewed to ensure if they were
correct or not.
Upon review, this commit was found to be incorrect for the reasons
below, so it must be reverted. It will be fixed up "correctly" in a
later kernel change.
The original commit has a memory leak on the error path here, it does
not clean up everything properly.
Cc: Kangjie Lu <kjlu@umn.edu >
Cc: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Fixes: 23015b22e4 ("rapidio: fix a NULL pointer dereference when create_workqueue() fails")
Cc: stable <stable@vger.kernel.org >
Link: https://lore.kernel.org/r/20210503115736.2104747-45-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2023-05-16 11:05:24 +09:00
Jing Xiangfeng
72fedd0805
rapidio: fix the missed put_device() for rio_mport_add_riodev
...
[ Upstream commit 85094c05ee ]
rio_mport_add_riodev() misses to call put_device() when the device already
exists. Add the missed function call to fix it.
Fixes: e8de370188 ("rapidio: add mport char device driver")
Signed-off-by: Jing Xiangfeng <jingxiangfeng@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Gustavo A. R. Silva <gustavoars@kernel.org >
Cc: John Hubbard <jhubbard@nvidia.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com >
Link: https://lkml.kernel.org/r/20200922072525.42330-1-jingxiangfeng@huawei.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-16 09:38:59 +09:00
Souptick Joarder
fff74f2b2c
rapidio: fix error handling path
...
[ Upstream commit fa63f083b3 ]
rio_dma_transfer() attempts to clamp the return value of
pin_user_pages_fast() to be >= 0. However, the attempt fails because
nr_pages is overridden a few lines later, and restored to the undesirable
-ERRNO value.
The return value is ultimately stored in nr_pages, which in turn is passed
to unpin_user_pages(), which expects nr_pages >= 0, else, disaster.
Fix this by fixing the nesting of the assignment to nr_pages: nr_pages
should be clamped to zero if pin_user_pages_fast() returns -ERRNO, or set
to the return value of pin_user_pages_fast(), otherwise.
[jhubbard@nvidia.com: new changelog]
Fixes: e8de370188 ("rapidio: add mport char device driver")
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Reviewed-by: Ira Weiny <ira.weiny@intel.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Matthew Wilcox <willy@infradead.org >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Gustavo A. R. Silva <gustavoars@kernel.org >
Cc: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com >
Cc: Dan Carpenter <dan.carpenter@oracle.com >
Link: https://lkml.kernel.org/r/1600227737-20785-1-git-send-email-jrdr.linux@gmail.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-16 09:38:57 +09:00
Laurent Pinchart
478082f780
rapidio: Replace 'select' DMAENGINES 'with depends on'
...
[ Upstream commit d2b8610024 ]
Enabling a whole subsystem from a single driver 'select' is frowned
upon and won't be accepted in new drivers, that need to use 'depends on'
instead. Existing selection of DMAENGINES will then cause circular
dependencies. Replace them with a dependency.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Randy Dunlap <rdunlap@infradead.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-16 09:13:19 +09:00
John Hubbard
34dae79a19
rapidio: fix an error in get_user_pages_fast() error handling
...
commit ffca476a0a upstream.
In the case of get_user_pages_fast() returning fewer pages than
requested, rio_dma_transfer() does not quite do the right thing. It
attempts to release all the pages that were requested, rather than just
the pages that were pinned.
Fix the error handling so that only the pages that were successfully
pinned are released.
Fixes: e8de370188 ("rapidio: add mport char device driver")
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Reviewed-by: Andrew Morton <akpm@linux-foundation.org >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Sumit Semwal <sumit.semwal@linaro.org >
Cc: Dan Carpenter <dan.carpenter@oracle.com >
Cc: <stable@vger.kernel.org >
Link: http://lkml.kernel.org/r/20200517235620.205225-2-jhubbard@nvidia.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2023-05-15 17:29:33 +09:00
Dan Carpenter
0238e8da78
drivers/rapidio/rio_cm.c: fix potential oops in riocm_ch_listen()
...
[ Upstream commit 5ac188b12e ]
If riocm_get_channel() fails, then we should just return -EINVAL.
Calling riocm_put_channel() will trigger a NULL dereference and
generally we should call put() if the get() didn't succeed.
Link: http://lkml.kernel.org/r/20190110130230.GB27017@kadam
Fixes: b6e8d4aa11 ("rapidio: add RapidIO channelized messaging driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com >
Reviewed-by: Andrew Morton <akpm@linux-foundation.org >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alexandre.bounine@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-15 16:44:23 +09:00
Dan Carpenter
5f246dd805
drivers/rapidio/devices/rio_mport_cdev.c: NUL terminate some strings
...
[ Upstream commit 156e0b1a81 ]
The dev_info.name[] array has space for RIO_MAX_DEVNAME_SZ + 1
characters. But the problem here is that we don't ensure that the user
put a NUL terminator on the end of the string. It could lead to an out
of bounds read.
Link: http://lkml.kernel.org/r/20190529110601.GB19119@mwanda
Fixes: e8de370188 ("rapidio: add mport char device driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com >
Acked-by: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Ira Weiny <ira.weiny@intel.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-15 14:09:23 +09:00
Kangjie Lu
2f1889b3fa
rapidio: fix a NULL pointer dereference when create_workqueue() fails
...
[ Upstream commit 23015b22e4 ]
In case create_workqueue fails, the fix releases resources and returns
-ENOMEM to avoid NULL pointer dereference.
Signed-off-by: Kangjie Lu <kjlu@umn.edu >
Acked-by: Alexandre Bounine <alex.bou9@gmail.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2023-05-15 13:47:01 +09:00
Christophe JAILLET
e9672477a5
drivers/rapidio/devices/rio_mport_cdev.c: fix resource leak in error handling path in 'rio_dma_transfer()'
...
[ Upstream commit b1402dcb56 ]
If 'dma_map_sg()', we should branch to the existing error handling path
to free some resources before returning.
Link: http://lkml.kernel.org/r/61292a4f369229eee03394247385e955027283f8.1505687047.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr >
Reviewed-by: Logan Gunthorpe <logang@deltatee.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Lorenzo Stoakes <lstoakes@gmail.com >
Cc: Jesper Nilsson <jesper.nilsson@axis.com >
Cc: Christian K_nig <christian.koenig@amd.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <alexander.levin@verizon.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-14 09:28:22 +01:00
Randy Dunlap
07b653405e
drivers/rapidio/devices/tsi721.c: make module parameter variable name unique
...
[ Upstream commit 4785603bd0 ]
kbuild test robot reported a non-static variable name collision between
a staging driver and a RapidIO driver, with a generic variable name of
'dbg_level'.
Both drivers should be changed so that they don't use this generic
public variable name. This patch fixes the RapidIO driver but does not
change the user interface (name) for the module parameter.
drivers/staging/built-in.o:(.bss+0x109d0): multiple definition of `dbg_level'
drivers/rapidio/built-in.o:(.bss+0x16c): first defined here
Link: http://lkml.kernel.org/r/ab527fc5-aa3c-4b07-5d48-eef5de703192@infradead.org
Signed-off-by: Randy Dunlap <rdunlap@infradead.org >
Reported-by: kbuild test robot <fengguang.wu@intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Jérémy Lefaure <jeremy.lefaure@lse.epita.fr >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Sasha Levin <alexander.levin@verizon.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-10-08 10:26:09 +02:00
Lorenzo Stoakes
768ae309a9
mm: replace get_user_pages() write/force parameters with gup_flags
...
This removes the 'write' and 'force' from get_user_pages() and replaces
them with 'gup_flags' to make the use of FOLL_FORCE explicit in callers
as use of this flag can result in surprising behaviour (and hence bugs)
within the mm subsystem.
Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com >
Acked-by: Christian König <christian.koenig@amd.com >
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com >
Acked-by: Michal Hocko <mhocko@suse.com >
Reviewed-by: Jan Kara <jack@suse.cz >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-10-19 08:11:43 -07:00
Alexandre Bounine
7836a2d980
rapidio/rio_cm: use memdup_user() instead of duplicating code
...
Fix coccinelle warning about duplicating existing memdup_user function.
Link: http://lkml.kernel.org/r/20160811151737.20140-1-alexandre.bounine@idt.com
Link: https://lkml.org/lkml/2016/8/11/29
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Reported-by: kbuild test robot <fengguang.wu@intel.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-10-11 15:06:32 -07:00
Alexandre Bounine
b92ae139c3
rapidio/rio_cm: avoid GFP_KERNEL in atomic context
...
As reported by Alexey Khoroshilov (https://lkml.org/lkml/2016/9/9/737 ):
riocm_send_close() is called from rio_cm_shutdown() under
spin_lock_bh(idr_lock), but riocm_send_close() uses a GFP_KERNEL
allocation.
Fix by taking riocm_send_close() outside of spinlock protected code.
[akpm@linux-foundation.org: remove unneeded `if (!list_empty())']
Link: http://lkml.kernel.org/r/20160915175402.10122-1-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Reported-by: Alexey Khoroshilov <khoroshilov@ispras.ru >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-09-19 15:36:17 -07:00
Alexandre Bounine
b30069291d
rapidio/tsi721: fix incorrect detection of address translation condition
...
Fix incorrect condition to identify involvment of a address translation
mechanism.
This bug results in NULL pointer kernel crash dump in cases when mapping
of inbound RapidIO address range is requested within existing aprture.
Link: http://lkml.kernel.org/r/20160901173144.2983-1-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Cc: <stable@vger.kernel.org > [4.6+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-09-01 17:52:02 -07:00
Dan Carpenter
73984137d3
rapidio: dereferencing an error pointer
...
Original patch: https://lkml.org/lkml/2016/8/4/32
If riocm_ch_alloc() fails then we end up dereferencing the error
pointer.
The problem is that we're not unwinding in the reverse order from how we
allocate things so it gets confusing. I've changed this around so now
"ch" is NULL when we are done with it after we call riocm_put_channel().
That way we can check if it's NULL and avoid calling riocm_put_channel()
on it twice.
I renamed err_nodev to err_put_new_ch so that it better reflects what
the goto does.
Then because we had flipping things around, it means we don't neeed to
initialize the pointers to NULL and we can remove an if statement and
pull things in an indent level.
Link: http://lkml.kernel.org/r/20160805152406.20713-1-alexandre.bounine@idt.com
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com >
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-10 16:40:56 -07:00
Alexandre Bounine
0b9364b5cf
rapidio/switches: add driver for IDT gen3 switches
...
Add RapidIO switch driver for IDT Gen3 switch devices: RXS1632 and
RXS2448.
[alexandre.bounine@idt.com: fixup for original driver patch]
Link: http://lkml.kernel.org/r/1469137596-18241-1-git-send-email-alexandre.bounine@idt.com
Link: http://lkml.kernel.org/r/1469125134-16523-14-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:38 -04:00
Alexandre Bounine
1ae842de1d
rapidio: modify for rev.3 specification changes
...
Implement changes made in RapidIO specification rev.3 to LP-Serial Physical
Layer register definitions:
- use per-port register offset calculations based on LP-Serial Extended
Features Block (EFB) Register Map type (I or II) with different
per-port offset step (0x20 vs 0x40 respectfully).
- remove deprecated Parallel Physical layer definitions and related
code.
[alexandre.bounine@idt.com: fix DocBook warning for gen3 update]
Link: http://lkml.kernel.org/r/1469191173-19338-1-git-send-email-alexandre.bounine@idt.com
Link: http://lkml.kernel.org/r/1469125134-16523-12-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:37 -04:00
Alexandre Bounine
a057a52e94
rapidio: change inbound window size type to u64
...
Current definition of map_inb() mport operations callback uses u32 type
to specify required inbound window (IBW) size. This is limiting factor
because existing hardware - tsi721 and fsl_rio, both support IBW size up
to 16GB.
Changing type of size parameter to u64 to allow IBW size configurations
larger than 4GB.
[alexandre.bounine@idt.com: remove compiler warning about size of constant]
Link: http://lkml.kernel.org/r/20160802184856.2566-1-alexandre.bounine@idt.com
Link: http://lkml.kernel.org/r/1469125134-16523-11-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:37 -04:00
Alexandre Bounine
60e377b5c1
rapidio/idt_gen2: fix locking warning
...
Fix lockdep warning during device probing: move sysfs initialization out
of code protected by a spin lock.
Link: http://lkml.kernel.org/r/1469125134-16523-10-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:36 -04:00
Alexandre Bounine
06e1b2497c
rapidio: fix error handling in mbox request/release functions
...
Add checking for error code returned by HW-specific mbox open routines.
Ensure that resources are properly release if failed.
This patch is applicable to kernel versions starting from v2.6.15.
Link: http://lkml.kernel.org/r/1469125134-16523-9-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:36 -04:00
Alexandre Bounine
f5485eb0b6
rapidio/tsi721_dma: advance queue processing from transfer submit call
...
Add advancing transfer queue immediately from transfer submit call. DMA
performance improvement: This will start transfer without waiting for
'issue_pending' command if there is no DMA transfer in progress.
Link: http://lkml.kernel.org/r/1469125134-16523-8-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:35 -04:00
Alexandre Bounine
e519685de3
rapidio/tsi721: add messaging mbox selector parameter
...
Add module parameter to allow load time configuration of available
RapidIO messaging mailboxes (MBOX1 - MBOX4).
Having a messaging MBOX selector mask allows to define which MBOXes are
controlled by the mport device driver and reserve some of them for
direct use by other drivers.
Link: http://lkml.kernel.org/r/1469125134-16523-7-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:34 -04:00
Alexandre Bounine
cb782cdd2f
rapidio/tsi721: add PCIe MRRS override parameter
...
Add PCIe Maximum Read Request Size (MRRS) adjustment parameter to allow
users to override configuration register value set during PCIe bus
initialization.
Performance of Tsi721 device as PCIe bus master can be improved if MRRS
is set to its maximum value (4096 bytes). Some platforms have
limitations for supported MRRS and therefore the default value should be
preserved, unless it is known that given platform supports full set of
MRRS values defined by PCI Express specification.
Link: http://lkml.kernel.org/r/1469125134-16523-6-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:34 -04:00
Alexandre Bounine
4498c31adf
rapidio/tsi721_dma: add channel mask and queue size parameters
...
Add module parameters to allow load time configuration of DMA channels.
Depending on application, performance of DMA data transfers can benefit
from adjusted sizes of buffer descriptor ring and/or transaction
requests queue.
Having HW DMA channel selector mask allows to define which channels
(from seven available) are controlled by the mport device driver and
reserve some of them for direct use by other drivers.
Link: http://lkml.kernel.org/r/1469125134-16523-5-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:33 -04:00
Alexandre Bounine
f8e3a68c05
rapidio: fix return value description for dma_prep functions
...
Update return value description for rio_dma_prep_... functions to
include error-valued pointer that can be returned by HW mport device
drivers. Return values from these functions must be checked using
IS_ERR_OR_NULL macro.
This patch is applicable to kernel versions starting from v4.6-rc1.
Link: http://lkml.kernel.org/r/1469125134-16523-4-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:33 -04:00
Joe Perches
ea87b8e1f7
rapidio: remove unnecessary 0x prefixes before %pa extension uses
...
Patch series "RapidIO subsystem updates".
This set of patches contains RapidIO subsystem fixes and updates that
have been made since kernel v4.6. The most significant update brings
changes related to the latest revision of RapidIO specification
(rev.3.x) and introduction of next generation of RapidIO switches by IDT
(RXS1632 and RXS2448).
This patch (of 13):
This is RapidIO part of the original patch submitted by Joe Perches.
(see: https://lkml.org/lkml/2016/3/5/19 )
Since commit 3cab1e7112 ("lib/vsprintf: refactor duplicate code
to special_hex_number()") %pa uses have been output with a 0x prefix.
These 0x prefixes in the formats are unnecessary.
Link: http://lkml.kernel.org/r/1469125134-16523-2-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Joe Perches <joe@perches.com >
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:32 -04:00
Alexandre Bounine
b6e8d4aa11
rapidio: add RapidIO channelized messaging driver
...
Add channelized messaging driver to support native RapidIO messaging
exchange between multiple senders/recipients on devices that use kernel
RapidIO subsystem services.
This device driver is the result of collaboration within the RapidIO.org
Software Task Group (STG) between Texas Instruments, Prodrive
Technologies, Nokia Networks, BAE and IDT. Additional input was
received from other members of RapidIO.org.
The objective was to create a character mode driver interface which
exposes messaging capabilities of RapidIO endpoint devices (mports)
directly to applications, in a manner that allows the numerous and
varied RapidIO implementations to interoperate.
This char mode device driver allows user-space applications to setup
messaging communication channels using single shared RapidIO messaging
mailbox.
By default this driver uses RapidIO MBOX_1 (MBOX_0 is reserved for use by
RIONET Ethernet emulation driver).
[weiyj.lk@gmail.com: rapidio/rio_cm: fix return value check in riocm_init()]
Link: http://lkml.kernel.org/r/1469198221-21970-1-git-send-email-alexandre.bounine@idt.com
Link: http://lkml.kernel.org/r/1468952862-18056-1-git-send-email-alexandre.bounine@idt.com
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-08-02 19:35:31 -04:00
Alexandre Bounine
4e1016dac1
rapidio/mport_cdev: fix uapi type definitions
...
Fix problems in uapi definitions reported by Gabriel Laskar: (see
https://lkml.org/lkml/2016/4/5/205 for details)
- move public header file rio_mport_cdev.h to include/uapi/linux directory
- change types in data structures passed as IOCTL parameters
- improve parameter checking in some IOCTL service routines
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Reported-by: Gabriel Laskar <gabriel@lse.epita.fr >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Gabriel Laskar <gabriel@lse.epita.fr >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-05-05 17:38:53 -07:00
Vladimir Zapolskiy
99f23c2cde
rapidio: fix potential NULL pointer dereference
...
The change fixes improper check for a returned error value by
class_create() function, which on error returns ERR_PTR() value, thus the
original check always results in a dead code on error path.
Signed-off-by: Vladimir Zapolskiy <vz@mleia.com >
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-04-28 19:34:04 -07:00
Linus Torvalds
cb107161df
Convert straggling drivers to new six-argument get_user_pages()
...
Commit d4edcf0d56 ("mm/gup: Switch all callers of get_user_pages() to
not pass tsk/mm") switched get_user_pages() callers to the simpler model
where they no longer pass in the thread and mm pointer. But since then
we've merged changes to a few drivers that re-introduce use of the old
interface. Let's fix them up.
They continued to work fine (thanks to the truly disgusting macros
introduced in commit cde70140fe : "mm/gup: Overload get_user_pages()
functions"), but cause unnecessary build noise.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-04-02 18:35:05 -05:00
Alexandre Bounine
e8de370188
rapidio: add mport char device driver
...
Add mport character device driver to provide user space interface to
basic RapidIO subsystem operations.
See included Documentation/rapidio/mport_cdev.txt for more details.
[akpm@linux-foundation.org: fix printk warning on i386]
[dan.carpenter@oracle.com: mport_cdev: fix some error codes]
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Tested-by: Barry Wood <barry.wood@idt.com>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Aurelien Jacquiot <a-jacquiot@ti.com>
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com>
Cc: Barry Wood <barry.wood@idt.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-03-22 15:36:02 -07:00
Alexandre Bounine
458bdf6e39
rapidio/tsi721_dma: fix hardware error handling
...
Add DMA channel re-initialization after an error to avoid termination of
all pending transfer requests.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Reported-by: Barry Wood <barry.wood@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
e680b672a2
rapidio/tsi721_dma: fix synchronization issues
...
Fix synchronization issues found during testing using multiple DMA
transfer requests to the same channel:
- lost MSI-X interrupt notifications
- non-synchronized attempts to start DMA channel HW resulting in error
message from the driver
- cookie tracking/update race conditions resulting in incorrect DMA
transfer status report
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Reported-by: Barry Wood <barry.wood@idt.com >
Tested-by: Barry Wood <barry.wood@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Barry Wood <barry.wood@idt.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
8347245750
rapidio/tsi721_dma: update error reporting from prep_sg callback
...
Switch to returning error-valued pointer instead of simple NULL pointer.
This allows to properly identify situation when request queue is full
and therefore gives to upper layer an option to retry operation later.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
72d8a0d230
rapidio/tsi721: add filtered debug output
...
Replace "all-or-nothing" debug output with controlled debug output using
functional block masks. This allows run time control of debug messages
through 'dbg_level' module parameter.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
1679e8dabf
rapidio/tsi721: add outbound windows mapping support
...
Add device-specific callback functions to support outbound windows
mapping and release.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
93bdaca501
rapidio: add outbound window support
...
Add RapidIO controller (mport) outbound window configuration operations.
This patch is a part of the original patch submitted by Li Yang:
https://lists.ozlabs.org/pipermail/linuxppc-dev/2009-April/071210.html
For some reason the original part was not applied to mainline code
tree. The inbound window mapping part has been applied later during
tsi721 mport driver submission. Now goes the second part with
corresponding HW support.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Li Yang <leoli@freescale.com >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
2ece1caf66
rapidio/tsi721: fix locking in OB_MSG processing
...
- Add spinlock protection into outbound message queuing routine.
- Change outbound message interrupt handler to avoid deadlock when
calling registered callback routine.
- Allow infinite retries for outbound messages to avoid retry threshold
error signaling in systems with nodes that have slow message receive
queue processing.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
9a0b062742
rapidio: add global inbound port write interfaces
...
Add new Port Write handler registration interfaces that attach PW
handlers to local mport device objects. This is different from old
interface that attaches PW callback to individual RapidIO device. The
new interfaces are intended for use for common event handling (e.g.
hot-plug notifications) while the old interface is available for
individual device drivers.
This patch is based on patch proposed by Andre van Herk but preserves
existing per-device interface and adds lock protection for list
handling.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Cc: Stephen Rothwell <sfr@canb.auug.org.au >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
b6cb95e8eb
rapidio: move rio_pw_enable into core code
...
Make rio_pw_enable() routine available to other RapidIO drivers.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
5024622f58
rapidio: move rio_local_set_device_id function to the common core
...
Make function rio_local_set_device_id() common for all components of
RapidIO subsystem.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
a7b4c636d8
rapidio: add lock protection for doorbell list
...
Add lock protection around doorbell list handling to prevent list
corruption on SMP platforms.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
748353cc2d
rapidio/tsi721: add HW specific mport removal
...
Add hardware-specific device removal support for Tsi721 PCIe-to-RapidIO
bridge. To avoid excessive data type conversions, parameters passed to
some internal functions have been revised. Dynamic memory allocations
of rio_mport and rio_ops have been replaced to reduce references between
data structures.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
b77a2030df
rapidio: add core mport removal support
...
Add common mport removal support functions into the RapidIO subsystem
core.
Changes to the existing mport registration process have been made to
avoid race conditions with active subsystem interfaces immediately after
mport device registration: part of initialization code from
rio_register_mport() have been moved into separate function
rio_mport_initialize() to allow to perform mport registration as the
final step of setup process.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
e6b585ca6e
rapidio: move net allocation into core code
...
Make net allocation/release routines available to all components of
RapidIO subsystem by moving code from rio-scan enumerator.
Make destination ID allocation method private to existing enumerator
because other enumeration methods can use their own algorithm.
Setup net device object as a parent of all RapidIO devices residing in
it and register net as a child of active mport device.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
b74ec56e8a
rapidio: rework common RIO device add/delete routines
...
This patch moves per-net device list handling from rio-scan to common
RapidIO core and adds a matching device deletion routine. This makes
device object creation/removal available to other implementations of
enumeration/discovery process.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
e3dd8cd477
rapidio/tsi721: add shutdown notification callback
...
Add device driver specific shutdown notification callback.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
83dc2cbc11
rapidio: add shutdown notification for RapidIO devices
...
Add bus-specific callback to stop RapidIO devices during a system
shutdown.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00
Alexandre Bounine
dbe74afe6a
rapidio/tsi721: add query_mport callback
...
Add device-specific implementation of query_mport callback function.
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com >
Cc: Matt Porter <mporter@kernel.crashing.org >
Cc: Aurelien Jacquiot <a-jacquiot@ti.com >
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2016-03-22 15:36:02 -07:00