Page MenuHomeFreeBSD

D48628.id.diff
No OneTemporary

D48628.id.diff

diff --git a/sys/vm/vm_phys.c b/sys/vm/vm_phys.c
--- a/sys/vm/vm_phys.c
+++ b/sys/vm/vm_phys.c
@@ -421,18 +421,26 @@
{
struct vm_phys_seg *seg;
- KASSERT(vm_phys_nsegs < VM_PHYSSEG_MAX,
- ("vm_phys_create_seg: increase VM_PHYSSEG_MAX"));
- KASSERT(domain >= 0 && domain < vm_ndomains,
- ("vm_phys_create_seg: invalid domain provided"));
+ if (!(0 <= domain && domain < vm_ndomains))
+ panic("%s: Invalid domain %d ('vm_ndomains' is %d)",
+ __func__, domain, vm_ndomains);
+ if (vm_phys_nsegs >= VM_PHYSSEG_MAX)
+ panic("Not enough storage for physical segments, "
+ "increase VM_PHYSSEG_MAX");
+
seg = &vm_phys_segs[vm_phys_nsegs++];
- while (seg > vm_phys_segs && (seg - 1)->start >= end) {
+ while (seg > vm_phys_segs && seg[-1].start >= end) {
*seg = *(seg - 1);
seg--;
}
seg->start = start;
seg->end = end;
seg->domain = domain;
+ if (seg != vm_phys_segs && seg[-1].end > start)
+ panic("Overlapping physical segments: Current [%#jx,%#jx) "
+ "at index %zu, previous [%#jx,%#jx)",
+ (uintmax_t)start, (uintmax_t)end, seg - vm_phys_segs,
+ (uintmax_t)seg[-1].start, (uintmax_t)seg[-1].end);
}
static void

File Metadata

Mime Type
text/plain
Expires
Sun, Jan 18, 7:52 AM (16 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27706604
Default Alt Text
D48628.id.diff (1 KB)

Event Timeline