firewire: core: fix crash in iso resource management
This fixes a regression due to post 2.6.30 commit "firewire: core: do
not DMA-map stack addresses" 6fdc037094
.
As David Moore noted, a previously correct sizeof() expression became
wrong since the commit changed its argument from an array to a pointer.
This resulted in an oops in ohci_cancel_packet in the shared workqueue
thread's context when an isochronous resource was to be freed.
Reported-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
Родитель
ebbb16bffa
Коммит
1821bc19d5
|
@ -196,7 +196,7 @@ static int manage_bandwidth(struct fw_card *card, int irm_id, int generation,
|
||||||
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
||||||
irm_id, generation, SCODE_100,
|
irm_id, generation, SCODE_100,
|
||||||
CSR_REGISTER_BASE + CSR_BANDWIDTH_AVAILABLE,
|
CSR_REGISTER_BASE + CSR_BANDWIDTH_AVAILABLE,
|
||||||
data, sizeof(data))) {
|
data, 8)) {
|
||||||
case RCODE_GENERATION:
|
case RCODE_GENERATION:
|
||||||
/* A generation change frees all bandwidth. */
|
/* A generation change frees all bandwidth. */
|
||||||
return allocate ? -EAGAIN : bandwidth;
|
return allocate ? -EAGAIN : bandwidth;
|
||||||
|
@ -233,7 +233,7 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation,
|
||||||
data[1] = old ^ c;
|
data[1] = old ^ c;
|
||||||
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
||||||
irm_id, generation, SCODE_100,
|
irm_id, generation, SCODE_100,
|
||||||
offset, data, sizeof(data))) {
|
offset, data, 8)) {
|
||||||
case RCODE_GENERATION:
|
case RCODE_GENERATION:
|
||||||
/* A generation change frees all channels. */
|
/* A generation change frees all channels. */
|
||||||
return allocate ? -EAGAIN : i;
|
return allocate ? -EAGAIN : i;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче