Hi, Hong

Thank you for the patch.  I added the comments below, other changes look good to me.

@@ -1978,7 +2028,10 @@ arm64_in_exception_text(ulong ptr)
                if ((ptr >= ms->__exception_text_start) &&
                    (ptr < ms->__exception_text_end))
                        return TRUE;
-       } else if ((name = closest_symbol(ptr))) {  /* Linux 5.5 and later */
+       }
+
+       name = closest_symbol(ptr);
+       if (name != NULL) { /* Linux 5.5 and later */

The above changes are irrelevant to your patch itself. But anyway this looks more readable to me.

                for (func = &arm64_exception_functions[0]; *func; func++) {
                        if (STREQ(name, *func))
                                return TRUE;
@@ -2255,12 +2308,14 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
        if (!(machdep->flags & IRQ_STACKS))
                return TRUE;

-       if (!(machdep->flags & IRQ_STACKS))
+       if (!(machdep->flags & OVERFLOW_STACKS))
                return TRUE;

Originally, it had two same(repeated) statements, one of which must be redundant.  This time, can it be changed to a statement as below?

if (!(machdep->flags & (IRQ_STACKS | OVERFLOW_STACKS)))
        return TRUE;

BTW:  this patch was sent as an attachment, which is inconvenient for other reviewers to add comments.

In addition, I  have a request: can you share the vmcore with me if it doesn't have confidential data? I'm collecting the specific vmcore
for the test, at least I haven't reproduced it.

Thanks.
Lianbo