{ "results": [ { "index": 0, "function": "rxrpc_purge_client_connections", "module": "rxrpc", "module_elf": "/sdb1/arjan/git/oops-skill/oops-workdir/fedora/files/usr/lib/debug/lib/modules/6.18.13-200.fc43.x86_64/kernel/net/rxrpc/rxrpc.ko.debug", "address_computed": "0x160d8", "address_formatted": "0x160d8 (0x16080 + 0x58)", "addr2line_address": "0x160d8", "source": { "primary": { "function": "rxrpc_destroy_client_conn_ids", "file": "net/rxrpc/conn_client.c", "line": 64 }, "inlined_frames": [ { "function": "rxrpc_purge_client_connections", "file": "net/rxrpc/conn_client.c", "line": 145 } ] }, "function_source": { "file": "net/rxrpc/conn_client.c", "start_line": 50, "end_line": 68, "code": "\n/*\n * Destroy the client connection ID tree.\n */\nstatic void rxrpc_destroy_client_conn_ids(struct rxrpc_local *local)\n{\n\tstruct rxrpc_connection *conn;\n\tint id;\n\n\tif (!idr_is_empty(&local->conn_ids)) {\n\t\tidr_for_each_entry(&local->conn_ids, conn, id) {\n\t\t\tpr_err(\"AF_RXRPC: Leaked client conn %p {%d}\\n\",\n\t\t\t conn, refcount_read(&conn->ref));\n\t\t}\n\t\tBUG();\n\t}\n\n\tidr_destroy(&local->conn_ids);\n}\n" }, "git_blame_hashes": [ "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d", "a05754295e01f006a651eec759c5dbe682ef6cef", "eb9b9d22754d1926771a22638e81384d517c6ce5", "f06cb29189361353e9ed12df936c8e1d7f69b730" ], "blame_details": [ { "hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d", "subject": "rxrpc: Move client call connection to the I/O thread", "fixes_tag": "cf37b5987508" }, { "hash": "f06cb29189361353e9ed12df936c8e1d7f69b730", "subject": "rxrpc: Make the set of connection IDs per local endpoint" }, { "hash": "a05754295e01f006a651eec759c5dbe682ef6cef", "subject": "rxrpc: Use refcount_t rather than atomic_t" }, { "hash": "eb9b9d22754d1926771a22638e81384d517c6ce5", "subject": "rxrpc: Check that the client conns cache is empty before module removal" } ], "fix_candidates": [ { "hash": "b1fdb0bb3b651", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "996a7208dadbf", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "fc9de52de38f6", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "72f4a9f3f4479", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "454e48a9ff04c", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "92128a7170a22", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "3e8ba61a3fe44", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "db099c625b13a", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "2b5fdc0f5caa5", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" } ], "recent_commits": [ { "hash": "9d35d880e0e4a", "subject": "rxrpc: Move client call connection to the I/O thread" }, { "hash": "f06cb29189361", "subject": "rxrpc: Make the set of connection IDs per local endpoint" }, { "hash": "a05754295e01f", "subject": "rxrpc: Use refcount_t rather than atomic_t" }, { "hash": "eb9b9d22754d1", "subject": "rxrpc: Check that the client conns cache is empty before module removal" } ], "disasm": null, "disasm_note": "split-debug .ko.debug has NOBITS .text \u2014 no companion .ko found; install the kernel-modules package to obtain disassembly" }, { "index": 1, "function": "rxrpc_destroy_local", "module": "rxrpc", "module_elf": "/sdb1/arjan/git/oops-skill/oops-workdir/fedora/files/usr/lib/debug/lib/modules/6.18.13-200.fc43.x86_64/kernel/net/rxrpc/rxrpc.ko.debug", "address_computed": "0x21ab9", "address_formatted": "0x21ab9 (0x219f0 + 0xc9)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0x21ab8", "source": { "primary": { "function": "rxrpc_destroy_local", "file": "net/rxrpc/local_object.c", "line": 451 }, "inlined_frames": [] }, "function_source": { "file": "net/rxrpc/local_object.c", "start_line": 411, "end_line": 453, "code": "}\n\n/*\n * Destroy a local endpoint's socket and then hand the record to RCU to dispose\n * of.\n *\n * Closing the socket cannot be done from bottom half context or RCU callback\n * context because it might sleep.\n */\nvoid rxrpc_destroy_local(struct rxrpc_local *local)\n{\n\tstruct socket *socket = local->socket;\n\tstruct rxrpc_net *rxnet = local->rxnet;\n\n\t_enter(\"%d\", local->debug_id);\n\n\tlocal->dead = true;\n\n\tmutex_lock(&rxnet->local_mutex);\n\thlist_del_init_rcu(&local->link);\n\tmutex_unlock(&rxnet->local_mutex);\n\n\trxrpc_clean_up_local_conns(local);\n\trxrpc_service_connection_reaper(&rxnet->service_conn_reaper);\n\tASSERT(!local->service);\n\n\tif (socket) {\n\t\tlocal->socket = NULL;\n\t\tkernel_sock_shutdown(socket, SHUT_RDWR);\n\t\tsocket->sk->sk_user_data = NULL;\n\t\tsock_release(socket);\n\t}\n\n\t/* At this point, there should be no more packets coming in to the\n\t * local endpoint.\n\t */\n#ifdef CONFIG_AF_RXRPC_INJECT_RX_DELAY\n\trxrpc_purge_queue(&local->rx_delay_queue);\n#endif\n\trxrpc_purge_queue(&local->rx_queue);\n\trxrpc_purge_client_connections(local);\n\tpage_frag_cache_drain(&local->tx_alloc);\n}\n" }, "git_blame_hashes": [ "17926a79320afa9b95df6b977b40cca6d8713cea", "1e9e5c9521d3667664a6e3c97075f71afec23720", "2baec2c3f854d1f79c7bb28386484e144e864a14", "33912c2639ad76660988c8ca97e4d18fca89b668", "3d18dfe69ce46f106af327736d2261d7e3ee81c0", "4f95dd78a77edc42454de55bb32332be293fb461", "730c5fd42c1e3652a065448fd235cb9fafb2bd10", "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d", "a275da62e8c111b897b9cb73eb91df2f4e475ca5", "af094824f20b454ee23b7b5a860b3ba58f4e6938", "d12040b6933f684a26773afad46dbba9778608d7" ], "blame_details": [ { "hash": "3d18dfe69ce46f106af327736d2261d7e3ee81c0", "subject": "mm: page_frag: avoid caller accessing 'page_frag_cache' directly", "link": "https://patch.msgid.link/20241028115343.3405838-5-linyunsheng@huawei.com" }, { "hash": "af094824f20b454ee23b7b5a860b3ba58f4e6938", "subject": "rxrpc: Allow a delay to be injected into packet reception" }, { "hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d", "subject": "rxrpc: Move client call connection to the I/O thread", "fixes_tag": "cf37b5987508" }, { "hash": "a275da62e8c111b897b9cb73eb91df2f4e475ca5", "subject": "rxrpc: Create a per-local endpoint receive queue and I/O thread" }, { "hash": "33912c2639ad76660988c8ca97e4d18fca89b668", "subject": "rxrpc: Allow list of in-use local UDP endpoints to be viewed in /proc" }, { "hash": "d12040b6933f684a26773afad46dbba9778608d7", "subject": "rxrpc: Fix lack of conn cleanup when local endpoint is cleaned up [ver #2]", "fixes_tag": "3d18cbb7fd0c" }, { "hash": "730c5fd42c1e3652a065448fd235cb9fafb2bd10", "subject": "rxrpc: Fix local endpoint refcounting", "fixes_tag": "4f95dd78a77e" }, { "hash": "2baec2c3f854d1f79c7bb28386484e144e864a14", "subject": "rxrpc: Support network namespacing" }, { "hash": "1e9e5c9521d3667664a6e3c97075f71afec23720", "subject": "rxrpc: Reduce the rxrpc_local::services list to a pointer" }, { "hash": "4f95dd78a77edc42454de55bb32332be293fb461", "subject": "rxrpc: Rework local endpoint management" }, { "hash": "17926a79320afa9b95df6b977b40cca6d8713cea", "subject": "[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both" } ], "fix_candidates": [ { "hash": "c64f5fc95e961", "subject": "rxrpc: Fix a race between socket set up and I/O thread creation", "fixes_hash": "a275da62e8c111b897b9cb73eb91df2f4e475ca5" }, { "hash": "56e415202b8a1", "subject": "rxrpc: Fix a race between socket set up and I/O thread creation", "fixes_hash": "a275da62e8c111b897b9cb73eb91df2f4e475ca5" }, { "hash": "cdf4bbbdb956d", "subject": "rxrpc: Fix a race between socket set up and I/O thread creation", "fixes_hash": "a275da62e8c111b897b9cb73eb91df2f4e475ca5" }, { "hash": "bc212465326e8", "subject": "rxrpc: Fix a race between socket set up and I/O thread creation", "fixes_hash": "a275da62e8c111b897b9cb73eb91df2f4e475ca5" }, { "hash": "ac5f54691be06", "subject": "rxrpc: Fix call removal to use RCU safe deletion", "fixes_hash": "2baec2c3f854d1f79c7bb28386484e144e864a14" }, { "hash": "3be718f659683", "subject": "rxrpc: Fix call removal to use RCU safe deletion", "fixes_hash": "2baec2c3f854d1f79c7bb28386484e144e864a14" }, { "hash": "c63abf25203b5", "subject": "rxrpc: Fix call removal to use RCU safe deletion", "fixes_hash": "2baec2c3f854d1f79c7bb28386484e144e864a14" }, { "hash": "93fc15be44a35", "subject": "rxrpc: Fix call removal to use RCU safe deletion", "fixes_hash": "2baec2c3f854d1f79c7bb28386484e144e864a14" }, { "hash": "146d4ab94cf12", "subject": "rxrpc: Fix call removal to use RCU safe deletion", "fixes_hash": "2baec2c3f854d1f79c7bb28386484e144e864a14" }, { "hash": "b1fdb0bb3b651", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "996a7208dadbf", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "fc9de52de38f6", "subject": "rxrpc: Fix missing locking causing hanging calls", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "72f4a9f3f4479", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "454e48a9ff04c", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "92128a7170a22", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "3e8ba61a3fe44", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "db099c625b13a", "subject": "rxrpc: Fix timeout of a call that hasn't yet been granted a channel", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" }, { "hash": "2b5fdc0f5caa5", "subject": "rxrpc: Fix potential data race in rxrpc_wait_to_be_connected()", "fixes_hash": "9d35d880e0e4a3ab32d8c12f9e4d76198aadd42d" } ], "recent_commits": [ { "hash": "3d18dfe69ce46", "subject": "mm: page_frag: avoid caller accessing 'page_frag_cache' directly" }, { "hash": "49489bb03a501", "subject": "rxrpc: Do zerocopy using MSG_SPLICE_PAGES and page frags" }, { "hash": "af094824f20b4", "subject": "rxrpc: Allow a delay to be injected into packet reception" }, { "hash": "9d35d880e0e4a", "subject": "rxrpc: Move client call connection to the I/O thread" }, { "hash": "f06cb29189361", "subject": "rxrpc: Make the set of connection IDs per local endpoint" }, { "hash": "5e6ef4f1017c7", "subject": "rxrpc: Make the I/O thread take over the call and local processor work" }, { "hash": "a275da62e8c11", "subject": "rxrpc: Create a per-local endpoint receive queue and I/O thread" }, { "hash": "33912c2639ad7", "subject": "rxrpc: Allow list of in-use local UDP endpoints to be viewed in /proc" }, { "hash": "d12040b6933f6", "subject": "rxrpc: Fix lack of conn cleanup when local endpoint is cleaned up [ver #2]" }, { "hash": "730c5fd42c1e3", "subject": "rxrpc: Fix local endpoint refcounting" } ] }, { "index": 2, "function": "rxrpc_io_thread", "module": "rxrpc", "module_elf": "/sdb1/arjan/git/oops-skill/oops-workdir/fedora/files/usr/lib/debug/lib/modules/6.18.13-200.fc43.x86_64/kernel/net/rxrpc/rxrpc.ko.debug", "address_computed": "0x1f3cd", "address_formatted": "0x1f3cd (0x1ed70 + 0x65d)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0x1f3cc", "source": { "primary": { "function": "rxrpc_io_thread", "file": "net/rxrpc/io_thread.c", "line": 598 }, "inlined_frames": [] }, "function_source": null, "note": "function boundary heuristic misfired (extracted >150 lines) for net/rxrpc/io_thread.c:598" }, { "index": 3, "function": "kthread", "module": "vmlinux", "address_computed": "0xffffffff813f24ec", "address_formatted": "0xffffffff813f24ec (0xffffffff813f23f0 + 0xfc)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff813f24eb", "source": { "primary": { "function": "kthread", "file": "kernel/kthread.c", "line": 463 }, "inlined_frames": [] }, "function_source": { "file": "kernel/kthread.c", "start_line": 410, "end_line": 466, "code": "\nstatic int kthread(void *_create)\n{\n\tstatic const struct sched_param param = { .sched_priority = 0 };\n\t/* Copy data: it's on kthread's stack */\n\tstruct kthread_create_info *create = _create;\n\tint (*threadfn)(void *data) = create->threadfn;\n\tvoid *data = create->data;\n\tstruct completion *done;\n\tstruct kthread *self;\n\tint ret;\n\n\tself = to_kthread(current);\n\n\t/* Release the structure when caller killed by a fatal signal. */\n\tdone = xchg(&create->done, NULL);\n\tif (!done) {\n\t\tkfree(create->full_name);\n\t\tkfree(create);\n\t\tkthread_exit(-EINTR);\n\t}\n\n\tself->full_name = create->full_name;\n\tself->threadfn = threadfn;\n\tself->data = data;\n\n\t/*\n\t * The new thread inherited kthreadd's priority and CPU mask. Reset\n\t * back to default in case they have been changed.\n\t */\n\tsched_setscheduler_nocheck(current, SCHED_NORMAL, ¶m);\n\n\t/* OK, tell user we're spawned, wait for stop or wakeup */\n\t__set_current_state(TASK_UNINTERRUPTIBLE);\n\tcreate->result = current;\n\t/*\n\t * Thread is going to call schedule(), do not preempt it,\n\t * or the creator may spend more time in wait_task_inactive().\n\t */\n\tpreempt_disable();\n\tcomplete(done);\n\tschedule_preempt_disabled();\n\tpreempt_enable();\n\n\tself->started = 1;\n\n\tif (!(current->flags & PF_NO_SETAFFINITY) && !self->preferred_affinity)\n\t\tkthread_affine_node();\n\n\tret = -EINTR;\n\tif (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) {\n\t\tcgroup_kthread_ready();\n\t\t__kthread_parkme(self);\n\t\tret = threadfn(data);\n\t}\n\tkthread_exit(ret);\n}\n" }, "git_blame_hashes": [ "00b89fe0197f0c55a045775c11553c0cdb7082fe", "1a7243ca4074beed97b68d7235a6e34862fc2cd6", "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "1da5c46fa965ff90f5ffc080b6ab3fae5e227bc3", "26c7295be0c5e6da3fa45970e9748be983175b1b", "2a1d446019f9a5983ec5a335b95e8593fdb6fa2e", "3217ab97f14c5c8f9f975ed8c40c351164b0b10e", "4d13f4304fa43471bfea101658a11feec7b28ac0", "52782c92ac85c4e393eb4a903a62e6c24afa633f", "5eacb68a358503cb350eaf68599a0d6caef569ab", "63706172f332fd3f6e7458ebfb35fa6de9c21dc5", "73c279927f89561ecb45b2dfdf9314bafcfd9f67", "73e0c116594d99f807754b15e474690635a87249", "77f88796cee819b9c4562b0b6b44691b3b7755b1", "786235eeba0e1e85e5cbbb9f97d1087ad03dfa21", "a076e4bca2fdabb9e45d86722cc72c0944da5f94", "bbda86e988d4c124e4cfa816291cbd583ae8bfb1", "d1a89197589c4a77468298ef2b14ff4084c4ea29", "d25c83c6606ffc3abdf0868136ad3399f648ad70" ], "recent_commits": [ { "hash": "4d13f4304fa43", "subject": "kthread: Implement preferred affinity" }, { "hash": "d1a89197589c4", "subject": "kthread: Default affine kthread to its preferred NUMA node" }, { "hash": "5eacb68a35850", "subject": "kthread: Make sure kthread hasn't started while binding it" }, { "hash": "73e0c116594d9", "subject": "kthread: Pass in the thread's name during creation" }, { "hash": "d25c83c6606ff", "subject": "kthread: make it clear that kthread_create_on_node() might be terminated by any fatal signal" }, { "hash": "04d4e665a6090", "subject": "sched/isolation: Use single feature type while referring to housekeeping cpumask" }, { "hash": "40966e316f86b", "subject": "kthread: Ensure struct kthread is present for all kthreads" }, { "hash": "bbda86e988d4c", "subject": "exit: Implement kthread_exit" }, { "hash": "1a7243ca4074b", "subject": "kthread: Move prio/affinite change into the newly created thread" }, { "hash": "00b89fe0197f0", "subject": "sched: Make the idle task quack like a per-CPU kthread" } ] }, { "index": 4, "function": "ret_from_fork", "module": "vmlinux", "address_computed": "0xffffffff8132ab54", "address_formatted": "0xffffffff8132ab54 (0xffffffff8132aa60 + 0xf4)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff8132ab53", "source": { "primary": { "function": "ret_from_fork", "file": "arch/x86/kernel/process.c", "line": 158 }, "inlined_frames": [] }, "function_source": { "file": "arch/x86/kernel/process.c", "start_line": 150, "end_line": 168, "code": "\n__visible void ret_from_fork(struct task_struct *prev, struct pt_regs *regs,\n\t\t\t\t int (*fn)(void *), void *fn_arg)\n{\n\tschedule_tail(prev);\n\n\t/* Is this a kernel thread? */\n\tif (unlikely(fn)) {\n\t\tfn(fn_arg);\n\t\t/*\n\t\t * A kernel thread is allowed to return here after successfully\n\t\t * calling kernel_execve(). Exit to userspace to complete the\n\t\t * execve() syscall.\n\t\t */\n\t\tregs->ax = 0;\n\t}\n\n\tsyscall_exit_to_user_mode(regs);\n}\n" }, "git_blame_hashes": [ "2fff071d28b54f050f62654dad4ec111b8416d8e", "3aec4ecb3d1f313a8ab985df7cab07c4af81f478" ], "recent_commits": [ { "hash": "3aec4ecb3d1f3", "subject": "x86: Rewrite ret_from_fork() in C" }, { "hash": "2fff071d28b54", "subject": "x86/process: Unify copy_thread_tls()" } ] }, { "index": 5, "function": "ret_from_fork_asm", "module": "vmlinux", "address_computed": "0xffffffff812d8dca", "address_formatted": "0xffffffff812d8dca (0xffffffff812d8db0 + 0x1a)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff812d8dc9", "source": { "primary": { "function": "ret_from_fork_asm", "file": "arch/x86/entry/entry_64.S", "line": 245 }, "inlined_frames": [] }, "function_source": { "file": "arch/x86/entry/entry_64.S", "start_line": 205, "end_line": 305, "code": "\t */\n\tFILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW\n\n\t/* restore callee-saved registers */\n\tpopq\t%r15\n\tpopq\t%r14\n\tpopq\t%r13\n\tpopq\t%r12\n\tpopq\t%rbx\n\tpopq\t%rbp\n\n\tjmp\t__switch_to\nSYM_FUNC_END(__switch_to_asm)\n.popsection\n\n/*\n * A newly forked process directly context switches into this address.\n *\n * rax: prev task we switched from\n * rbx: kernel thread func (NULL for user thread)\n * r12: kernel thread arg\n */\n.pushsection .text, \"ax\"\nSYM_CODE_START(ret_from_fork_asm)\n\t/*\n\t * This is the start of the kernel stack; even through there's a\n\t * register set at the top, the regset isn't necessarily coherent\n\t * (consider kthreads) and one cannot unwind further.\n\t *\n\t * This ensures stack unwinds of kernel threads terminate in a known\n\t * good state.\n\t */\n\tUNWIND_HINT_END_OF_STACK\n\tANNOTATE_NOENDBR // copy_thread\n\tCALL_DEPTH_ACCOUNT\n\n\tmovq\t%rax, %rdi\t\t/* prev */\n\tmovq\t%rsp, %rsi\t\t/* regs */\n\tmovq\t%rbx, %rdx\t\t/* fn */\n\tmovq\t%r12, %rcx\t\t/* fn_arg */\n\tcall\tret_from_fork\n\n\t/*\n\t * Set the stack state to what is expected for the target function\n\t * -- at this point the register set should be a valid user set\n\t * and unwind should work normally.\n\t */\n\tUNWIND_HINT_REGS\n\n#ifdef CONFIG_X86_FRED\n\tALTERNATIVE \"jmp swapgs_restore_regs_and_return_to_usermode\", \\\n\t\t \"jmp asm_fred_exit_user\", X86_FEATURE_FRED\n#else\n\tjmp\tswapgs_restore_regs_and_return_to_usermode\n#endif\nSYM_CODE_END(ret_from_fork_asm)\n.popsection\n\n.macro DEBUG_ENTRY_ASSERT_IRQS_OFF\n#ifdef CONFIG_DEBUG_ENTRY\n\tpushq %rax\n\tSAVE_FLAGS\n\ttestl $X86_EFLAGS_IF, %eax\n\tjz .Lokay_\\@\n\tud2\n.Lokay_\\@:\n\tpopq %rax\n#endif\n.endm\n\nSYM_CODE_START(xen_error_entry)\n\tANNOTATE_NOENDBR\n\tUNWIND_HINT_FUNC\n\tPUSH_AND_CLEAR_REGS save_ret=1\n\tENCODE_FRAME_POINTER 8\n\tUNTRAIN_RET_FROM_CALL\n\tRET\nSYM_CODE_END(xen_error_entry)\n\n/**\n * idtentry_body - Macro to emit code calling the C function\n * @cfunc:\t\tC function to be called\n * @has_error_code:\tHardware pushed error code on stack\n */\n.macro idtentry_body cfunc has_error_code:req\n\n\t/*\n\t * Call error_entry() and switch to the task stack if from userspace.\n\t *\n\t * When in XENPV, it is already in the task stack, and it can't fault\n\t * for native_iret() nor native_load_gs_index() since XENPV uses its\n\t * own pvops for IRET and load_gs_index(). And it doesn't need to\n\t * switch the CR3. So it can skip invoking error_entry().\n\t */\n\tALTERNATIVE \"call error_entry; movq %rax, %rsp\", \\\n\t\t \"call xen_error_entry\", X86_FEATURE_XENPV\n\n\tENCODE_FRAME_POINTER\n\tUNWIND_HINT_REGS\n\n\tmovq\t%rsp, %rdi\t\t\t/* pt_regs pointer into 1st argument*/\n" }, "git_blame_hashes": [ "0100301bfdf56a2a370c7157b5ab0fbf9313e1cd", "1d3e53e8624a3ec85f4041ca6d973da7c1575938", "1eeb207f870f746a863e5c59321d837d2d91c218", "2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b", "2e7e5bbb1c3c8d502edeb5c0670eac4995134b6f", "3aec4ecb3d1f313a8ab985df7cab07c4af81f478", "3e3f069504344c241f89737e4af014f83fca0b27", "51ef2a4da7ec347e3315af69a426ac36fab98a6c", "520a7e80c96d655fbe4650d9cc985bd9d0443389", "5d8213864ade86b48fc492584ea86d65a62f892e", "616d24835eeafa8ef3466479db028abfdfc77531", "64cbd0acb58203fb769ed2f4eab526d43e243847", "8a055d7f411d41755ce30db5bb65b154777c4b78", "96c64806b4bf35f5edb465cafa6cec490e424a30", "b9f6976bfb949121bb6e1e6f4fd9909735729148", "c22cf380c79c4bb0e502b0343f57271b17626424", "c995efd5a740d9cbafbf58bde4973e8b50b4d761", "cfa82a00533f7074011a3a49fbb6ed1b1f6fa010", "d147553b64bad34d2f92cb7d8ba454ae95c3baac", "d1c99108af3c5992640aa2afa7d2e88c3775c06e", "e17f8234538d1ff708673f287a42457c4dee720d", "e2dcb5f1390715244aec12dbd6f294863ca37b88", "fafe5e74229fd3f425e3cbfc68b90e615aa6d62f" ], "recent_commits": [ { "hash": "51ef2a4da7ec3", "subject": "x86/fred: Let ret_from_fork_asm() jmp to asm_fred_exit_user when FRED is enabled" }, { "hash": "2e7e5bbb1c3c8", "subject": "x86: Fix kthread unwind" }, { "hash": "3aec4ecb3d1f3", "subject": "x86: Rewrite ret_from_fork() in C" }, { "hash": "fb799447ae297", "subject": "x86,objtool: Split UNWIND_HINT_EMPTY in two" }, { "hash": "5d8213864ade8", "subject": "x86/retbleed: Add SKL return thunk" }, { "hash": "c22cf380c79c4", "subject": "x86/entry: Make some entry symbols global" }, { "hash": "67e93ddd5d0b8", "subject": "x86/entry: Align SYM_CODE_START() variants" }, { "hash": "2c08b9b38f5b0", "subject": "x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry" }, { "hash": "b2620facef488", "subject": "x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n" }, { "hash": "d147553b64bad", "subject": "x86/xen: Add UNTRAIN_RET" } ] } ] }