Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cb2d2cdbc66d9143159ee0381ad83975de56a57d
Commit:     cb2d2cdbc66d9143159ee0381ad83975de56a57d
Parent:     d2746dc192e8b9446ea1cb843e94c30f177b7e54
Author:     Kristian Høgsberg <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 16 17:34:47 2007 -0500
Committer:  Stefan Richter <[EMAIL PROTECTED]>
CommitDate: Fri Mar 9 22:03:02 2007 +0100

    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: Kristian Høgsberg <[EMAIL PROTECTED]>
    Signed-off-by: Stefan Richter <[EMAIL PROTECTED]>
---
 drivers/firewire/fw-ohci.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
index 9b9ea0f..18769d9 100644
--- a/drivers/firewire/fw-ohci.c
+++ b/drivers/firewire/fw-ohci.c
@@ -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;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to