Why does my backtrace contain a mixture of function call chains?
This is a normal occurance in Linux. Unless CONFIG_FRAME_POINTER is enabled, the function print_context_stack() simply walks the whole stack and looks for any value that might be the address of a function in the kernel. It has no way of knowing whether that address is a stack frame return address from the current code path, a left-over return address from a previous code path or just a random value that was left on the stack.
How do I manually get a stack trace?
You can manually try to create the stack trace from an oops message or from the stack dump of a task. See the ABI page for details on the stack convention for your architecture.