aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/firewire
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/media/dvb/firewire
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/media/dvb/firewire')
-rw-r--r--drivers/media/dvb/firewire/firedtv-avc.c15
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}