diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 4cc8bf54579..d630bd583aa 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries diff --git a/sys/amd64/amd64/mptable.c b/sys/amd64/amd64/mptable.c index 4cc8bf54579..d630bd583aa 100644 --- a/sys/amd64/amd64/mptable.c +++ b/sys/amd64/amd64/mptable.c @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries diff --git a/sys/amd64/include/mptable.h b/sys/amd64/include/mptable.h index 4cc8bf54579..d630bd583aa 100644 --- a/sys/amd64/include/mptable.h +++ b/sys/amd64/include/mptable.h @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c index 4cc8bf54579..d630bd583aa 100644 --- a/sys/i386/i386/mp_machdep.c +++ b/sys/i386/i386/mp_machdep.c @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries diff --git a/sys/i386/i386/mptable.c b/sys/i386/i386/mptable.c index 4cc8bf54579..d630bd583aa 100644 --- a/sys/i386/i386/mptable.c +++ b/sys/i386/i386/mptable.c @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries diff --git a/sys/i386/include/mptable.h b/sys/i386/include/mptable.h index 4cc8bf54579..d630bd583aa 100644 --- a/sys/i386/include/mptable.h +++ b/sys/i386/include/mptable.h @@ -999,9 +999,12 @@ mptable_pass2(void) while (count--) { switch (type = *(u_char *) position) { case 0: - if (processor_entry(position, cpu)) + if (processor_entry(position, cpu)) { + if (logical_cpus != 0 && + cpu % logical_cpus != 0) + logical_cpus_mask |= (1 << cpu); ++cpu; - + } if (need_hyperthreading_fixup) { /* * Create fake mptable processor entries