Index: kernel/genarch/src/acpi/acpi.c
===================================================================
--- kernel/genarch/src/acpi/acpi.c	(revision 6404acaa1e897da50572bbec1797ff03ffdc782d)
+++ kernel/genarch/src/acpi/acpi.c	(revision 53ee7a00bd79fce8184a35b196907232eed3d838)
@@ -43,4 +43,5 @@
 #include <mm/km.h>
 #include <log.h>
+#include <mem.h>
 
 #define RSDP_SIGNATURE      "RSD PTR "
@@ -170,12 +171,17 @@
 }
 
+static uint8_t *search_rsdp(uint8_t *base, size_t len)
+{
+	for (size_t i = 0; i < len; i += 16) {
+		if (memcmp(&base[i], RSDP_SIGNATURE, sizeof(RSDP_SIGNATURE)) == 0 &&
+		    rsdp_check(&base[i]))
+			return &base[i];
+	}
+
+	return NULL;
+}
+
 void acpi_init(void)
 {
-	uint8_t *addr[2] = { NULL, (uint8_t *) PA2KA(0xe0000) };
-	unsigned int i;
-	unsigned int j;
-	unsigned int length[2] = { 1024, 128 * 1024 };
-	uint64_t *sig = (uint64_t *) RSDP_SIGNATURE;
-
 	/*
 	 * Find Root System Description Pointer
@@ -184,18 +190,17 @@
 	 */
 
-	addr[0] = (uint8_t *) PA2KA(ebda);
-	for (i = (ebda ? 0 : 1); i < 2; i++) {
-		for (j = 0; j < length[i]; j += 16) {
-			if ((*((uint64_t *) &addr[i][j]) == *sig) &&
-			    (rsdp_check(&addr[i][j]))) {
-				acpi_rsdp = (struct acpi_rsdp *) &addr[i][j];
-				goto rsdp_found;
-			}
-		}
-	}
-
-	return;
-
-rsdp_found:
+	uint8_t *rsdp = NULL;
+
+	if (ebda)
+		rsdp = search_rsdp((uint8_t *) PA2KA(ebda), 1024);
+
+	if (!rsdp)
+		rsdp = search_rsdp((uint8_t *) PA2KA(0xe0000), 128 * 1024);
+
+	if (!rsdp)
+		return;
+
+	acpi_rsdp = (struct acpi_rsdp *) rsdp;
+
 	LOG("%p: ACPI Root System Description Pointer", acpi_rsdp);
 
