summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2009-03-17 20:34:18 +0100
committerNeal H. Walfield <neal@gnu.org>2009-03-17 20:34:18 +0100
commitf1a55415edd88a912321f2733678c4503cf4babc (patch)
tree6558da7f861be268bac152bb7f2b339e66417d8b
parent1903a00a5848d94681b0746e3d68331d44ccce42 (diff)
In 64-bit mode, prefer VM addresses above 1GB.
-rw-r--r--libhurd-mm/as.c15
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, &region);
+#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);