Message ID | 20220210040423.95120-1-richard.henderson@linaro.org |
---|---|
Headers | show |
Series | target/arm: Implement LVA, LPA, LPA2 features | expand |
On Thu, 10 Feb 2022 at 04:04, Richard Henderson <richard.henderson@linaro.org> wrote: > > Changes for v2: > * Introduce FIELD_SEX64, instead of open-coding w/ sextract64. > * Set TCR_EL1 more completely for user-only. > * Continue to bound tsz within aa64_va_parameters; > provide an out-of-bound indicator for raising AddressSize fault. > * Split IPS patch. > * Fix debug registers for LVA. > * Fix long-format fsc for LPA2. > * Fix TLBI page shift. > * Validate TLBI granule vs TCR granule. > > Not done: > * Validate translation levels which accept blocks. > > There is still no upstream kernel support for FEAT_LPA2, > so that is essentially untested. Is this ready to go into the tree, from your point of view ? (If it is, I can add the docs changes when I put it into target-arm.) thanks -- PMM
On Thu, 10 Feb 2022 at 04:04, Richard Henderson <richard.henderson@linaro.org> wrote: > > Changes for v2: > * Introduce FIELD_SEX64, instead of open-coding w/ sextract64. > * Set TCR_EL1 more completely for user-only. > * Continue to bound tsz within aa64_va_parameters; > provide an out-of-bound indicator for raising AddressSize fault. > * Split IPS patch. > * Fix debug registers for LVA. > * Fix long-format fsc for LPA2. > * Fix TLBI page shift. > * Validate TLBI granule vs TCR granule. > > Not done: > * Validate translation levels which accept blocks. > > There is still no upstream kernel support for FEAT_LPA2, > so that is essentially untested. This series seems to break 'make check-acceptance': (01/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2: INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: Timeout reached\nOriginal status: ERROR\n{'name': '01-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2', 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... (900.74 s) (02/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3: INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: Timeout reached\nOriginal status: ERROR\n{'name': '02-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3', 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... (900.71 s) UEFI runs in the guest and seems to launch the kernel, but there's no output from the kernel itself in the logfile. Last thing it prints is: EFI stub: Booting Linux Kernel... EFI stub: EFI_RNG_PROTOCOL unavailable, no randomness supplied EFI stub: Using DTB from configuration table EFI stub: Exiting boot services and installing virtual address map... SetUefiImageMemoryAttributes - 0x000000007F500000 - 0x0000000000040000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007C190000 - 0x0000000000040000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007C140000 - 0x0000000000040000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007F4C0000 - 0x0000000000030000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007C0F0000 - 0x0000000000040000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007BFB0000 - 0x0000000000040000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007BE00000 - 0x0000000000030000 (0x0000000000000008) SetUefiImageMemoryAttributes - 0x000000007BDC0000 - 0x0000000000030000 (0x0000000000000008) This ought to be followed by the usual kernel boot log [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x000f0510] etc but it isn't. Probably the kernel is crashing in early bootup before it gets round to printing anything. thanks -- PMM
Peter Maydell <peter.maydell@linaro.org> writes: > On Thu, 10 Feb 2022 at 04:04, Richard Henderson > <richard.henderson@linaro.org> wrote: >> >> Changes for v2: >> * Introduce FIELD_SEX64, instead of open-coding w/ sextract64. >> * Set TCR_EL1 more completely for user-only. >> * Continue to bound tsz within aa64_va_parameters; >> provide an out-of-bound indicator for raising AddressSize fault. >> * Split IPS patch. >> * Fix debug registers for LVA. >> * Fix long-format fsc for LPA2. >> * Fix TLBI page shift. >> * Validate TLBI granule vs TCR granule. >> >> Not done: >> * Validate translation levels which accept blocks. >> >> There is still no upstream kernel support for FEAT_LPA2, >> so that is essentially untested. > > This series seems to break 'make check-acceptance': > > (01/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2: > INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: > Timeout reached\nOriginal status: ERROR\n{'name': > '01-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2', > 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... > (900.74 s) > (02/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3: > INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: > Timeout reached\nOriginal status: ERROR\n{'name': > '02-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3', > 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... > (900.71 s) > > UEFI runs in the guest and seems to launch the kernel, but there's > no output from the kernel itself in the logfile. Last thing it > prints is: > > EFI stub: Booting Linux Kernel... > EFI stub: EFI_RNG_PROTOCOL unavailable, no randomness supplied > EFI stub: Using DTB from configuration table > EFI stub: Exiting boot services and installing virtual address map... > SetUefiImageMemoryAttributes - 0x000000007F500000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C190000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C140000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007F4C0000 - 0x0000000000030000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C0F0000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BFB0000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BE00000 - 0x0000000000030000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BDC0000 - 0x0000000000030000 > (0x0000000000000008) > > This ought to be followed by the usual kernel boot log > [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x000f0510] > etc but it isn't. Probably the kernel is crashing in early bootup > before it gets round to printing anything. As this test runs under -cpu max it is likely exercising the new features (and failing).
On 2/18/22 04:37, Alex Bennée wrote: > > Peter Maydell <peter.maydell@linaro.org> writes: > >> On Thu, 10 Feb 2022 at 04:04, Richard Henderson >> <richard.henderson@linaro.org> wrote: >>> >>> Changes for v2: >>> * Introduce FIELD_SEX64, instead of open-coding w/ sextract64. >>> * Set TCR_EL1 more completely for user-only. >>> * Continue to bound tsz within aa64_va_parameters; >>> provide an out-of-bound indicator for raising AddressSize fault. >>> * Split IPS patch. >>> * Fix debug registers for LVA. >>> * Fix long-format fsc for LPA2. >>> * Fix TLBI page shift. >>> * Validate TLBI granule vs TCR granule. >>> >>> Not done: >>> * Validate translation levels which accept blocks. >>> >>> There is still no upstream kernel support for FEAT_LPA2, >>> so that is essentially untested. >> >> This series seems to break 'make check-acceptance': >> >> (01/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2: >> INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: >> Timeout reached\nOriginal status: ERROR\n{'name': >> '01-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2', >> 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... >> (900.74 s) >> (02/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3: >> INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: >> Timeout reached\nOriginal status: ERROR\n{'name': >> '02-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3', >> 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... >> (900.71 s) >> >> UEFI runs in the guest and seems to launch the kernel, but there's >> no output from the kernel itself in the logfile. Last thing it >> prints is: >> >> EFI stub: Booting Linux Kernel... >> EFI stub: EFI_RNG_PROTOCOL unavailable, no randomness supplied >> EFI stub: Using DTB from configuration table >> EFI stub: Exiting boot services and installing virtual address map... >> SetUefiImageMemoryAttributes - 0x000000007F500000 - 0x0000000000040000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007C190000 - 0x0000000000040000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007C140000 - 0x0000000000040000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007F4C0000 - 0x0000000000030000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007C0F0000 - 0x0000000000040000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007BFB0000 - 0x0000000000040000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007BE00000 - 0x0000000000030000 >> (0x0000000000000008) >> SetUefiImageMemoryAttributes - 0x000000007BDC0000 - 0x0000000000030000 >> (0x0000000000000008) >> >> This ought to be followed by the usual kernel boot log >> [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x000f0510] >> etc but it isn't. Probably the kernel is crashing in early bootup >> before it gets round to printing anything. > > As this test runs under -cpu max it is likely exercising the new > features (and failing). I would have thought so too. However... I've bisected this to the final LPA2 patch. I have not tracked down what exactly is going on with this, but it's definitely not the guest exercising the new feature -- there is no upstream support for LPA2. I'll keep looking. r~
On 2/17/22 04:07, Peter Maydell wrote: > This series seems to break 'make check-acceptance': > > (01/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2: > INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: > Timeout reached\nOriginal status: ERROR\n{'name': > '01-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv2', > 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... > (900.74 s) > (02/59) tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3: > INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: > Timeout reached\nOriginal status: ERROR\n{'name': > '02-tests/avocado/boot_linux.py:BootLinuxAarch64.test_virt_tcg_gicv3', > 'logdir': '/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/tests/results/j... > (900.71 s) > > UEFI runs in the guest and seems to launch the kernel, but there's > no output from the kernel itself in the logfile. Last thing it > prints is: > > EFI stub: Booting Linux Kernel... > EFI stub: EFI_RNG_PROTOCOL unavailable, no randomness supplied > EFI stub: Using DTB from configuration table > EFI stub: Exiting boot services and installing virtual address map... > SetUefiImageMemoryAttributes - 0x000000007F500000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C190000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C140000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007F4C0000 - 0x0000000000030000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007C0F0000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BFB0000 - 0x0000000000040000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BE00000 - 0x0000000000030000 > (0x0000000000000008) > SetUefiImageMemoryAttributes - 0x000000007BDC0000 - 0x0000000000030000 > (0x0000000000000008) > > This ought to be followed by the usual kernel boot log > [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x000f0510] > etc but it isn't. Probably the kernel is crashing in early bootup > before it gets round to printing anything. Ug. The v5.3.7 kernel we're trying to boot is actively broken wrt LPA2: ENTRY(__enable_mmu) mrs x2, ID_AA64MMFR0_EL1 ubfx x2, x2, #ID_AA64MMFR0_TGRAN_SHIFT, 4 cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED b.ne __no_granule_support That's an exact match for TGRAN4 == 0, so the LPA2 value sends the cpu into a sleep loop. This is fixed in 26f55386f964c, included in v5.12. So... we're going to need to update avocado, or something. r~