Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
58b053e4
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
58b053e4
编写于
10月 22, 2007
作者:
J
Jens Axboe
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update arch/ to use sg helpers
Signed-off-by:
N
Jens Axboe
<
jens.axboe@oracle.com
>
上级
f9527f12
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
55 addition
and
67 deletion
+55
-67
arch/alpha/kernel/pci_iommu.c
arch/alpha/kernel/pci_iommu.c
+1
-1
arch/arm/common/dmabounce.c
arch/arm/common/dmabounce.c
+1
-1
arch/blackfin/kernel/dma-mapping.c
arch/blackfin/kernel/dma-mapping.c
+1
-2
arch/ia64/hp/common/sba_iommu.c
arch/ia64/hp/common/sba_iommu.c
+1
-1
arch/ia64/hp/sim/simscsi.c
arch/ia64/hp/sim/simscsi.c
+2
-2
arch/ia64/sn/pci/pci_dma.c
arch/ia64/sn/pci/pci_dma.c
+1
-1
arch/m68k/kernel/dma.c
arch/m68k/kernel/dma.c
+1
-1
arch/mips/mm/dma-default.c
arch/mips/mm/dma-default.c
+7
-9
arch/powerpc/kernel/dma_64.c
arch/powerpc/kernel/dma_64.c
+1
-2
arch/powerpc/kernel/ibmebus.c
arch/powerpc/kernel/ibmebus.c
+1
-2
arch/powerpc/kernel/iommu.c
arch/powerpc/kernel/iommu.c
+1
-1
arch/powerpc/platforms/ps3/system-bus.c
arch/powerpc/platforms/ps3/system-bus.c
+2
-3
arch/sparc/kernel/ioport.c
arch/sparc/kernel/ioport.c
+8
-9
arch/sparc/mm/io-unit.c
arch/sparc/mm/io-unit.c
+1
-1
arch/sparc/mm/iommu.c
arch/sparc/mm/iommu.c
+4
-4
arch/sparc/mm/sun4c.c
arch/sparc/mm/sun4c.c
+1
-1
arch/sparc64/kernel/iommu.c
arch/sparc64/kernel/iommu.c
+2
-5
arch/sparc64/kernel/iommu_common.c
arch/sparc64/kernel/iommu_common.c
+6
-7
arch/sparc64/kernel/ldc.c
arch/sparc64/kernel/ldc.c
+1
-1
arch/sparc64/kernel/pci_sun4v.c
arch/sparc64/kernel/pci_sun4v.c
+2
-5
arch/x86/kernel/pci-calgary_64.c
arch/x86/kernel/pci-calgary_64.c
+6
-4
arch/x86/kernel/pci-gart_64.c
arch/x86/kernel/pci-gart_64.c
+2
-2
arch/x86/kernel/pci-nommu_64.c
arch/x86/kernel/pci-nommu_64.c
+2
-2
未找到文件。
arch/alpha/kernel/pci_iommu.c
浏览文件 @
58b053e4
...
...
@@ -465,7 +465,7 @@ EXPORT_SYMBOL(pci_free_consistent);
Write dma_length of each leader with the combined lengths of
the mergable followers. */
#define SG_ENT_VIRT_ADDRESS(SG) (
page_address((SG)->page) + (SG)->offset
)
#define SG_ENT_VIRT_ADDRESS(SG) (
sg_virt((SG))
)
#define SG_ENT_PHYS_ADDRESS(SG) __pa(SG_ENT_VIRT_ADDRESS(SG))
static
void
...
...
arch/arm/common/dmabounce.c
浏览文件 @
58b053e4
...
...
@@ -442,7 +442,7 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
BUG_ON
(
dir
==
DMA_NONE
);
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
struct
page
*
page
=
sg
->
page
;
struct
page
*
page
=
sg
_page
(
sg
)
;
unsigned
int
offset
=
sg
->
offset
;
unsigned
int
length
=
sg
->
length
;
void
*
ptr
=
page_address
(
page
)
+
offset
;
...
...
arch/blackfin/kernel/dma-mapping.c
浏览文件 @
58b053e4
...
...
@@ -160,8 +160,7 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
BUG_ON
(
direction
==
DMA_NONE
);
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
sg
->
dma_address
=
(
dma_addr_t
)(
page_address
(
sg
->
page
)
+
sg
->
offset
);
sg
->
dma_address
=
(
dma_addr_t
)
sg_virt
(
sg
);
invalidate_dcache_range
(
sg_dma_address
(
sg
),
sg_dma_address
(
sg
)
+
...
...
arch/ia64/hp/common/sba_iommu.c
浏览文件 @
58b053e4
...
...
@@ -246,7 +246,7 @@ static int reserve_sba_gart = 1;
static
SBA_INLINE
void
sba_mark_invalid
(
struct
ioc
*
,
dma_addr_t
,
size_t
);
static
SBA_INLINE
void
sba_free_range
(
struct
ioc
*
,
dma_addr_t
,
size_t
);
#define sba_sg_address(sg)
(page_address((sg)->page) + (sg)->offset
)
#define sba_sg_address(sg)
sg_virt((sg)
)
#ifdef FULL_VALID_PDIR
static
u64
prefetch_spill_page
;
...
...
arch/ia64/hp/sim/simscsi.c
浏览文件 @
58b053e4
...
...
@@ -131,7 +131,7 @@ simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset)
stat
.
fd
=
desc
[
sc
->
device
->
id
];
scsi_for_each_sg
(
sc
,
sl
,
scsi_sg_count
(
sc
),
i
)
{
req
.
addr
=
__pa
(
page_address
(
sl
->
page
)
+
sl
->
offset
);
req
.
addr
=
__pa
(
sg_virt
(
sl
)
);
req
.
len
=
sl
->
length
;
if
(
DBG
)
printk
(
"simscsi_sg_%s @ %lx (off %lx) use_sg=%d len=%d
\n
"
,
...
...
@@ -212,7 +212,7 @@ static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len)
if
(
!
len
)
break
;
thislen
=
min
(
len
,
slp
->
length
);
memcpy
(
page_address
(
slp
->
page
)
+
slp
->
offset
,
buf
,
thislen
);
memcpy
(
sg_virt
(
slp
)
,
buf
,
thislen
);
len
-=
thislen
;
}
}
...
...
arch/ia64/sn/pci/pci_dma.c
浏览文件 @
58b053e4
...
...
@@ -16,7 +16,7 @@
#include <asm/sn/pcidev.h>
#include <asm/sn/sn_sal.h>
#define SG_ENT_VIRT_ADDRESS(sg) (
page_address((sg)->page) + (sg)->offset
)
#define SG_ENT_VIRT_ADDRESS(sg) (
sg_virt((sg))
)
#define SG_ENT_PHYS_ADDRESS(SG) virt_to_phys(SG_ENT_VIRT_ADDRESS(SG))
/**
...
...
arch/m68k/kernel/dma.c
浏览文件 @
58b053e4
...
...
@@ -121,7 +121,7 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
int
i
;
for
(
i
=
0
;
i
<
nents
;
sg
++
,
i
++
)
{
sg
->
dma_address
=
page_to_phys
(
sg
->
page
)
+
sg
->
offset
;
sg
->
dma_address
=
sg_phys
(
sg
)
;
dma_sync_single_for_device
(
dev
,
sg
->
dma_address
,
sg
->
length
,
dir
);
}
return
nents
;
...
...
arch/mips/mm/dma-default.c
浏览文件 @
58b053e4
...
...
@@ -165,12 +165,11 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
unsigned
long
addr
;
addr
=
(
unsigned
long
)
page_address
(
sg
->
page
);
addr
=
(
unsigned
long
)
sg_virt
(
sg
);
if
(
!
plat_device_is_coherent
(
dev
)
&&
addr
)
__dma_sync
(
addr
+
sg
->
offset
,
sg
->
length
,
direction
);
__dma_sync
(
addr
,
sg
->
length
,
direction
);
sg
->
dma_address
=
plat_map_dma_mem
(
dev
,
(
void
*
)(
addr
+
sg
->
offset
),
sg
->
length
);
(
void
*
)
addr
,
sg
->
length
);
}
return
nents
;
...
...
@@ -223,10 +222,9 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
for
(
i
=
0
;
i
<
nhwentries
;
i
++
,
sg
++
)
{
if
(
!
plat_device_is_coherent
(
dev
)
&&
direction
!=
DMA_TO_DEVICE
)
{
addr
=
(
unsigned
long
)
page_address
(
sg
->
page
);
addr
=
(
unsigned
long
)
sg_virt
(
sg
);
if
(
addr
)
__dma_sync
(
addr
+
sg
->
offset
,
sg
->
length
,
direction
);
__dma_sync
(
addr
,
sg
->
length
,
direction
);
}
plat_unmap_dma_mem
(
sg
->
dma_address
);
}
...
...
@@ -304,7 +302,7 @@ void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
/* Make sure that gcc doesn't leave the empty loop body. */
for
(
i
=
0
;
i
<
nelems
;
i
++
,
sg
++
)
{
if
(
cpu_is_noncoherent_r10000
(
dev
))
__dma_sync
((
unsigned
long
)
page_address
(
sg
->
page
),
__dma_sync
((
unsigned
long
)
page_address
(
sg
_page
(
sg
)
),
sg
->
length
,
direction
);
plat_unmap_dma_mem
(
sg
->
dma_address
);
}
...
...
@@ -322,7 +320,7 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nele
/* Make sure that gcc doesn't leave the empty loop body. */
for
(
i
=
0
;
i
<
nelems
;
i
++
,
sg
++
)
{
if
(
!
plat_device_is_coherent
(
dev
))
__dma_sync
((
unsigned
long
)
page_address
(
sg
->
page
),
__dma_sync
((
unsigned
long
)
page_address
(
sg
_page
(
sg
)
),
sg
->
length
,
direction
);
plat_unmap_dma_mem
(
sg
->
dma_address
);
}
...
...
arch/powerpc/kernel/dma_64.c
浏览文件 @
58b053e4
...
...
@@ -161,8 +161,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
int
i
;
for_each_sg
(
sgl
,
sg
,
nents
,
i
)
{
sg
->
dma_address
=
(
page_to_phys
(
sg
->
page
)
+
sg
->
offset
)
|
dma_direct_offset
;
sg
->
dma_address
=
sg_phys
(
sg
)
|
dma_direct_offset
;
sg
->
dma_length
=
sg
->
length
;
}
...
...
arch/powerpc/kernel/ibmebus.c
浏览文件 @
58b053e4
...
...
@@ -102,8 +102,7 @@ static int ibmebus_map_sg(struct device *dev,
int
i
;
for_each_sg
(
sgl
,
sg
,
nents
,
i
)
{
sg
->
dma_address
=
(
dma_addr_t
)
page_address
(
sg
->
page
)
+
sg
->
offset
;
sg
->
dma_address
=
(
dma_addr_t
)
sg_virt
(
sg
);
sg
->
dma_length
=
sg
->
length
;
}
...
...
arch/powerpc/kernel/iommu.c
浏览文件 @
58b053e4
...
...
@@ -307,7 +307,7 @@ int iommu_map_sg(struct iommu_table *tbl, struct scatterlist *sglist,
continue
;
}
/* Allocate iommu entries for that segment */
vaddr
=
(
unsigned
long
)
page_address
(
s
->
page
)
+
s
->
offset
;
vaddr
=
(
unsigned
long
)
sg_virt
(
s
)
;
npages
=
iommu_num_pages
(
vaddr
,
slen
);
entry
=
iommu_range_alloc
(
tbl
,
npages
,
&
handle
,
mask
>>
IOMMU_PAGE_SHIFT
,
0
);
...
...
arch/powerpc/platforms/ps3/system-bus.c
浏览文件 @
58b053e4
...
...
@@ -628,9 +628,8 @@ static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl,
int
i
;
for_each_sg
(
sgl
,
sg
,
nents
,
i
)
{
int
result
=
ps3_dma_map
(
dev
->
d_region
,
page_to_phys
(
sg
->
page
)
+
sg
->
offset
,
sg
->
length
,
&
sg
->
dma_address
,
0
);
int
result
=
ps3_dma_map
(
dev
->
d_region
,
sg_phys
(
sg
),
sg
->
length
,
&
sg
->
dma_address
,
0
);
if
(
result
)
{
pr_debug
(
"%s:%d: ps3_dma_map failed (%d)
\n
"
,
...
...
arch/sparc/kernel/ioport.c
浏览文件 @
58b053e4
...
...
@@ -727,9 +727,8 @@ int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sgl, int nents,
BUG_ON
(
direction
==
PCI_DMA_NONE
);
/* IIep is write-through, not flushing. */
for_each_sg
(
sgl
,
sg
,
nents
,
n
)
{
BUG_ON
(
page_address
(
sg
->
page
)
==
NULL
);
sg
->
dvma_address
=
virt_to_phys
(
page_address
(
sg
->
page
))
+
sg
->
offset
;
BUG_ON
(
page_address
(
sg_page
(
sg
))
==
NULL
);
sg
->
dvma_address
=
virt_to_phys
(
sg_virt
(
sg
));
sg
->
dvma_length
=
sg
->
length
;
}
return
nents
;
...
...
@@ -748,9 +747,9 @@ void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sgl, int nents,
BUG_ON
(
direction
==
PCI_DMA_NONE
);
if
(
direction
!=
PCI_DMA_TODEVICE
)
{
for_each_sg
(
sgl
,
sg
,
nents
,
n
)
{
BUG_ON
(
page_address
(
sg
->
page
)
==
NULL
);
BUG_ON
(
page_address
(
sg
_page
(
sg
)
)
==
NULL
);
mmu_inval_dma_area
(
(
unsigned
long
)
page_address
(
sg
->
page
),
(
unsigned
long
)
page_address
(
sg
_page
(
sg
)
),
(
sg
->
length
+
PAGE_SIZE
-
1
)
&
PAGE_MASK
);
}
}
...
...
@@ -798,9 +797,9 @@ void pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sgl, int
BUG_ON
(
direction
==
PCI_DMA_NONE
);
if
(
direction
!=
PCI_DMA_TODEVICE
)
{
for_each_sg
(
sgl
,
sg
,
nents
,
n
)
{
BUG_ON
(
page_address
(
sg
->
page
)
==
NULL
);
BUG_ON
(
page_address
(
sg
_page
(
sg
)
)
==
NULL
);
mmu_inval_dma_area
(
(
unsigned
long
)
page_address
(
sg
->
page
),
(
unsigned
long
)
page_address
(
sg
_page
(
sg
)
),
(
sg
->
length
+
PAGE_SIZE
-
1
)
&
PAGE_MASK
);
}
}
...
...
@@ -814,9 +813,9 @@ void pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sgl,
BUG_ON
(
direction
==
PCI_DMA_NONE
);
if
(
direction
!=
PCI_DMA_TODEVICE
)
{
for_each_sg
(
sgl
,
sg
,
nents
,
n
)
{
BUG_ON
(
page_address
(
sg
->
page
)
==
NULL
);
BUG_ON
(
page_address
(
sg
_page
(
sg
)
)
==
NULL
);
mmu_inval_dma_area
(
(
unsigned
long
)
page_address
(
sg
->
page
),
(
unsigned
long
)
page_address
(
sg
_page
(
sg
)
),
(
sg
->
length
+
PAGE_SIZE
-
1
)
&
PAGE_MASK
);
}
}
...
...
arch/sparc/mm/io-unit.c
浏览文件 @
58b053e4
...
...
@@ -144,7 +144,7 @@ static void iounit_get_scsi_sgl(struct scatterlist *sg, int sz, struct sbus_bus
spin_lock_irqsave
(
&
iounit
->
lock
,
flags
);
while
(
sz
!=
0
)
{
--
sz
;
sg
->
dvma_address
=
iounit_get_area
(
iounit
,
(
unsigned
long
)
page_address
(
sg
->
page
)
+
sg
->
offset
,
sg
->
length
);
sg
->
dvma_address
=
iounit_get_area
(
iounit
,
sg_virt
(
sg
)
,
sg
->
length
);
sg
->
dvma_length
=
sg
->
length
;
sg
=
sg_next
(
sg
);
}
...
...
arch/sparc/mm/iommu.c
浏览文件 @
58b053e4
...
...
@@ -238,7 +238,7 @@ static void iommu_get_scsi_sgl_noflush(struct scatterlist *sg, int sz, struct sb
while
(
sz
!=
0
)
{
--
sz
;
n
=
(
sg
->
length
+
sg
->
offset
+
PAGE_SIZE
-
1
)
>>
PAGE_SHIFT
;
sg
->
dvma_address
=
iommu_get_one
(
sg
->
page
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_address
=
iommu_get_one
(
sg
_page
(
sg
)
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_length
=
(
__u32
)
sg
->
length
;
sg
=
sg_next
(
sg
);
}
...
...
@@ -252,7 +252,7 @@ static void iommu_get_scsi_sgl_gflush(struct scatterlist *sg, int sz, struct sbu
while
(
sz
!=
0
)
{
--
sz
;
n
=
(
sg
->
length
+
sg
->
offset
+
PAGE_SIZE
-
1
)
>>
PAGE_SHIFT
;
sg
->
dvma_address
=
iommu_get_one
(
sg
->
page
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_address
=
iommu_get_one
(
sg
_page
(
sg
)
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_length
=
(
__u32
)
sg
->
length
;
sg
=
sg_next
(
sg
);
}
...
...
@@ -273,7 +273,7 @@ static void iommu_get_scsi_sgl_pflush(struct scatterlist *sg, int sz, struct sbu
* XXX Is this a good assumption?
* XXX What if someone else unmaps it here and races us?
*/
if
((
page
=
(
unsigned
long
)
page_address
(
sg
->
page
))
!=
0
)
{
if
((
page
=
(
unsigned
long
)
page_address
(
sg
_page
(
sg
)
))
!=
0
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
if
(
page
!=
oldpage
)
{
/* Already flushed? */
flush_page_for_dma
(
page
);
...
...
@@ -283,7 +283,7 @@ static void iommu_get_scsi_sgl_pflush(struct scatterlist *sg, int sz, struct sbu
}
}
sg
->
dvma_address
=
iommu_get_one
(
sg
->
page
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_address
=
iommu_get_one
(
sg
_page
(
sg
)
,
n
,
sbus
)
+
sg
->
offset
;
sg
->
dvma_length
=
(
__u32
)
sg
->
length
;
sg
=
sg_next
(
sg
);
}
...
...
arch/sparc/mm/sun4c.c
浏览文件 @
58b053e4
...
...
@@ -1228,7 +1228,7 @@ static void sun4c_get_scsi_sgl(struct scatterlist *sg, int sz, struct sbus_bus *
{
while
(
sz
!=
0
)
{
--
sz
;
sg
->
dvma_address
=
(
__u32
)
sun4c_lockarea
(
page_address
(
sg
->
page
)
+
sg
->
offset
,
sg
->
length
);
sg
->
dvma_address
=
(
__u32
)
sun4c_lockarea
(
sg_virt
(
sg
)
,
sg
->
length
);
sg
->
dvma_length
=
sg
->
length
;
sg
=
sg_next
(
sg
);
}
...
...
arch/sparc64/kernel/iommu.c
浏览文件 @
58b053e4
...
...
@@ -472,8 +472,7 @@ static void dma_4u_unmap_single(struct device *dev, dma_addr_t bus_addr,
spin_unlock_irqrestore
(
&
iommu
->
lock
,
flags
);
}
#define SG_ENT_PHYS_ADDRESS(SG) \
(__pa(page_address((SG)->page)) + (SG)->offset)
#define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG))))
static
void
fill_sg
(
iopte_t
*
iopte
,
struct
scatterlist
*
sg
,
int
nused
,
int
nelems
,
...
...
@@ -565,9 +564,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
/* Fast path single entry scatterlists. */
if
(
nelems
==
1
)
{
sglist
->
dma_address
=
dma_4u_map_single
(
dev
,
(
page_address
(
sglist
->
page
)
+
sglist
->
offset
),
dma_4u_map_single
(
dev
,
sg_virt
(
sglist
),
sglist
->
length
,
direction
);
if
(
unlikely
(
sglist
->
dma_address
==
DMA_ERROR_CODE
))
return
0
;
...
...
arch/sparc64/kernel/iommu_common.c
浏览文件 @
58b053e4
...
...
@@ -73,7 +73,7 @@ static int verify_one_map(struct scatterlist *dma_sg, struct scatterlist **__sg,
daddr
=
dma_sg
->
dma_address
;
sglen
=
sg
->
length
;
sgaddr
=
(
unsigned
long
)
(
page_address
(
sg
->
page
)
+
sg
->
offset
);
sgaddr
=
(
unsigned
long
)
sg_virt
(
sg
);
while
(
dlen
>
0
)
{
unsigned
long
paddr
;
...
...
@@ -123,7 +123,7 @@ static int verify_one_map(struct scatterlist *dma_sg, struct scatterlist **__sg,
sg
=
sg_next
(
sg
);
if
(
--
nents
<=
0
)
break
;
sgaddr
=
(
unsigned
long
)
(
page_address
(
sg
->
page
)
+
sg
->
offset
);
sgaddr
=
(
unsigned
long
)
sg_virt
(
sg
);
sglen
=
sg
->
length
;
}
if
(
dlen
<
0
)
{
...
...
@@ -191,7 +191,7 @@ void verify_sglist(struct scatterlist *sglist, int nents, iopte_t *iopte, int np
printk
(
"sg(%d): page_addr(%p) off(%x) length(%x) "
"dma_address[%016x] dma_length[%016x]
\n
"
,
i
,
page_address
(
sg
->
page
),
sg
->
offset
,
page_address
(
sg
_page
(
sg
)
),
sg
->
offset
,
sg
->
length
,
sg
->
dma_address
,
sg
->
dma_length
);
}
...
...
@@ -207,15 +207,14 @@ unsigned long prepare_sg(struct scatterlist *sg, int nents)
unsigned
long
prev
;
u32
dent_addr
,
dent_len
;
prev
=
(
unsigned
long
)
(
page_address
(
sg
->
page
)
+
sg
->
offset
);
prev
=
(
unsigned
long
)
sg_virt
(
sg
);
prev
+=
(
unsigned
long
)
(
dent_len
=
sg
->
length
);
dent_addr
=
(
u32
)
((
unsigned
long
)(
page_address
(
sg
->
page
)
+
sg
->
offset
)
&
(
IO_PAGE_SIZE
-
1UL
));
dent_addr
=
(
u32
)
((
unsigned
long
)(
sg_virt
(
sg
))
&
(
IO_PAGE_SIZE
-
1UL
));
while
(
--
nents
)
{
unsigned
long
addr
;
sg
=
sg_next
(
sg
);
addr
=
(
unsigned
long
)
(
page_address
(
sg
->
page
)
+
sg
->
offset
);
addr
=
(
unsigned
long
)
sg_virt
(
sg
);
if
(
!
VCONTIG
(
prev
,
addr
))
{
dma_sg
->
dma_address
=
dent_addr
;
dma_sg
->
dma_length
=
dent_len
;
...
...
arch/sparc64/kernel/ldc.c
浏览文件 @
58b053e4
...
...
@@ -2057,7 +2057,7 @@ static void fill_cookies(struct cookie_state *sp, unsigned long pa,
static
int
sg_count_one
(
struct
scatterlist
*
sg
)
{
unsigned
long
base
=
page_to_pfn
(
sg
->
page
)
<<
PAGE_SHIFT
;
unsigned
long
base
=
page_to_pfn
(
sg
_page
(
sg
)
)
<<
PAGE_SHIFT
;
long
len
=
sg
->
length
;
if
((
sg
->
offset
|
len
)
&
(
8UL
-
1
))
...
...
arch/sparc64/kernel/pci_sun4v.c
浏览文件 @
58b053e4
...
...
@@ -365,8 +365,7 @@ static void dma_4v_unmap_single(struct device *dev, dma_addr_t bus_addr,
spin_unlock_irqrestore
(
&
iommu
->
lock
,
flags
);
}
#define SG_ENT_PHYS_ADDRESS(SG) \
(__pa(page_address((SG)->page)) + (SG)->offset)
#define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG))))
static
long
fill_sg
(
long
entry
,
struct
device
*
dev
,
struct
scatterlist
*
sg
,
...
...
@@ -477,9 +476,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
/* Fast path single entry scatterlists. */
if
(
nelems
==
1
)
{
sglist
->
dma_address
=
dma_4v_map_single
(
dev
,
(
page_address
(
sglist
->
page
)
+
sglist
->
offset
),
dma_4v_map_single
(
dev
,
sg_virt
(
sglist
),
sglist
->
length
,
direction
);
if
(
unlikely
(
sglist
->
dma_address
==
DMA_ERROR_CODE
))
return
0
;
...
...
arch/x86/kernel/pci-calgary_64.c
浏览文件 @
58b053e4
...
...
@@ -411,8 +411,10 @@ static int calgary_nontranslate_map_sg(struct device* dev,
int
i
;
for_each_sg
(
sg
,
s
,
nelems
,
i
)
{
BUG_ON
(
!
s
->
page
);
s
->
dma_address
=
virt_to_bus
(
page_address
(
s
->
page
)
+
s
->
offset
);
struct
page
*
p
=
sg_page
(
s
);
BUG_ON
(
!
p
);
s
->
dma_address
=
virt_to_bus
(
sg_virt
(
s
));
s
->
dma_length
=
s
->
length
;
}
return
nelems
;
...
...
@@ -432,9 +434,9 @@ static int calgary_map_sg(struct device *dev, struct scatterlist *sg,
return
calgary_nontranslate_map_sg
(
dev
,
sg
,
nelems
,
direction
);
for_each_sg
(
sg
,
s
,
nelems
,
i
)
{
BUG_ON
(
!
s
->
page
);
BUG_ON
(
!
s
g_page
(
s
)
);
vaddr
=
(
unsigned
long
)
page_address
(
s
->
page
)
+
s
->
offset
;
vaddr
=
(
unsigned
long
)
sg_virt
(
s
)
;
npages
=
num_dma_pages
(
vaddr
,
s
->
length
);
entry
=
iommu_range_alloc
(
tbl
,
npages
);
...
...
arch/x86/kernel/pci-gart_64.c
浏览文件 @
58b053e4
...
...
@@ -302,7 +302,7 @@ static int dma_map_sg_nonforce(struct device *dev, struct scatterlist *sg,
#endif
for_each_sg
(
sg
,
s
,
nents
,
i
)
{
unsigned
long
addr
=
page_to_phys
(
s
->
page
)
+
s
->
offset
;
unsigned
long
addr
=
sg_phys
(
s
);
if
(
nonforced_iommu
(
dev
,
addr
,
s
->
length
))
{
addr
=
dma_map_area
(
dev
,
addr
,
s
->
length
,
dir
);
if
(
addr
==
bad_dma_address
)
{
...
...
@@ -397,7 +397,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
start_sg
=
sgmap
=
sg
;
ps
=
NULL
;
/* shut up gcc */
for_each_sg
(
sg
,
s
,
nents
,
i
)
{
dma_addr_t
addr
=
page_to_phys
(
s
->
page
)
+
s
->
offset
;
dma_addr_t
addr
=
sg_phys
(
s
)
;
s
->
dma_address
=
addr
;
BUG_ON
(
s
->
length
==
0
);
...
...
arch/x86/kernel/pci-nommu_64.c
浏览文件 @
58b053e4
...
...
@@ -62,8 +62,8 @@ static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
int
i
;
for_each_sg
(
sg
,
s
,
nents
,
i
)
{
BUG_ON
(
!
s
->
page
);
s
->
dma_address
=
virt_to_bus
(
page_address
(
s
->
page
)
+
s
->
offset
);
BUG_ON
(
!
s
g_page
(
s
)
);
s
->
dma_address
=
virt_to_bus
(
sg_virt
(
s
)
);
if
(
!
check_addr
(
"map_sg"
,
hwdev
,
s
->
dma_address
,
s
->
length
))
return
0
;
s
->
dma_length
=
s
->
length
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录