Index: kernel/genarch/src/acpi/madt.c
===================================================================
--- kernel/genarch/src/acpi/madt.c	(revision 7d07bf31f74e2ee585ca017e2dccbd51c38cad08)
+++ kernel/genarch/src/acpi/madt.c	(revision 80bcaed11c2e767559657092d6c13d1a7fdd449c)
@@ -70,5 +70,5 @@
 
 struct madt_apic_header * * madt_entries_index = NULL;
-int madt_entries_index_cnt = 0;
+unsigned int madt_entries_index_cnt = 0;
 
 char *entry[] = {
@@ -91,5 +91,5 @@
 static bool madt_cpu_bootstrap(index_t i);
 static uint8_t madt_cpu_apic_id(index_t i);
-static int madt_irq_to_pin(int irq);
+static int madt_irq_to_pin(unsigned int irq);
 
 struct smp_config_operations madt_config_operations = {
@@ -125,5 +125,5 @@
 }
 
-int madt_irq_to_pin(int irq)
+int madt_irq_to_pin(unsigned int irq)
 {
 	ASSERT(irq < sizeof(isa_irq_map)/sizeof(int));
@@ -144,5 +144,5 @@
 	struct madt_apic_header *h;
 	
-        l_apic = (uint32_t *) (unative_t) acpi_madt->l_apic_address;
+	l_apic = (uint32_t *) (unative_t) acpi_madt->l_apic_address;
 
 	/* calculate madt entries */
@@ -165,39 +165,38 @@
 	qsort(madt_entries_index, madt_entries_index_cnt, sizeof(uintptr_t), &madt_cmp);
 
-	/* Parse MADT entries */	
-	for (index = 0; index < madt_entries_index_cnt - 1; index++) {
-		h = madt_entries_index[index];
-		switch (h->type) {
-			case MADT_L_APIC:
-				madt_l_apic_entry((struct madt_l_apic *) h, index);
-				break;
-			case MADT_IO_APIC:
-				madt_io_apic_entry((struct madt_io_apic *) h, index);
-				break;
-			case MADT_INTR_SRC_OVRD:
-				madt_intr_src_ovrd_entry((struct madt_intr_src_ovrd *) h, index);
-				break;
-			case MADT_NMI_SRC:
-			case MADT_L_APIC_NMI:
-			case MADT_L_APIC_ADDR_OVRD:
-			case MADT_IO_SAPIC:
-			case MADT_L_SAPIC:
-			case MADT_PLATFORM_INTR_SRC:
-				printf("MADT: skipping %s entry (type=%zd)\n", entry[h->type], h->type);
-				break;
-
-			default:
-				if (h->type >= MADT_RESERVED_SKIP_BEGIN && h->type <= MADT_RESERVED_SKIP_END) {
-					printf("MADT: skipping reserved entry (type=%zd)\n", h->type);
-				}
-				if (h->type >= MADT_RESERVED_OEM_BEGIN) {
-					printf("MADT: skipping OEM entry (type=%zd)\n", h->type);
-				}
-				break;
+	/* Parse MADT entries */
+	if (madt_entries_index_cnt > 0) {	
+		for (index = 0; index < madt_entries_index_cnt - 1; index++) {
+			h = madt_entries_index[index];
+			switch (h->type) {
+				case MADT_L_APIC:
+					madt_l_apic_entry((struct madt_l_apic *) h, index);
+					break;
+				case MADT_IO_APIC:
+					madt_io_apic_entry((struct madt_io_apic *) h, index);
+					break;
+				case MADT_INTR_SRC_OVRD:
+					madt_intr_src_ovrd_entry((struct madt_intr_src_ovrd *) h, index);
+					break;
+				case MADT_NMI_SRC:
+				case MADT_L_APIC_NMI:
+				case MADT_L_APIC_ADDR_OVRD:
+				case MADT_IO_SAPIC:
+				case MADT_L_SAPIC:
+				case MADT_PLATFORM_INTR_SRC:
+					printf("MADT: skipping %s entry (type=%zd)\n", entry[h->type], h->type);
+					break;
+	
+				default:
+					if (h->type >= MADT_RESERVED_SKIP_BEGIN && h->type <= MADT_RESERVED_SKIP_END) {
+						printf("MADT: skipping reserved entry (type=%zd)\n", h->type);
+					}
+					if (h->type >= MADT_RESERVED_OEM_BEGIN) {
+						printf("MADT: skipping OEM entry (type=%zd)\n", h->type);
+					}
+					break;
+			}
 		}
-	
-	
-	}
-	
+	}
 
 	if (cpu_count)
