]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
plat/arm64: Fix extregs allocation on Arm
authorJia He <justin.he@arm.com>
Fri, 14 May 2021 01:21:12 +0000 (09:21 +0800)
committerUnikraft <monkey@unikraft.io>
Thu, 1 Jul 2021 09:08:31 +0000 (09:08 +0000)
Implement the extregs (currently only fpsimd registers) allocation
related helpers. Otherwise, Unikraft can't be built on Arm kvm plat
due to the missing of several helpers.

Signed-off-by: Jia He <justin.he@arm.com>
Reviewed-by: Răzvan Vîrtan <virtanrazvan@gmail.com>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Pull-Request: #206

plat/common/include/arm/arm64/cpu.h

index e82f8fba13d98fe1896782fcd7f4c65461aaebbe..153d45a8c75e2708f031adf02715b6d0a456952d 100644 (file)
@@ -169,24 +169,19 @@ static inline void restore_extregs(struct sw_ctx *ctx)
        fpsimd_restore_state(ctx->extregs);
 }
 
-static inline struct sw_ctx *arch_alloc_sw_ctx(struct uk_alloc *allocator)
+static inline void arch_init_extregs(struct sw_ctx *ctx)
 {
-       struct sw_ctx *ctx;
-
-       ctx = (struct sw_ctx *)uk_malloc(allocator,
-                       sizeof(struct sw_ctx) + sizeof(struct fpsimd_state));
        if (ctx)
-               ctx->extregs = (uintptr_t)((void *)ctx + sizeof(struct sw_ctx));
+               ctx->extregs = (uintptr_t)ctx->_extregs;
 
        uk_pr_debug("Allocating %lu + %lu bytes for sw ctx at %p, extregs at %p\n",
-                       sizeof(struct sw_ctx), sizeof(struct fpsimd_state),
-                       ctx, (void *)ctx->extregs);
-
-       return ctx;
+               sizeof(struct sw_ctx), sizeof(struct fpsimd_state),
+               ctx, (void *)ctx->extregs);
 }
 
-static inline void arch_init_extregs(struct sw_ctx *ctx __unused)
+static inline __sz arch_extregs_size(void)
 {
+       return sizeof(struct fpsimd_state);
 }
 
 #else /* !CONFIG_FPSIMD */
@@ -198,21 +193,17 @@ static inline void restore_extregs(struct sw_ctx *ctx __unused)
 {
 }
 
-static inline struct sw_ctx *arch_alloc_sw_ctx(struct uk_alloc *allocator)
+static inline void arch_init_extregs(struct sw_ctx *ctx)
 {
-       struct sw_ctx *ctx;
-
-       ctx = (struct sw_ctx *)uk_malloc(allocator, sizeof(struct sw_ctx));
-       uk_pr_debug("Allocating %lu bytes for sw ctx at %p\n",
-               sizeof(struct sw_ctx), ctx);
-
-       return ctx;
+       if (ctx)
+               ctx->extregs = (uintptr_t)ctx->_extregs;
 }
 
-static inline void arch_init_extregs(struct sw_ctx *ctx)
+static inline __sz arch_extregs_size(void)
 {
-       ctx->extregs = (uintptr_t)ctx + sizeof(struct sw_ctx);
+       return 0;
 }
-
 #endif /* CONFIG_FPSIMD */
+
+
 #endif /* __PLAT_COMMON_ARM64_CPU_H__ */