Correct calculation of length for dma segments in iommu_dmamap_load().
This commit is contained in:
parent
973ddee4e5
commit
d24721788a
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: iommu.c,v 1.15 2000/06/19 23:30:33 eeh Exp $ */
|
/* $NetBSD: iommu.c,v 1.16 2000/06/22 18:18:19 eeh Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2000 Matthew R. Green
|
* Copyright (c) 1999, 2000 Matthew R. Green
|
||||||
@ -124,7 +124,6 @@
|
|||||||
|
|
||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
#include <sparc64/sparc64/cache.h>
|
#include <sparc64/sparc64/cache.h>
|
||||||
#include <sparc64/sparc64/vaddrs.h>
|
|
||||||
#include <sparc64/dev/iommureg.h>
|
#include <sparc64/dev/iommureg.h>
|
||||||
#include <sparc64/dev/iommuvar.h>
|
#include <sparc64/dev/iommuvar.h>
|
||||||
|
|
||||||
@ -510,7 +509,7 @@ iommu_dvmamap_load(t, is, map, buf, buflen, p, flags)
|
|||||||
map->dm_mapsize = buflen;
|
map->dm_mapsize = buflen;
|
||||||
map->dm_nsegs = 1;
|
map->dm_nsegs = 1;
|
||||||
map->dm_segs[0].ds_addr = dvmaddr + (vaddr & PGOFSET);
|
map->dm_segs[0].ds_addr = dvmaddr + (vaddr & PGOFSET);
|
||||||
map->dm_segs[0].ds_len = sgsize;
|
map->dm_segs[0].ds_len = buflen;
|
||||||
|
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
pmap = p->p_vmspace->vm_map.pmap;
|
pmap = p->p_vmspace->vm_map.pmap;
|
||||||
@ -571,7 +570,8 @@ iommu_dvmamap_unload(t, is, map)
|
|||||||
map, (long)addr, (long)len));
|
map, (long)addr, (long)len));
|
||||||
iommu_remove(is, addr, len);
|
iommu_remove(is, addr, len);
|
||||||
dvmaddr = (map->dm_segs[0].ds_addr & ~PGOFSET);
|
dvmaddr = (map->dm_segs[0].ds_addr & ~PGOFSET);
|
||||||
sgsize = map->dm_segs[0].ds_len;
|
sgsize = round_page(map->dm_segs[0].ds_len +
|
||||||
|
((int)map->dm_segs[0].ds_addr & PGOFSET));
|
||||||
|
|
||||||
/* Mark the mappings as invalid. */
|
/* Mark the mappings as invalid. */
|
||||||
map->dm_mapsize = 0;
|
map->dm_mapsize = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user