mirror of https://github.com/thesofproject/sof.git
panic: fix faulty panic handling
This commit will change the order of functions in panic_rewind() to fix SOF_IPC_PANIC_STACK in dump_stack(). Thats because arch_dump_regs() function is not able to make a 100% safe return Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
This commit is contained in:
parent
cbd3e07031
commit
2ec2c2101b
|
@ -73,16 +73,13 @@ static inline void fill_core_dump(struct sof_ipc_dsp_oops_xtensa *oops,
|
||||||
arch_dump_regs_a((void *)&oops->exccause, ps);
|
arch_dump_regs_a((void *)&oops->exccause, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *arch_dump_regs(uint32_t ps)
|
static inline void arch_dump_regs(uint32_t ps)
|
||||||
{
|
{
|
||||||
void *buf = (void *)mailbox_get_exception_base();
|
void *buf = (void *)mailbox_get_exception_base();
|
||||||
|
|
||||||
fill_core_dump(buf, ps);
|
fill_core_dump(buf, ps);
|
||||||
|
|
||||||
dcache_writeback_region(buf, sizeof(struct sof_ipc_dsp_oops_xtensa));
|
dcache_writeback_region(buf, sizeof(struct sof_ipc_dsp_oops_xtensa));
|
||||||
|
|
||||||
/* tell caller extended data can be placed hereafter */
|
|
||||||
return ((uint8_t *)buf + sizeof(struct sof_ipc_dsp_oops_xtensa));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -61,8 +61,8 @@ void panic_rewind(uint32_t p, uint32_t stack_rewind_frames,
|
||||||
/* disable all IRQs */
|
/* disable all IRQs */
|
||||||
oldps = interrupt_global_disable();
|
oldps = interrupt_global_disable();
|
||||||
|
|
||||||
/* dump DSP core registers */
|
ext_offset = (void *)mailbox_get_exception_base() +
|
||||||
ext_offset = arch_dump_regs(oldps);
|
sizeof(struct sof_ipc_dsp_oops_xtensa);
|
||||||
|
|
||||||
/* dump panic info, filename ane linenum */
|
/* dump panic info, filename ane linenum */
|
||||||
dump_panicinfo(ext_offset, panic_info);
|
dump_panicinfo(ext_offset, panic_info);
|
||||||
|
@ -73,14 +73,19 @@ void panic_rewind(uint32_t p, uint32_t stack_rewind_frames,
|
||||||
/* dump stack frames */
|
/* dump stack frames */
|
||||||
p = dump_stack(p, ext_offset, stack_rewind_frames, count);
|
p = dump_stack(p, ext_offset, stack_rewind_frames, count);
|
||||||
|
|
||||||
/* panic - send IPC oops message to host */
|
|
||||||
platform_panic(p);
|
|
||||||
|
|
||||||
/* flush last trace messages */
|
/* flush last trace messages */
|
||||||
#if CONFIG_TRACE
|
#if CONFIG_TRACE
|
||||||
trace_flush();
|
trace_flush();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* dump DSP core registers
|
||||||
|
* after arch_dump_regs() use only inline funcs if needed
|
||||||
|
*/
|
||||||
|
arch_dump_regs(oldps);
|
||||||
|
|
||||||
|
/* panic - send IPC oops message to host */
|
||||||
|
platform_panic(p);
|
||||||
|
|
||||||
/* and loop forever */
|
/* and loop forever */
|
||||||
while (1)
|
while (1)
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue