Commit ec5cbf04 authored by Webb Scales's avatar Webb Scales Committed by James Bottomley

hpsa: move SG descriptor set-up out of hpsa_scatter_gather()

Move the code which sets up the SG descriptor out of hpsa_scatter_gather()
and into a subroutine where it can be reused (in the next patch).  The Ext
field is now assigned unconditionally: this makes the refactor much simpler,
but more importantly it removes a conditional operation from inside the
loop.  The case for which the conditional formerly tested is now executed
(unconditionally) after the loop is exited.
Reviewed-by: default avatarScott Teel <scott.teel@pmcs.com>
Signed-off-by: default avatarWebb Scales <webbnh@hp.com>
Signed-off-by: default avatarDon Brace <don.brace@pmcs.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent c05e8866
...@@ -3236,6 +3236,17 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno) ...@@ -3236,6 +3236,17 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
kfree(id_phys); kfree(id_phys);
} }
static void hpsa_set_sg_descriptor(struct SGDescriptor *desc,
struct scatterlist *sg)
{
u64 addr64 = (u64) sg_dma_address(sg);
unsigned int len = sg_dma_len(sg);
desc->Addr = cpu_to_le64(addr64);
desc->Len = cpu_to_le32(len);
desc->Ext = 0;
}
/* /*
* hpsa_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci * hpsa_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci
* dma mapping and fills in the scatter gather entries of the * dma mapping and fills in the scatter gather entries of the
...@@ -3245,9 +3256,7 @@ static int hpsa_scatter_gather(struct ctlr_info *h, ...@@ -3245,9 +3256,7 @@ static int hpsa_scatter_gather(struct ctlr_info *h,
struct CommandList *cp, struct CommandList *cp,
struct scsi_cmnd *cmd) struct scsi_cmnd *cmd)
{ {
unsigned int len;
struct scatterlist *sg; struct scatterlist *sg;
u64 addr64;
int use_sg, i, sg_index, chained; int use_sg, i, sg_index, chained;
struct SGDescriptor *curr_sg; struct SGDescriptor *curr_sg;
...@@ -3270,13 +3279,11 @@ static int hpsa_scatter_gather(struct ctlr_info *h, ...@@ -3270,13 +3279,11 @@ static int hpsa_scatter_gather(struct ctlr_info *h,
curr_sg = h->cmd_sg_list[cp->cmdindex]; curr_sg = h->cmd_sg_list[cp->cmdindex];
sg_index = 0; sg_index = 0;
} }
addr64 = (u64) sg_dma_address(sg); hpsa_set_sg_descriptor(curr_sg, sg);
len = sg_dma_len(sg);
curr_sg->Addr = cpu_to_le64(addr64);
curr_sg->Len = cpu_to_le32(len);
curr_sg->Ext = cpu_to_le32(0);
curr_sg++; curr_sg++;
} }
/* Back the pointer up to the last entry and mark it as "last". */
(--curr_sg)->Ext = cpu_to_le32(HPSA_SG_LAST); (--curr_sg)->Ext = cpu_to_le32(HPSA_SG_LAST);
if (use_sg + chained > h->maxSG) if (use_sg + chained > h->maxSG)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment