On Fri, May 19 2023, Peter Maydell <peter.mayd...@linaro.org> wrote: > On Fri, 19 May 2023 at 14:31, Peter Maydell <peter.mayd...@linaro.org> wrote: >> >> On Fri, 19 May 2023 at 13:55, Alex Bennée <alex.ben...@linaro.org> wrote: >> > >> > >> > Peter Maydell <peter.mayd...@linaro.org> writes: >> > >> > > From: Cornelia Huck <coh...@redhat.com> >> > > >> > > Extend the 'mte' property for the virt machine to cover KVM as >> > > well. For KVM, we don't allocate tag memory, but instead enable the >> > > capability. >> > > >> > > If MTE has been enabled, we need to disable migration, as we do not >> > > yet have a way to migrate the tags as well. Therefore, MTE will stay >> > > off with KVM unless requested explicitly. >> > > >> > > Signed-off-by: Cornelia Huck <coh...@redhat.com> >> > > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> >> > > Reviewed-by: Richard Henderson <richard.hender...@linaro.org> >> > > Message-id: 20230428095533.21747-2-coh...@redhat.com >> > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> >> > >> > I bisected to this commit which causes a segfault on one of my test >> > kernels (6.3.2 arm64): >> > >> > ➜ ag MTE .config >> > 486:CONFIG_ARM64_AS_HAS_MTE=y >> > 487:CONFIG_ARM64_MTE=y >> > 2949:CONFIG_WLAN_VENDOR_ADMTEK=y >> > 3573:# CONFIG_I2C_SIMTEC is not set >> > 5278:# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set >> > 9749:CONFIG_ARCH_USE_MEMTEST=y >> > 9750:CONFIG_MEMTEST=y
Sigh, this patch seems to be cursed :( Apologies for the fallout. (I'm wondering what makes this pop up, maybe the CONFIG_MEMTEST?) >> >> Try this entirely untested patch? >> >> diff --git a/target/arm/cpu.c b/target/arm/cpu.c >> index f6a88e52ac2..f350661a928 100644 >> --- a/target/arm/cpu.c >> +++ b/target/arm/cpu.c >> @@ -1593,6 +1593,15 @@ static void arm_cpu_realizefn(DeviceState *dev, >> Error **errp) >> } >> } >> >> + /* >> + * For TCG, we can only present MTE to the guest if the board gave us >> + * tag RAM. Set has_mte appropriately so code below doesn't need to >> + * care whether we're TCG or KVM when deciding if MTE is present. >> + */ >> + if (tcg_enabled() || qtest_enabled()) { >> + cpu->has_mte = cpu->tag_memory != NULL; >> + } >> + >> if (!tcg_enabled() && !qtest_enabled()) { >> /* >> * We assume that no accelerator except TCG (and the "not really an > > Hmm, actually I don't think that's the only fix needed. It's OK for > TCG, but for KVM I can't see anywhere in the code that ever sets > has_mte to false. We default it to on in the cpu.c code, but > then the board code only sets it to true if MTE is enabled > (via kvm_arm_enable_mte()). Hrm, do we need explicit init of this field? Probably needless to say that I didn't hit this problem in any of my tests... I suspect that only specific kernels hit this?