Skip to content

CPUID-less CPU/sync_core fixes and improvements

Andy Lutomirski lkml xen-devel 6 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest posting 2/24 patches 2 repliesIn review
  2. v4 posting 1/20 of 4 patches 0 repliesSuperseded
  3. v3 posting 2/24 patches 11 repliesSuperseded
Earlier versions · 3
VersionPostedPatchesRepliesStatus
v3 posting 1/20 of 4 patches0 repliesSuperseded
v26 patches34 repliesSuperseded
v14 patches12 repliesSuperseded

Changes in v4 from the cover letter

- Improve sync_core() comments.
- Tidy up sync_core() asm.

Patches in v4 posting 2/2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/4x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernelsarch/x86/include/asm/processor.h+1 -10 replies
1/4x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernelsarch/x86/include/asm/processor.h+1 -10 replies
2/4Revert "x86/boot: Fail the boot if !M486 and CPUID is missing"arch/x86/boot/cpu.c+0 -60 replies
2/4Revert "x86/boot: Fail the boot if !M486 and CPUID is missing"arch/x86/boot/cpu.c+0 -60 replies
3/4x86/microcode/intel: Replace sync_core() with native_cpuid()arch/x86/kernel/cpu/microcode/intel.c+23 -30 replies
3/4x86/microcode/intel: Replace sync_core() with native_cpuid()arch/x86/kernel/cpu/microcode/intel.c+23 -30 replies
4/4x86/asm: Rewrite sync_core() to use IRET-to-selfarch/x86/include/asm/processor.h+58 -220 replies
4/4x86/asm: Rewrite sync_core() to use IRET-to-selfarch/x86/include/asm/processor.h+58 -220 replies

Reviews trailers per patch

2 of 8 patches have a Reviewed-by or Acked-by.

PatchBorislav Petkov
1/4
1/4
2/4
2/4
3/4A-b A-b
3/4A-b A-b
4/4
4/4

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

Cover letter [PATCH v4 0/4] CPUID-less CPU/sync_core fixes and improvements

*** PATCHES 1 and 2 MAY BE 4.9 MATERIAL ***

Alan Cox pointed out that the 486 isn't the only supported CPU that doesn't have CPUID. Let's clean up the mess and make everything faster while we're at it.

Patch 1 is intended to be an easy fix: it makes sync_core() work without CPUID on all 32-bit kernels. It should be quite safe. This will have a negligible performance cost during boot on kernels built for newer CPUs. With this in place, patch 2 reverts the buggy 486 check I added.

Patches 3-4 are meant to improve the situation. Patch 3 cleans up the Intel microcode loader and the patch 4 (which depends on patch 3 to work correctly) stops using CPUID in sync_core() altogether.

Changes from v3:
- Improve sync_core() comments.
- Tidy up sync_core() asm.

Changes from v2:
- Switch to IRET-to-self and get rid of all the paravirt code.
- Further immprove the sync_core() comment.

Changes from v1:
- Fix Xen
- Add timing info to the changelog (hint: 2x speedup)
- Document patch 1 a bit better.

Andy Lutomirski (4):
x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit
kernels
Revert "x86/boot: Fail the boot if !M486 and CPUID is missing" x86/microcode/intel: Replace sync_core() with native_cpuid() x86/asm: Rewrite sync_core() to use IRET-to-self

 arch/x86/boot/cpu.c                   |  6 ---
 arch/x86/include/asm/processor.h      | 80 +++++++++++++++++++++++++----------
 arch/x86/kernel/cpu/microcode/intel.c | 26 ++++++++++--
 3 files changed, 81 insertions(+), 31 deletions(-)
Signature · 1 line
2.9.3