From 1cba14c456c3acdc5806d6bac72e1d073d9df4ab Mon Sep 17 00:00:00 2001 From: Rafal Jaworowski Date: Mon, 4 Aug 2008 14:47:49 +0000 Subject: [PATCH] Fix ARM nocache allocator: - let the loop iterate every page (as intended), and not some multiplies (which led to a fake exhaustion of the ARM_NOCACHE_KVA_SIZE) - eliminate using MIN(): it compared number of pages vs. address (ARM_TP_ADDRESS), which was bogus Reviewed by: cognet, imp Obtained from: Piotr Ziecik kosmo ! semihalf dot com MFC after: 3 days --- sys/arm/arm/vm_machdep.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c index 4557b0f629ec..0867153a614e 100644 --- a/sys/arm/arm/vm_machdep.c +++ b/sys/arm/arm/vm_machdep.c @@ -410,10 +410,9 @@ void * arm_remap_nocache(void *addr, vm_size_t size) { int i, j; - + size = round_page(size); - for (i = 0; i < MIN(ARM_NOCACHE_KVA_SIZE / (PAGE_SIZE * BITS_PER_INT), - ARM_TP_ADDRESS); i++) { + for (i = 0; i < ARM_NOCACHE_KVA_SIZE / PAGE_SIZE; i++) { if (!(arm_nocache_allocated[i / BITS_PER_INT] & (1 << (i % BITS_PER_INT)))) { for (j = i; j < i + (size / (PAGE_SIZE)); j++) @@ -424,8 +423,7 @@ arm_remap_nocache(void *addr, vm_size_t size) break; } } - if (i < MIN(ARM_NOCACHE_KVA_SIZE / (PAGE_SIZE * BITS_PER_INT), - ARM_TP_ADDRESS)) { + if (i < ARM_NOCACHE_KVA_SIZE / PAGE_SIZE) { vm_offset_t tomap = arm_nocache_startaddr + i * PAGE_SIZE; void *ret = (void *)tomap; vm_paddr_t physaddr = vtophys((vm_offset_t)addr); @@ -438,6 +436,7 @@ arm_remap_nocache(void *addr, vm_size_t size) } return (ret); } + return (NULL); }