diff --git a/stand/kboot/kboot.h b/stand/kboot/kboot.h --- a/stand/kboot/kboot.h +++ b/stand/kboot/kboot.h @@ -48,6 +48,7 @@ uint64_t first_avail(uint64_t align, uint64_t min_size, uint64_t type); void print_avail(void); bool populate_avail_from_iomem(void); +uint64_t space_avail(uint64_t start); /* util.c */ bool file2str(const char *fn, char *buffer, size_t buflen); diff --git a/stand/kboot/seg.c b/stand/kboot/seg.c --- a/stand/kboot/seg.c +++ b/stand/kboot/seg.c @@ -340,3 +340,22 @@ close(fd); return true; } + +/* + * Return the amount of space available in the segment that @start@ lives in, + * from @start@ to the end of the segment. + */ +uint64_t +space_avail(uint64_t start) +{ + for (int i = 0; i < nr_seg; i++) { + if (start >= segs[i].start && start <= segs[i].end) + return segs[i].end - start; + } + + /* + * Properly used, we should never get here. Unsure if this should be a + * panic or not. + */ + return 0; +}