bootloader/bios_ia32: Turn off tracing of the SMP code.

This is mostly just spam at this point, but a few of the traces
are turned from TRACE to dprintf() so they stay around.
This commit is contained in:
Augustin Cavalier
2024-10-12 14:32:43 -04:00
parent c63558614e
commit eb5855c963
+45 -43
View File
@@ -30,7 +30,7 @@
#define NO_SMP 0 #define NO_SMP 0
#define TRACE_SMP //#define TRACE_SMP
#ifdef TRACE_SMP #ifdef TRACE_SMP
# define TRACE(x) dprintf x # define TRACE(x) dprintf x
#else #else
@@ -84,22 +84,22 @@ static status_t
smp_do_mp_config(mp_floating_struct *floatingStruct) smp_do_mp_config(mp_floating_struct *floatingStruct)
{ {
if (floatingStruct->config_length != 1) { if (floatingStruct->config_length != 1) {
TRACE(("smp: unsupported structure length of %" B_PRIu8 " units\n", dprintf("smp: unsupported structure length of %" B_PRIu8 " units\n",
floatingStruct->config_length)); floatingStruct->config_length);
return B_UNSUPPORTED; return B_UNSUPPORTED;
} }
TRACE(("smp: intel mp version %s, %s", dprintf("smp: intel mp version %s, %s",
(floatingStruct->spec_revision == 1) ? "1.1" : "1.4", (floatingStruct->spec_revision == 1) ? "1.1" : "1.4",
(floatingStruct->mp_feature_2 & 0x80) (floatingStruct->mp_feature_2 & 0x80)
? "imcr and pic compatibility mode.\n" ? "imcr and pic compatibility mode.\n"
: "virtual wire compatibility mode.\n")); : "virtual wire compatibility mode.\n");
if (floatingStruct->config_table == NULL) { if (floatingStruct->config_table == NULL) {
#if 1 #if 1
// TODO: need to implement // TODO: need to implement
TRACE(("smp: standard configuration %d unimplemented\n", dprintf("smp: standard configuration %d unimplemented\n",
floatingStruct->mp_feature_1)); floatingStruct->mp_feature_1);
gKernelArgs.num_cpus = 1; gKernelArgs.num_cpus = 1;
return B_OK; return B_OK;
#else #else
@@ -123,28 +123,28 @@ smp_do_mp_config(mp_floating_struct *floatingStruct)
gKernelArgs.num_cpus = 0; gKernelArgs.num_cpus = 0;
if (config->signature != MP_CONFIG_TABLE_SIGNATURE) { if (config->signature != MP_CONFIG_TABLE_SIGNATURE) {
TRACE(("smp: invalid config table signature, aborting\n")); dprintf("smp: invalid config table signature, aborting\n");
return B_ERROR; return B_ERROR;
} }
if (config->base_table_length < sizeof(mp_config_table)) { if (config->base_table_length < sizeof(mp_config_table)) {
TRACE(("smp: config table length %" B_PRIu16 dprintf("smp: config table length %" B_PRIu16
" too short for structure, aborting\n", " too short for structure, aborting\n",
config->base_table_length)); config->base_table_length);
return B_ERROR; return B_ERROR;
} }
// print our new found configuration. // print our new found configuration.
TRACE(("smp: oem id: %.8s product id: %.12s\n", config->oem, dprintf("smp: oem id: %.8s product id: %.12s\n", config->oem,
config->product)); config->product);
TRACE(("smp: base table has %d entries, extended section %d bytes\n", dprintf("smp: base table has %d entries, extended section %d bytes\n",
config->num_base_entries, config->ext_length)); config->num_base_entries, config->ext_length);
gKernelArgs.arch_args.apic_phys = (uint32)config->apic; gKernelArgs.arch_args.apic_phys = (uint32)config->apic;
if ((gKernelArgs.arch_args.apic_phys % 4096) != 0) { if ((gKernelArgs.arch_args.apic_phys % 4096) != 0) {
// MP specs mandate a 4K alignment for the local APIC(s) // MP specs mandate a 4K alignment for the local APIC(s)
TRACE(("smp: local apic %p has bad alignment, aborting\n", dprintf("smp: local apic %p has bad alignment, aborting\n",
(void *)gKernelArgs.arch_args.apic_phys)); (void *)gKernelArgs.arch_args.apic_phys);
return B_ERROR; return B_ERROR;
} }
@@ -190,13 +190,14 @@ smp_do_mp_config(mp_floating_struct *floatingStruct)
} }
case MP_BASE_BUS: case MP_BASE_BUS:
{ {
#ifdef TRACE_SMP
struct mp_base_bus *bus = (struct mp_base_bus *)pointer; struct mp_base_bus *bus = (struct mp_base_bus *)pointer;
#endif
pointer += sizeof(struct mp_base_bus); pointer += sizeof(struct mp_base_bus);
TRACE(("smp: bus %d: %c%c%c%c%c%c\n", bus->bus_id, TRACE(("smp: bus %d: %c%c%c%c%c%c\n", bus->bus_id,
bus->name[0], bus->name[1], bus->name[2], bus->name[3], bus->name[0], bus->name[1], bus->name[2], bus->name[3],
bus->name[4], bus->name[5])); bus->name[4], bus->name[5]));
break; break;
} }
case MP_BASE_IO_APIC: case MP_BASE_IO_APIC:
@@ -239,7 +240,7 @@ smp_do_mp_config(mp_floating_struct *floatingStruct)
} }
if (gKernelArgs.num_cpus == 0) { if (gKernelArgs.num_cpus == 0) {
TRACE(("smp: didn't find any processors, aborting\n")); dprintf("smp: didn't find any processors, aborting\n");
return B_ERROR; return B_ERROR;
} }
@@ -255,7 +256,7 @@ smp_do_mp_config(mp_floating_struct *floatingStruct)
static status_t static status_t
smp_do_acpi_config(void) smp_do_acpi_config(void)
{ {
TRACE(("smp: using ACPI to detect MP configuration\n")); dprintf("smp: using ACPI to detect MP configuration\n");
// reset CPU count // reset CPU count
gKernelArgs.num_cpus = 0; gKernelArgs.num_cpus = 0;
@@ -263,12 +264,12 @@ smp_do_acpi_config(void)
acpi_madt *madt = (acpi_madt *)acpi_find_table(ACPI_MADT_SIGNATURE); acpi_madt *madt = (acpi_madt *)acpi_find_table(ACPI_MADT_SIGNATURE);
if (madt == NULL) { if (madt == NULL) {
TRACE(("smp: Failed to find MADT!\n")); dprintf("smp: Failed to find MADT!\n");
return B_ERROR; return B_ERROR;
} }
gKernelArgs.arch_args.apic_phys = madt->local_apic_address; gKernelArgs.arch_args.apic_phys = madt->local_apic_address;
TRACE(("smp: local apic address is 0x%x\n", madt->local_apic_address)); dprintf("smp: local apic address is 0x%x\n", madt->local_apic_address);
acpi_apic *apic = (acpi_apic *)((uint8 *)madt + sizeof(acpi_madt)); acpi_apic *apic = (acpi_apic *)((uint8 *)madt + sizeof(acpi_madt));
acpi_apic *end = (acpi_apic *)((uint8 *)madt + madt->header.length); acpi_apic *end = (acpi_apic *)((uint8 *)madt + madt->header.length);
@@ -283,10 +284,10 @@ smp_do_acpi_config(void)
} }
acpi_local_apic *localApic = (acpi_local_apic *)apic; acpi_local_apic *localApic = (acpi_local_apic *)apic;
TRACE(("smp: found local APIC with id %u\n", dprintf("smp: found local APIC with id %u\n",
localApic->apic_id)); localApic->apic_id);
if ((localApic->flags & ACPI_LOCAL_APIC_ENABLED) == 0) { if ((localApic->flags & ACPI_LOCAL_APIC_ENABLED) == 0) {
TRACE(("smp: APIC is disabled and will not be used\n")); dprintf("smp: APIC is disabled and will not be used\n");
break; break;
} }
@@ -301,8 +302,8 @@ smp_do_acpi_config(void)
case ACPI_MADT_IO_APIC: { case ACPI_MADT_IO_APIC: {
acpi_io_apic *ioApic = (acpi_io_apic *)apic; acpi_io_apic *ioApic = (acpi_io_apic *)apic;
TRACE(("smp: found io APIC with id %u and address 0x%x\n", dprintf("smp: found io APIC with id %u and address 0x%x\n",
ioApic->io_apic_id, ioApic->io_apic_address)); ioApic->io_apic_id, ioApic->io_apic_address);
if (gKernelArgs.arch_args.ioapic_phys == 0) if (gKernelArgs.arch_args.ioapic_phys == 0)
gKernelArgs.arch_args.ioapic_phys = ioApic->io_apic_address; gKernelArgs.arch_args.ioapic_phys = ioApic->io_apic_address;
break; break;
@@ -348,8 +349,8 @@ calculate_apic_timer_conversion_factor(void)
gKernelArgs.arch_args.apic_time_cv_factor gKernelArgs.arch_args.apic_time_cv_factor
= (uint32)((1000000.0/(t2 - t1)) * count); = (uint32)((1000000.0/(t2 - t1)) * count);
TRACE(("APIC ticks/sec = %d\n", dprintf("APIC ticks/sec = %d\n",
gKernelArgs.arch_args.apic_time_cv_factor)); gKernelArgs.arch_args.apic_time_cv_factor);
} }
@@ -377,12 +378,12 @@ smp_init_other_cpus(void)
{ {
if (get_safemode_boolean(B_SAFEMODE_DISABLE_SMP, false)) { if (get_safemode_boolean(B_SAFEMODE_DISABLE_SMP, false)) {
// SMP has been disabled! // SMP has been disabled!
TRACE(("smp disabled per safemode setting\n")); dprintf("smp disabled per safemode setting\n");
gKernelArgs.num_cpus = 1; gKernelArgs.num_cpus = 1;
} }
if (get_safemode_boolean(B_SAFEMODE_DISABLE_APIC, false)) { if (get_safemode_boolean(B_SAFEMODE_DISABLE_APIC, false)) {
TRACE(("local apic disabled per safemode setting, disabling smp\n")); dprintf("local apic disabled per safemode setting, disabling smp\n");
gKernelArgs.arch_args.apic_phys = 0; gKernelArgs.arch_args.apic_phys = 0;
gKernelArgs.num_cpus = 1; gKernelArgs.num_cpus = 1;
} }
@@ -390,17 +391,17 @@ smp_init_other_cpus(void)
if (gKernelArgs.arch_args.apic_phys == 0) if (gKernelArgs.arch_args.apic_phys == 0)
return; return;
TRACE(("smp: found %d cpu%s\n", gKernelArgs.num_cpus, dprintf("smp: found %d cpu%s\n", gKernelArgs.num_cpus,
gKernelArgs.num_cpus != 1 ? "s" : "")); gKernelArgs.num_cpus != 1 ? "s" : "");
TRACE(("smp: apic_phys = %p\n", (void *)gKernelArgs.arch_args.apic_phys)); dprintf("smp: apic_phys = %p\n", (void *)gKernelArgs.arch_args.apic_phys);
TRACE(("smp: ioapic_phys = %p\n", dprintf("smp: ioapic_phys = %p\n",
(void *)gKernelArgs.arch_args.ioapic_phys)); (void *)gKernelArgs.arch_args.ioapic_phys);
// map in the apic // map in the apic
gKernelArgs.arch_args.apic = (void *)mmu_map_physical_memory( gKernelArgs.arch_args.apic = (void *)mmu_map_physical_memory(
gKernelArgs.arch_args.apic_phys, B_PAGE_SIZE, kDefaultPageFlags); gKernelArgs.arch_args.apic_phys, B_PAGE_SIZE, kDefaultPageFlags);
TRACE(("smp: apic (mapped) = %p\n", (void *)gKernelArgs.arch_args.apic)); dprintf("smp: apic (mapped) = %p\n", (void *)gKernelArgs.arch_args.apic);
// calculate how fast the apic timer is // calculate how fast the apic timer is
calculate_apic_timer_conversion_factor(); calculate_apic_timer_conversion_factor();
@@ -489,8 +490,8 @@ smp_boot_other_cpus(void (*entryFunc)(void))
apic_read(APIC_ERROR_STATUS); apic_read(APIC_ERROR_STATUS);
} }
//dprintf("assert INIT\n");
/* send (aka assert) INIT IPI */ /* send (aka assert) INIT IPI */
TRACE(("assert INIT\n"));
config = (apic_read(APIC_INTR_COMMAND_2) & APIC_INTR_COMMAND_2_MASK) config = (apic_read(APIC_INTR_COMMAND_2) & APIC_INTR_COMMAND_2_MASK)
| (gKernelArgs.arch_args.cpu_apic_id[i] << 24); | (gKernelArgs.arch_args.cpu_apic_id[i] << 24);
apic_write(APIC_INTR_COMMAND_2, config); /* set target pe */ apic_write(APIC_INTR_COMMAND_2, config); /* set target pe */
@@ -499,13 +500,13 @@ smp_boot_other_cpus(void (*entryFunc)(void))
| APIC_DELIVERY_MODE_INIT; | APIC_DELIVERY_MODE_INIT;
apic_write(APIC_INTR_COMMAND_1, config); apic_write(APIC_INTR_COMMAND_1, config);
dprintf("wait for delivery\n");
// wait for pending to end // wait for pending to end
TRACE(("wait for delivery\n"));
while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0) while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0)
asm volatile ("pause;"); asm volatile ("pause;");
dprintf("deassert INIT\n");
/* deassert INIT */ /* deassert INIT */
TRACE(("deassert INIT\n"));
config = (apic_read(APIC_INTR_COMMAND_2) & APIC_INTR_COMMAND_2_MASK) config = (apic_read(APIC_INTR_COMMAND_2) & APIC_INTR_COMMAND_2_MASK)
| (gKernelArgs.arch_args.cpu_apic_id[i] << 24); | (gKernelArgs.arch_args.cpu_apic_id[i] << 24);
apic_write(APIC_INTR_COMMAND_2, config); apic_write(APIC_INTR_COMMAND_2, config);
@@ -513,8 +514,8 @@ dprintf("deassert INIT\n");
| APIC_TRIGGER_MODE_LEVEL | APIC_DELIVERY_MODE_INIT; | APIC_TRIGGER_MODE_LEVEL | APIC_DELIVERY_MODE_INIT;
apic_write(APIC_INTR_COMMAND_1, config); apic_write(APIC_INTR_COMMAND_1, config);
dprintf("wait for delivery\n");
// wait for pending to end // wait for pending to end
TRACE(("wait for delivery\n"));
while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0) while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0)
asm volatile ("pause;"); asm volatile ("pause;");
@@ -524,10 +525,11 @@ dprintf("wait for delivery\n");
/* is this a local apic or an 82489dx ? */ /* is this a local apic or an 82489dx ? */
numStartups = (gKernelArgs.arch_args.cpu_apic_version[i] & 0xf0) numStartups = (gKernelArgs.arch_args.cpu_apic_version[i] & 0xf0)
? 2 : 0; ? 2 : 0;
dprintf("num startups = %d\n", numStartups); TRACE(("num startups = %d\n", numStartups));
for (j = 0; j < numStartups; j++) { for (j = 0; j < numStartups; j++) {
/* it's a local apic, so send STARTUP IPIs */ /* it's a local apic, so send STARTUP IPIs */
dprintf("send STARTUP\n"); TRACE(("send STARTUP\n"));
apic_write(APIC_ERROR_STATUS, 0); apic_write(APIC_ERROR_STATUS, 0);
/* set target pe */ /* set target pe */
@@ -543,7 +545,7 @@ dprintf("send STARTUP\n");
/* wait */ /* wait */
spin(200); spin(200);
dprintf("wait for delivery\n"); TRACE(("wait for delivery\n"));
while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0) while ((apic_read(APIC_INTR_COMMAND_1) & APIC_DELIVERY_STATUS) != 0)
asm volatile ("pause;"); asm volatile ("pause;");
} }