diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2011-04-22 09:13:54 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2011-05-10 16:53:44 -0400 |
commit | f30e6d3e419bfb5540fa82ba7eca01d578556e6b (patch) | |
tree | e4d6e7bad161a76b09557bf7513358ae1ce8f7fb /drivers/media/dvb/firewire | |
parent | 020abf03cd659388f94cb328e1e1df0656e0d7ff (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/media/dvb/firewire')
-rw-r--r-- | drivers/media/dvb/firewire/firedtv-avc.c | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/drivers/media/dvb/firewire/firedtv-avc.c b/drivers/media/dvb/firewire/firedtv-avc.c index fc5ccd8c923a..21c52e3b522e 100644 --- a/drivers/media/dvb/firewire/firedtv-avc.c +++ b/drivers/media/dvb/firewire/firedtv-avc.c | |||
@@ -1320,14 +1320,10 @@ static int cmp_read(struct firedtv *fdtv, u64 addr, __be32 *data) | |||
1320 | { | 1320 | { |
1321 | int ret; | 1321 | int ret; |
1322 | 1322 | ||
1323 | mutex_lock(&fdtv->avc_mutex); | ||
1324 | |||
1325 | ret = fdtv_read(fdtv, addr, data); | 1323 | ret = fdtv_read(fdtv, addr, data); |
1326 | if (ret < 0) | 1324 | if (ret < 0) |
1327 | dev_err(fdtv->device, "CMP: read I/O error\n"); | 1325 | dev_err(fdtv->device, "CMP: read I/O error\n"); |
1328 | 1326 | ||
1329 | mutex_unlock(&fdtv->avc_mutex); | ||
1330 | |||
1331 | return ret; | 1327 | return ret; |
1332 | } | 1328 | } |
1333 | 1329 | ||
@@ -1335,18 +1331,9 @@ static int cmp_lock(struct firedtv *fdtv, u64 addr, __be32 data[]) | |||
1335 | { | 1331 | { |
1336 | int ret; | 1332 | int ret; |
1337 | 1333 | ||
1338 | mutex_lock(&fdtv->avc_mutex); | 1334 | ret = fdtv_lock(fdtv, addr, data); |
1339 | |||
1340 | /* data[] is stack-allocated and should not be DMA-mapped. */ | ||
1341 | memcpy(fdtv->avc_data, data, 8); | ||
1342 | |||
1343 | ret = fdtv_lock(fdtv, addr, fdtv->avc_data); | ||
1344 | if (ret < 0) | 1335 | if (ret < 0) |
1345 | dev_err(fdtv->device, "CMP: lock I/O error\n"); | 1336 | dev_err(fdtv->device, "CMP: lock I/O error\n"); |
1346 | else | ||
1347 | memcpy(data, fdtv->avc_data, 8); | ||
1348 | |||
1349 | mutex_unlock(&fdtv->avc_mutex); | ||
1350 | 1337 | ||
1351 | return ret; | 1338 | return ret; |
1352 | } | 1339 | } |