여기서 부팅 체인은 EFI 스텁을 사용하여 빌드된 UEFI -> 6.1.14 커널이며, initramfs는 5.4.109 커널을 로드하고 확인한 다음 kexec합니다. CPU는 2코어 Intel Atom N6210입니다. 이런 방식으로 부팅하면 5.4 커널은 부팅 시 두 번째 CPU를 해제할 때 즉시 정렬 예외를 발생시킵니다. EFI에서 부팅하거나 5.4.109 커널에서 kexec를 통해 부팅하면 동일한 커널 이미지가 제대로 작동합니다.
답변1
이로 인한 것으로 밝혀졌습니다분할 잠금 감지.
6.1 커널에는 이 CPU에서 Intel 분할 잠금 감지가 활성화되어 있습니다. 원자적 작업이 캐시 라인에 걸쳐 있을 때마다 정렬 예외가 발생합니다. 최신 커널(예: 이 커널)에서는 이런 일이 발생하면 부팅 시간 설정에 따라 경고, 오류, 패닉 또는 속도 저하가 발생합니다.
이는 통과합니다 kexec
. 이전 커널은 활성화된 것을 모르고 정렬 확인 예외 처리기가 패닉 상태에 빠지며 이전 커널이 아직 분할 잠금 사용을 제거하지 않았기 때문에 이 문제가 발생합니다.
split_lock_detect=off
(부트로더가 없기 때문에) 컴파일된 명령줄에 추가(링크된 기사 참조)를 시도했지만 분할 잠금 감지를 설정하는 코드가 컴파일된 명령줄을 도입하는 코드보다 먼저 실행되는 것 같습니다. 그럼에도 불구하고 활성화된 상태로 유지됩니다.
그래서 내 응용 프로그램의 경우 arch/x86/kernel/cpu/intel.c
.
이것은 이상한 질문이므로 다른 사람에게 도움이 될 수 있도록 Stack Exchange에 게시하고 싶었습니다.
답변2
저도 얼마 전에 이 문제를 보았고 kexecing 전에 sld를 비활성화하는 패치가 있습니다.
https://github.com/hengchiehhuang/linux/commit/3e49acca98335c8969fa8af438fddbb8335e5b3c
노트:귀하의 답변에 대해 댓글을 달려고 했지만 시스템에서는 초보자가 댓글을 추가하는 것을 허용하지 않습니다. :)