I am wondering if it is, in theory, possible to enable hyperthreads after they have been disabled in the BIOS and vice-versa. As it turns out, if hyper-threads are disabled they do still show up in the MADT tables of ACPI as disabled cores. This is a sample output from the MADT with a processor having 4 cores and 2 threads per core and hyper-threading disabled.
CPU 0: APIC_ID=0 ACPI_PROCESSOR_ID=0 ENABLED=1
CPU 1: APIC_ID=2 ACPI_PROCESSOR_ID=1 ENABLED=1
CPU 2: APIC_ID=4 ACPI_PROCESSOR_ID=2 ENABLED=1
CPU 3: APIC_ID=6 ACPI_PROCESSOR_ID=3 ENABLED=1
CPU 4: APIC_ID=255 ACPI_PROCESSOR_ID=4 ENABLED=0
CPU 5: APIC_ID=255 ACPI_PROCESSOR_ID=5 ENABLED=0
CPU 6: APIC_ID=255 ACPI_PROCESSOR_ID=6 ENABLED=0
CPU 7: APIC_ID=255 ACPI_PROCESSOR_ID=7 ENABLED=0
I'm wondering if (a) there is an option to enable these cores at runtime (without rebooting and going through the BIOS). And (b) what (well defined or not) state is a hyperthread/processor in, if it is not enabled (i.e., is it executing hlt or mwait instructions with local APIC disabled for example?).
What I read in the ACPI specification (5.2.12.2 Processor Local APIC Structure) is the following for the enabled flag:
If zero, this processor is unusable, and the operating system support will not attempt to use it.
However, if someone knows, I'm interested in knowing about what is the actual state a disabled hyperthread is in. For example, did the MP Initialization Protocol Algorithm as described in Intels Software Developers Manual Volume 3 (Section 8.4.3) execute on the disabled hyper-threads during initialization?