diff mbox series

[2/4] device-tree: Remove __init from unflatten_dt_alloc()

Message ID 20240919104238.232704-3-michal.orzel@amd.com (mailing list archive)
State Superseded
Headers show
Series xen/arm: dt overlay fixes | expand

Commit Message

Michal Orzel Sept. 19, 2024, 10:42 a.m. UTC
With CONFIG_OVERLAY_DTB=y, unflatten_dt_alloc() is used as part of
unflatten_dt_node() used during runtime. In case of a binary compiled
such as unflatten_dt_alloc() does not get inlined (e.g. using -Og),
attempt to add an overlay to Xen (xl dt-overlay add) results in a crash.

(XEN) Instruction Abort Trap. Syndrome=0x7
(XEN) Walking Hypervisor VA 0xa00002c8cc0 on CPU2 via TTBR 0x0000000040340000
(XEN) 0TH[0x014] = 0x4033ff7f
(XEN) 1ST[0x000] = 0x4033ef7f
(XEN) 2ND[0x001] = 0x4000004033af7f
(XEN) 3RD[0x0c8] = 0x0
(XEN) CPU2: Unexpected Trap: Instruction Abort
(XEN) ----[ Xen-4.20-unstable  arm64  debug=y  Not tainted ]----
...
(XEN) Xen call trace:
(XEN)    [<00000a00002c8cc0>] 00000a00002c8cc0 (PC)
(XEN)    [<00000a0000202410>] device-tree.c#unflatten_dt_node+0xd0/0x504 (LR)
(XEN)    [<00000a0000204484>] unflatten_device_tree+0x54/0x1a0
(XEN)    [<00000a000020800c>] dt-overlay.c#handle_add_overlay_nodes+0x290/0x3d4
(XEN)    [<00000a0000208360>] dt_overlay_sysctl+0x8c/0x110
(XEN)    [<00000a000027714c>] arch_do_sysctl+0x1c/0x2c

Fixes: 9e9d2c079dc4 ("xen/arm/device: Remove __init from function type")
Signed-off-by: Michal Orzel <michal.orzel@amd.com>
---
 xen/common/device-tree/device-tree.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Stefano Stabellini Sept. 20, 2024, 3:54 a.m. UTC | #1
On Thu, 19 Sep 2024, Michal Orzel wrote:
> With CONFIG_OVERLAY_DTB=y, unflatten_dt_alloc() is used as part of
> unflatten_dt_node() used during runtime. In case of a binary compiled
> such as unflatten_dt_alloc() does not get inlined (e.g. using -Og),
> attempt to add an overlay to Xen (xl dt-overlay add) results in a crash.
> 
> (XEN) Instruction Abort Trap. Syndrome=0x7
> (XEN) Walking Hypervisor VA 0xa00002c8cc0 on CPU2 via TTBR 0x0000000040340000
> (XEN) 0TH[0x014] = 0x4033ff7f
> (XEN) 1ST[0x000] = 0x4033ef7f
> (XEN) 2ND[0x001] = 0x4000004033af7f
> (XEN) 3RD[0x0c8] = 0x0
> (XEN) CPU2: Unexpected Trap: Instruction Abort
> (XEN) ----[ Xen-4.20-unstable  arm64  debug=y  Not tainted ]----
> ...
> (XEN) Xen call trace:
> (XEN)    [<00000a00002c8cc0>] 00000a00002c8cc0 (PC)
> (XEN)    [<00000a0000202410>] device-tree.c#unflatten_dt_node+0xd0/0x504 (LR)
> (XEN)    [<00000a0000204484>] unflatten_device_tree+0x54/0x1a0
> (XEN)    [<00000a000020800c>] dt-overlay.c#handle_add_overlay_nodes+0x290/0x3d4
> (XEN)    [<00000a0000208360>] dt_overlay_sysctl+0x8c/0x110
> (XEN)    [<00000a000027714c>] arch_do_sysctl+0x1c/0x2c
> 
> Fixes: 9e9d2c079dc4 ("xen/arm/device: Remove __init from function type")
> Signed-off-by: Michal Orzel <michal.orzel@amd.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
>  xen/common/device-tree/device-tree.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/common/device-tree/device-tree.c b/xen/common/device-tree/device-tree.c
> index 8d1017a49d80..d0528c582565 100644
> --- a/xen/common/device-tree/device-tree.c
> +++ b/xen/common/device-tree/device-tree.c
> @@ -120,8 +120,8 @@ void dt_child_set_range(__be32 **cellp, int addrcells, int sizecells,
>      dt_set_cell(cellp, sizecells, size);
>  }
>  
> -static void __init *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
> -                                       unsigned long align)
> +static void *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
> +                                unsigned long align)
>  {
>      void *res;
>  
> -- 
> 2.37.6
>
diff mbox series

Patch

diff --git a/xen/common/device-tree/device-tree.c b/xen/common/device-tree/device-tree.c
index 8d1017a49d80..d0528c582565 100644
--- a/xen/common/device-tree/device-tree.c
+++ b/xen/common/device-tree/device-tree.c
@@ -120,8 +120,8 @@  void dt_child_set_range(__be32 **cellp, int addrcells, int sizecells,
     dt_set_cell(cellp, sizecells, size);
 }
 
-static void __init *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
-                                       unsigned long align)
+static void *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
+                                unsigned long align)
 {
     void *res;