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>
This commit is contained in:
parent
3ba949868a
commit
36a755cfc3
@ -1386,12 +1386,12 @@ static int fw_device_op_release(struct inode *inode, struct file *file)
|
|||||||
list_del(&client->link);
|
list_del(&client->link);
|
||||||
mutex_unlock(&client->device->client_list_mutex);
|
mutex_unlock(&client->device->client_list_mutex);
|
||||||
|
|
||||||
if (client->buffer.pages)
|
|
||||||
fw_iso_buffer_destroy(&client->buffer, client->device->card);
|
|
||||||
|
|
||||||
if (client->iso_context)
|
if (client->iso_context)
|
||||||
fw_iso_context_destroy(client->iso_context);
|
fw_iso_context_destroy(client->iso_context);
|
||||||
|
|
||||||
|
if (client->buffer.pages)
|
||||||
|
fw_iso_buffer_destroy(&client->buffer, client->device->card);
|
||||||
|
|
||||||
/* Freeze client->resource_idr and client->event_list */
|
/* Freeze client->resource_idr and client->event_list */
|
||||||
spin_lock_irq(&client->lock);
|
spin_lock_irq(&client->lock);
|
||||||
client->in_shutdown = true;
|
client->in_shutdown = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user