:: commit 2ba3770766d2b702e7a2e2efa3c24161f6ef28a2

mintsuki <mintsuki@protonmail.com> — 2022-03-20 18:12

parents: b2211a7e13

Revert "limine: Move SMP request to using SoA"

This reverts commit 03700dea969604e26a51a9900a7ff6e479acf6fd.
diff --git a/common/limine.h b/common/limine.h
index c9adb9b9..ec62bc8b 100644
--- a/common/limine.h
+++ b/common/limine.h
@@ -122,7 +122,8 @@ struct limine_5_level_paging_request {
 struct limine_smp_info {
     uint32_t processor_id;
     uint32_t lapic_id;
-    uint64_t reserved[2];
+    uint64_t reserved;
+    LIMINE_PTR(void *) goto_address;
     uint64_t extra_argument;
 };
 
@@ -131,11 +132,8 @@ struct limine_smp_response {
 
     uint32_t flags;
     uint32_t bsp_lapic_id;
-    uint64_t cpu_count;
-    LIMINE_PTR(uint32_t *) cpu_processor_id;
-    LIMINE_PTR(uint32_t *) cpu_lapic_id;
-    LIMINE_PTR(LIMINE_PTR(LIMINE_PTR(void *) *) *) cpu_goto_address;
-    LIMINE_PTR(LIMINE_PTR(LIMINE_PTR(void *) *) *) cpu_extra_argument;
+    uint64_t cpus_count;
+    LIMINE_PTR(struct limine_smp_info *) cpus;
 };
 
 struct limine_smp_request {
diff --git a/common/protos/limine.c b/common/protos/limine.c
index a5788bae..069361bd 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -507,10 +507,11 @@ FEAT_START
         break; // next feature
     }
 
+    struct limine_smp_info *smp_array;
     struct smp_information *smp_info;
     size_t cpu_count;
     uint32_t bsp_lapic_id;
-    smp_info = init_smp(0, (void **)&smp_info,
+    smp_info = init_smp(0, (void **)&smp_array,
                         &cpu_count, &bsp_lapic_id,
                         true, want_5lv,
                         pagemap, smp_request->flags & LIMINE_SMP_X2APIC, true,
@@ -530,24 +531,8 @@ FEAT_START
 
     smp_response->flags |= (smp_request->flags & LIMINE_SMP_X2APIC) && x2apic_check();
     smp_response->bsp_lapic_id = bsp_lapic_id;
-    smp_response->cpu_count = cpu_count;
-
-    uint32_t *cpu_processor_id = ext_mem_alloc(sizeof(uint32_t) * cpu_count);
-    uint32_t *cpu_lapic_id = ext_mem_alloc(sizeof(uint32_t) * cpu_count);
-    uint64_t *cpu_goto_address = ext_mem_alloc(sizeof(uint64_t) * cpu_count);
-    uint64_t *cpu_extra_argument = ext_mem_alloc(sizeof(uint64_t) * cpu_count);
-
-    for (size_t i = 0; i < cpu_count; i++) {
-        cpu_processor_id[i] = smp_info[i].acpi_processor_uid;
-        cpu_lapic_id[i] = smp_info[i].lapic_id;
-        cpu_goto_address[i] = reported_addr(&smp_info[i].goto_address);
-        cpu_extra_argument[i] = reported_addr(&smp_info[i].extra_argument);
-    }
-
-    smp_response->cpu_processor_id = reported_addr(cpu_processor_id);
-    smp_response->cpu_lapic_id = reported_addr(cpu_lapic_id);
-    smp_response->cpu_goto_address = reported_addr(cpu_goto_address);
-    smp_response->cpu_extra_argument = reported_addr(cpu_extra_argument);
+    smp_response->cpus_count = cpu_count;
+    smp_response->cpus = reported_addr(smp_array);
 
     smp_request->response = reported_addr(smp_response);
 FEAT_END
diff --git a/test/limine.c b/test/limine.c
index 71f9d231..5c8e750a 100644
--- a/test/limine.c
+++ b/test/limine.c
@@ -270,10 +270,11 @@ FEAT_START
     struct limine_smp_response *smp_response = _smp_request.response;
     e9_printf("Flags: %x", smp_response->flags);
     e9_printf("BSP LAPIC ID: %x", smp_response->bsp_lapic_id);
-    e9_printf("CPU count: %d", smp_response->cpu_count);
-    for (size_t i = 0; i < smp_response->cpu_count; i++) {
-        e9_printf("Processor ID: %x", smp_response->cpu_processor_id[i]);
-        e9_printf("LAPIC ID: %x", smp_response->cpu_lapic_id[i]);
+    e9_printf("CPUs count: %d", smp_response->cpus_count);
+    for (size_t i = 0; i < smp_response->cpus_count; i++) {
+        struct limine_smp_info *cpu = &smp_response->cpus[i];
+        e9_printf("Processor ID: %x", cpu->processor_id);
+        e9_printf("LAPIC ID: %x", cpu->lapic_id);
     }
 FEAT_END
 
tab: 248 wrap: offon