5.4 6.1 커널에서 kexec를 실행하면 x86의 Linux 커널에 정렬 예외가 발생하여 패닉이 발생합니다.

5.4 6.1 커널에서 kexec를 실행하면 x86의 Linux 커널에 정렬 예외가 발생하여 패닉이 발생합니다.

여기서 부팅 체인은 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

노트:귀하의 답변에 대해 댓글을 달려고 했지만 시스템에서는 초보자가 댓글을 추가하는 것을 허용하지 않습니다. :)

관련 정보