Comment 0 for bug 1991790

Revision history for this message
Alexandre Ghiti (alexghiti) wrote :

[ Impact ]

sv57 breaks Go since Go uses the upper bits of a pointer to store data, and it is not ready for sv57 yet. It probably breaks other type of software using this "pointer tagging" technic. The following patch fixes this: at the moment, there is no way to indicate to the kernel to downgrade to sv48, so we must patch the kernel.

diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 2c4a64e97aec..18a0c70ed313 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -775,6 +775,10 @@ static __init void set_satp_mode(void)
                disable_pgtable_l4();
        }

+ /* UBUNTU: Force disable sv57 and fallback to sv48 */
+ if (pgtable_l5_enabled)
+ disable_pgtable_l5();
+
        memset(early_pg_dir, 0, PAGE_SIZE);
        memset(early_p4d, 0, PAGE_SIZE);
        memset(early_pud, 0, PAGE_SIZE);

[ Test Plan ]

Build an image with the new kernel and make sure snapd started correctly, or that you can compile a simple helloworld written in Go.

[ Where problems could occur ]

The patch could be wrong, but I already built a kernel with it and it worked fine.