diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2009-01-05 14:28:10 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2009-03-24 15:56:46 -0400 |
commit | 36a755cfc398fc50abc74055d4478c1b067dac55 (patch) | |
tree | fbf8208d5b0314ee9b523a9edaf0b3343e4add39 /drivers/firewire/fw-cdev.c | |
parent | 3ba949868a6dc082b24cba5c3bf3f50de7391433 (diff) |
firewire: cdev: shut down iso context before freeing the buffer
DMA must be halted before we DMA-unmap and free the DMA buffer. Since
we cannot rely on the client to stop the context before it closes the
fd, we have to reorder fw_iso_buffer_destroy vs. fw_iso_context_destroy.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/fw-cdev.c')
-rw-r--r-- | drivers/firewire/fw-cdev.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c index 3d816a6395cd..b93ad9c0a0d0 100644 --- a/drivers/firewire/fw-cdev.c +++ b/drivers/firewire/fw-cdev.c | |||
@@ -1386,12 +1386,12 @@ static int fw_device_op_release(struct inode *inode, struct file *file) | |||
1386 | list_del(&client->link); | 1386 | list_del(&client->link); |
1387 | mutex_unlock(&client->device->client_list_mutex); | 1387 | mutex_unlock(&client->device->client_list_mutex); |
1388 | 1388 | ||
1389 | if (client->buffer.pages) | ||
1390 | fw_iso_buffer_destroy(&client->buffer, client->device->card); | ||
1391 | |||
1392 | if (client->iso_context) | 1389 | if (client->iso_context) |
1393 | fw_iso_context_destroy(client->iso_context); | 1390 | fw_iso_context_destroy(client->iso_context); |
1394 | 1391 | ||
1392 | if (client->buffer.pages) | ||
1393 | fw_iso_buffer_destroy(&client->buffer, client->device->card); | ||
1394 | |||
1395 | /* Freeze client->resource_idr and client->event_list */ | 1395 | /* Freeze client->resource_idr and client->event_list */ |
1396 | spin_lock_irq(&client->lock); | 1396 | spin_lock_irq(&client->lock); |
1397 | client->in_shutdown = true; | 1397 | client->in_shutdown = true; |