diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-03-17 20:34:18 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-03-17 20:34:18 +0100 |
commit | f1a55415edd88a912321f2733678c4503cf4babc (patch) | |
tree | 6558da7f861be268bac152bb7f2b339e66417d8b | |
parent | 1903a00a5848d94681b0746e3d68331d44ccce42 (diff) |
In 64-bit mode, prefer VM addresses above 1GB.
-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); |