OpenCloudOS-Kernel/drivers/rapidio
Ioan Nicu bbd876adb8 rapidio: use a reference count for struct mport_dma_req
Once the dma request is passed to the DMA engine, the DMA subsystem
would hold a pointer to this structure and could call the completion
callback after do_dma_request() has timed out.

The current code deals with this by putting timed out SYNC requests to a
pending list and freeing them later, when the mport cdev device is
released.  This still does not guarantee that the DMA subsystem is
really done with those transfers, so in theory
dma_xfer_callback/dma_req_free could be called after
mport_cdev_release_dma and could potentially access already freed
memory.

This patch simplifies the current handling by using a kref in the mport
dma request structure, so that it gets freed only when nobody uses it
anymore.

This also simplifies the code a bit, as FAF transfers are now handled in
the same way as SYNC and ASYNC transfers.  There is no need anymore for
the pending list and for the dma workqueue which was used in case of FAF
transfers, so we remove them both.

Link: http://lkml.kernel.org/r/20180405203342.GA16191@nokia.com
Signed-off-by: Ioan Nicu <ioan.nicu.ext@nokia.com>
Acked-by: Alexandre Bounine <alex.bou9@gmail.com>
Cc: Barry Wood <barry.wood@idt.com>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Logan Gunthorpe <logang@deltatee.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Frank Kunz <frank.kunz@nokia.com>
Cc: Alexander Sverdlin <alexander.sverdlin@nokia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-04-11 10:28:37 -07:00
..
devices rapidio: use a reference count for struct mport_dma_req 2018-04-11 10:28:37 -07:00
switches rapidio: constify rio_device_id 2017-11-17 16:10:03 -08:00
Kconfig rapidio: add RapidIO channelized messaging driver 2016-08-02 19:35:31 -04:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rio-access.c rapidio: remove global irq spinlocks from the subsystem 2017-10-03 17:54:24 -07:00
rio-driver.c rapidio: add shutdown notification for RapidIO devices 2016-03-22 15:36:02 -07:00
rio-scan.c drivers/rapidio/rio-scan.c: fix typo in comment 2018-04-11 10:28:37 -07:00
rio-sysfs.c rapidio: use is_visible() to hide switch-specific attributes 2017-03-17 15:10:49 +09:00
rio.c rapidio: move 12 EXPORT_SYMBOL_GPL() calls to function implementations 2018-02-06 18:32:46 -08:00
rio.h rapidio: use is_visible() to hide switch-specific attributes 2017-03-17 15:10:49 +09:00
rio_cm.c rapidio/rio_cm: use memdup_user() instead of duplicating code 2016-10-11 15:06:32 -07:00