aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire/core-transaction.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2011-04-22 09:13:54 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2011-05-10 16:53:44 -0400
commitf30e6d3e419bfb5540fa82ba7eca01d578556e6b (patch)
treee4d6e7bad161a76b09557bf7513358ae1ce8f7fb /drivers/firewire/core-transaction.c
parent020abf03cd659388f94cb328e1e1df0656e0d7ff (diff)
firewire: octlet AT payloads can be stack-allocated
We do not need slab allocations anymore in order to satisfy streaming DMA mapping constraints, thanks to commit da28947e7e36 "firewire: ohci: avoid separate DMA mapping for small AT payloads". (Besides, the slab-allocated buffers that firewire-core, firewire-sbp2, and firedtv used to provide for 8-byte write and lock requests were still not fully portable since they crossed cacheline boundaries or shared a cacheline with unrelated CPU-accessed data. snd-firewire-lib got this aspect right by using an extra kmalloc/ kfree just for the 8-byte transaction buffer.) This change replaces kmalloc'ed lock transaction scratch buffers in firewire-core, firedtv, and snd-firewire-lib by local stack allocations. Perhaps the most notable result of the change is simpler locking because there is no need to serialize usages of preallocated per-device buffers anymore. Also, allocations and deallocations are simpler. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Acked-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'drivers/firewire/core-transaction.c')
-rw-r--r--drivers/firewire/core-transaction.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c
index d00f8ce902cc..77275fdf6c1f 100644
--- a/drivers/firewire/core-transaction.c
+++ b/drivers/firewire/core-transaction.c
@@ -326,8 +326,8 @@ static int allocate_tlabel(struct fw_card *card)
326 * It will contain tag, channel, and sy data instead of a node ID then. 326 * It will contain tag, channel, and sy data instead of a node ID then.
327 * 327 *
328 * The payload buffer at @data is going to be DMA-mapped except in case of 328 * The payload buffer at @data is going to be DMA-mapped except in case of
329 * quadlet-sized payload or of local (loopback) requests. Hence make sure that 329 * @length <= 8 or of local (loopback) requests. Hence make sure that the
330 * the buffer complies with the restrictions for DMA-mapped memory. The 330 * buffer complies with the restrictions of the streaming DMA mapping API.
331 * @payload must not be freed before the @callback is called. 331 * @payload must not be freed before the @callback is called.
332 * 332 *
333 * In case of request types without payload, @data is NULL and @length is 0. 333 * In case of request types without payload, @data is NULL and @length is 0.
@@ -411,7 +411,8 @@ static void transaction_callback(struct fw_card *card, int rcode,
411 * 411 *
412 * Returns the RCODE. See fw_send_request() for parameter documentation. 412 * Returns the RCODE. See fw_send_request() for parameter documentation.
413 * Unlike fw_send_request(), @data points to the payload of the request or/and 413 * Unlike fw_send_request(), @data points to the payload of the request or/and
414 * to the payload of the response. 414 * to the payload of the response. DMA mapping restrictions apply to outbound
415 * request payloads of >= 8 bytes but not to inbound response payloads.
415 */ 416 */
416int fw_run_transaction(struct fw_card *card, int tcode, int destination_id, 417int fw_run_transaction(struct fw_card *card, int tcode, int destination_id,
417 int generation, int speed, unsigned long long offset, 418 int generation, int speed, unsigned long long offset,