Page MenuHomeFreeBSD

D49891.diff
No OneTemporary

D49891.diff

diff --git a/sys/x86/iommu/intel_idpgtbl.c b/sys/x86/iommu/intel_idpgtbl.c
--- a/sys/x86/iommu/intel_idpgtbl.c
+++ b/sys/x86/iommu/intel_idpgtbl.c
@@ -56,6 +56,7 @@
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
#include <vm/vm_map.h>
+#include <vm/vm_radix.h>
#include <dev/pci/pcireg.h>
#include <machine/atomic.h>
#include <machine/bus.h>
@@ -165,6 +166,7 @@
vm_object_t
dmar_get_idmap_pgtbl(struct dmar_domain *domain, iommu_gaddr_t maxaddr)
{
+ struct pctrie_iter pages;
struct dmar_unit *unit;
struct idpgtbl *tbl;
vm_object_t res;
@@ -260,9 +262,9 @@
*/
unit = domain->dmar;
if (!DMAR_IS_COHERENT(unit)) {
+ vm_page_iter_init(&pages, res);
VM_OBJECT_WLOCK(res);
- for (m = vm_page_lookup(res, 0); m != NULL;
- m = vm_page_next(m))
+ VM_RADIX_FORALL(m, &pages)
pmap_invalidate_cache_pages(&m, 1);
VM_OBJECT_WUNLOCK(res);
}
@@ -707,6 +709,7 @@
void
dmar_domain_free_pgtbl(struct dmar_domain *domain)
{
+ struct pctrie_iter pages;
vm_object_t obj;
vm_page_t m;
@@ -728,7 +731,8 @@
/* Obliterate ref_counts */
VM_OBJECT_ASSERT_WLOCKED(obj);
- for (m = vm_page_lookup(obj, 0); m != NULL; m = vm_page_next(m)) {
+ vm_page_iter_init(&pages, obj);
+ VM_RADIX_FORALL(m, &pages) {
vm_page_clearref(m);
vm_wire_sub(1);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 31, 4:46 PM (14 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28132164
Default Alt Text
D49891.diff (1 KB)

Event Timeline