Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8526392ae816a2c69f57097ba032865523019caa
Commit:     8526392ae816a2c69f57097ba032865523019caa
Parent:     b4be016ad81af5a83f0be820edf106de883e6ade
Author:     Stefan Richter <[EMAIL PROTECTED]>
AuthorDate: Mon Jul 2 21:04:08 2007 +0200
Committer:  Stefan Richter <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 00:07:48 2007 +0200

    firewire: fw-sbp2: fix DMA mapping of command ORBs
    
    The CPU must not touch the buffer after it was DMA-mapped.
    
    Signed-off-by: Stefan Richter <[EMAIL PROTECTED]>
    Signed-off-by: Kristian Høgsberg <[EMAIL PROTECTED]>
---
 drivers/firewire/fw-sbp2.c |   15 ++++++---------
 1 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index a2ddf31..f488ff8 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -1009,11 +1009,6 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, 
scsi_done_fn_t done)
 
        /* Initialize rcode to something not RCODE_COMPLETE. */
        orb->base.rcode = -1;
-       orb->base.request_bus =
-               dma_map_single(device->card->device, &orb->request,
-                              sizeof(orb->request), DMA_TO_DEVICE);
-       if (dma_mapping_error(orb->base.request_bus))
-               goto fail_mapping;
 
        orb->unit = unit;
        orb->done = done;
@@ -1040,7 +1035,7 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, 
scsi_done_fn_t done)
                        COMMAND_ORB_DIRECTION(SBP2_DIRECTION_TO_MEDIA);
 
        if (cmd->use_sg && sbp2_command_orb_map_scatterlist(orb) < 0)
-               goto fail_map_payload;
+               goto fail_mapping;
 
        fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
 
@@ -1049,15 +1044,17 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd 
*cmd, scsi_done_fn_t done)
        memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
 
        orb->base.callback = complete_command_orb;
+       orb->base.request_bus =
+               dma_map_single(device->card->device, &orb->request,
+                              sizeof(orb->request), DMA_TO_DEVICE);
+       if (dma_mapping_error(orb->base.request_bus))
+               goto fail_mapping;
 
        sbp2_send_orb(&orb->base, unit, sd->node_id, sd->generation,
                      sd->command_block_agent_address + SBP2_ORB_POINTER);
 
        return 0;
 
- fail_map_payload:
-       dma_unmap_single(device->card->device, orb->base.request_bus,
-                        sizeof(orb->request), DMA_TO_DEVICE);
  fail_mapping:
        kfree(orb);
  fail_alloc:
-
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