提交 cb2d2cdb 编写于 作者: K Kristian Høgsberg 提交者: Stefan Richter

firewire: Don't touch DMA descriptors after appending.

When a DMA descriptor is appended to the context we sync it for
DMA and the device might potentially read it immediately.  So,
we can't set the IRQ bits in the descriptor after appending.
Signed-off-by: NKristian Høgsberg <krh@redhat.com>
Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
上级 d2746dc1
......@@ -1621,15 +1621,15 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
page_bus = page_private(buffer->pages[page]);
db->second_buffer = cpu_to_le32(page_bus + offset);
if (p->interrupt && length == rest)
db->control |= cpu_to_le16(descriptor_irq_always);
context_append(&ctx->context, d, z, header_z);
offset = (offset + length) & ~PAGE_MASK;
rest -= length;
page++;
}
if (p->interrupt)
db->control |= cpu_to_le16(descriptor_irq_always);
return 0;
}
......@@ -1668,6 +1668,9 @@ ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base,
d->req_count = cpu_to_le16(length);
d->res_count = cpu_to_le16(length);
if (packet->interrupt && length == rest)
d->control |= cpu_to_le16(descriptor_irq_always);
context_append(&ctx->context, d, 1, 0);
offset = (offset + length) & ~PAGE_MASK;
......@@ -1675,9 +1678,6 @@ ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base,
page++;
}
if (packet->interrupt)
d->control |= cpu_to_le16(descriptor_irq_always);
return 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册