summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_map.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2009-07-24 13:50:29 +0000
committerjhb <jhb@FreeBSD.org>2009-07-24 13:50:29 +0000
commit44220d7e1e07bbf1c88215543c5877abcdb88d29 (patch)
tree9a9fb32ead80921ec7937e7a600e46e446366436 /sys/vm/vm_map.c
parent4064b20ecefb589d0b9290e558c0abfc5229c120 (diff)
downloadFreeBSD-src-44220d7e1e07bbf1c88215543c5877abcdb88d29.zip
FreeBSD-src-44220d7e1e07bbf1c88215543c5877abcdb88d29.tar.gz
Add a new type of VM object: OBJT_SG. An OBJT_SG object is very similar to
a device pager (OBJT_DEVICE) object in that it uses fictitious pages to provide aliases to other memory addresses. The primary difference is that it uses an sglist(9) to determine the physical addresses for a given offset into the object instead of invoking the d_mmap() method in a device driver. Reviewed by: alc Approved by: re (kensmith) MFC after: 2 weeks
Diffstat (limited to 'sys/vm/vm_map.c')
-rw-r--r--sys/vm/vm_map.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index dc7a490..b5651ef 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -1719,7 +1719,7 @@ vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot,
if ((prot & (VM_PROT_READ | VM_PROT_EXECUTE)) == 0 || object == NULL)
return;
VM_OBJECT_LOCK(object);
- if (object->type == OBJT_DEVICE) {
+ if (object->type == OBJT_DEVICE || object->type == OBJT_SG) {
pmap_object_init_pt(map->pmap, addr, object, pindex, size);
goto unlock_return;
}
@@ -2247,7 +2247,8 @@ done:
*/
vm_fault_unwire(map, entry->start, entry->end,
entry->object.vm_object != NULL &&
- entry->object.vm_object->type == OBJT_DEVICE);
+ (entry->object.vm_object->type == OBJT_DEVICE ||
+ entry->object.vm_object->type == OBJT_SG));
}
}
KASSERT(entry->eflags & MAP_ENTRY_IN_TRANSITION,
@@ -2366,7 +2367,8 @@ vm_map_wire(vm_map_t map, vm_offset_t start, vm_offset_t end,
saved_start = entry->start;
saved_end = entry->end;
fictitious = entry->object.vm_object != NULL &&
- entry->object.vm_object->type == OBJT_DEVICE;
+ (entry->object.vm_object->type == OBJT_DEVICE ||
+ entry->object.vm_object->type == OBJT_SG);
/*
* Release the map lock, relying on the in-transition
* mark.
@@ -2462,7 +2464,8 @@ done:
*/
vm_fault_unwire(map, entry->start, entry->end,
entry->object.vm_object != NULL &&
- entry->object.vm_object->type == OBJT_DEVICE);
+ (entry->object.vm_object->type == OBJT_DEVICE ||
+ entry->object.vm_object->type == OBJT_SG));
}
}
next_entry_done:
@@ -2595,7 +2598,8 @@ vm_map_entry_unwire(vm_map_t map, vm_map_entry_t entry)
{
vm_fault_unwire(map, entry->start, entry->end,
entry->object.vm_object != NULL &&
- entry->object.vm_object->type == OBJT_DEVICE);
+ (entry->object.vm_object->type == OBJT_DEVICE ||
+ entry->object.vm_object->type == OBJT_SG));
entry->wired_count = 0;
}
OpenPOWER on IntegriCloud