when attempting to find the 'last' part of the dma region continue the
search from where we left off, instead of starting the search over.
Signed-off-by: Jim Westfall <[email protected]>
--- linux-2.6.15.4/drivers/ieee1394/dma.c.orig 2006-03-01 13:37:45.000000000 -0800
+++ linux-2.6.15.4/drivers/ieee1394/dma.c 2006-03-01 14:32:16.000000000 -0800
@@ -137,12 +137,12 @@ void dma_region_free(struct dma_region *
/* find the scatterlist index and remaining offset corresponding to a
given offset from the beginning of the buffer */
-static inline int dma_region_find(struct dma_region *dma, unsigned long offset, unsigned long *rem)
+static inline int dma_region_find(struct dma_region *dma, unsigned long offset, unsigned int start, unsigned long *rem)
{
int i;
unsigned long off = offset;
- for (i = 0; i < dma->n_dma_pages; i++) {
+ for (i = start; i < dma->n_dma_pages; i++) {
if (off < sg_dma_len(&dma->sglist[i])) {
*rem = off;
break;
@@ -160,7 +160,7 @@ dma_addr_t dma_region_offset_to_bus(stru
{
unsigned long rem = 0;
- struct scatterlist *sg = &dma->sglist[dma_region_find(dma, offset, &rem)];
+ struct scatterlist *sg = &dma->sglist[dma_region_find(dma, offset, 0, &rem)];
return sg_dma_address(sg) + rem;
}
@@ -172,8 +172,8 @@ void dma_region_sync_for_cpu(struct dma_
if (!len)
len = 1;
- first = dma_region_find(dma, offset, &rem);
- last = dma_region_find(dma, offset + len - 1, &rem);
+ first = dma_region_find(dma, offset, 0, &rem);
+ last = dma_region_find(dma, rem + len - 1, first, &rem);
pci_dma_sync_sg_for_cpu(dma->dev, &dma->sglist[first], last - first + 1, dma->direction);
}
@@ -186,8 +186,8 @@ void dma_region_sync_for_device(struct d
if (!len)
len = 1;
- first = dma_region_find(dma, offset, &rem);
- last = dma_region_find(dma, offset + len - 1, &rem);
+ first = dma_region_find(dma, offset, 0, &rem);
+ last = dma_region_find(dma, rem + len - 1, first, &rem);
pci_dma_sync_sg_for_device(dma->dev, &dma->sglist[first], last - first + 1, dma->direction);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]