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/firewire/core-cdev.c | |
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/firewire/core-cdev.c')
-rw-r--r-- | drivers/firewire/core-cdev.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 62ac111af243..2a3f1c4d6906 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c | |||
@@ -141,7 +141,6 @@ struct iso_resource { | |||
141 | int generation; | 141 | int generation; |
142 | u64 channels; | 142 | u64 channels; |
143 | s32 bandwidth; | 143 | s32 bandwidth; |
144 | __be32 transaction_data[2]; | ||
145 | struct iso_resource_event *e_alloc, *e_dealloc; | 144 | struct iso_resource_event *e_alloc, *e_dealloc; |
146 | }; | 145 | }; |
147 | 146 | ||
@@ -1229,8 +1228,7 @@ static void iso_resource_work(struct work_struct *work) | |||
1229 | r->channels, &channel, &bandwidth, | 1228 | r->channels, &channel, &bandwidth, |
1230 | todo == ISO_RES_ALLOC || | 1229 | todo == ISO_RES_ALLOC || |
1231 | todo == ISO_RES_REALLOC || | 1230 | todo == ISO_RES_REALLOC || |
1232 | todo == ISO_RES_ALLOC_ONCE, | 1231 | todo == ISO_RES_ALLOC_ONCE); |
1233 | r->transaction_data); | ||
1234 | /* | 1232 | /* |
1235 | * Is this generation outdated already? As long as this resource sticks | 1233 | * Is this generation outdated already? As long as this resource sticks |
1236 | * in the idr, it will be scheduled again for a newer generation or at | 1234 | * in the idr, it will be scheduled again for a newer generation or at |