diff options
-rw-r--r-- | libhurd-mm/as.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libhurd-mm/as.c b/libhurd-mm/as.c index b899e46..a966814 100644 --- a/libhurd-mm/as.c +++ b/libhurd-mm/as.c @@ -213,9 +213,18 @@ as_alloc (int width, uint64_t count, bool data_mappable) vg_addr_t addr = VG_ADDR_VOID; struct free_space *free_space; - for (free_space = hurd_btree_free_space_first (&free_spaces); - free_space; - free_space = hurd_btree_free_space_next (free_space)) +#if __WORDSIZE == 64 + /* Prefer virtual addresses above 1 Gb. */ + struct region region; + region.start = 1024 * 1024 * 1024; + region.end = DATA_ADDR_MAX; + + free_space = hurd_btree_free_space_find_first (&free_spaces, ®ion); +#else + free_space = hurd_btree_free_space_first (&free_spaces); +#endif + + for (; free_space; free_space = hurd_btree_free_space_next (free_space)) { uint64_t start; start = (free_space->region.start + align - 1) & ~(align - 1); |