| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/14 07:57 | flow | patch-triage |
18mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies mm/memory_hotplug.c to use 'N_MEMORY_PUBLIC', an identifier that is not defined anywhere in the kernel source tree (enum node_states in include/linux/nodemask.h only defines N_POSSIBLE, N_ONLINE, N_NORMAL_MEMORY, N_HIGH_MEMORY, N_MEMORY, N_CPU, N_GENERIC_INITIATOR, and NR_NODE_STATES). Consequently, any kernel build with CONFIG_MEMORY_HOTPLUG enabled fails to compile due to an undeclared identifier error, and when CONFIG_MEMORY_HOTPLUG is disabled, mm/memory_hotplug.c is excluded from the build. The modified code is structurally uncompilable and cannot execute in any running kernel.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/14 07:57 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 747c46842896f4c9e3cbc94c90b6ba49c660ad93\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Sep 14 07:57:37 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c\nindex d7a59167bec43..683925183df6b 100644\n--- a/mm/memory_hotplug.c\n+++ b/mm/memory_hotplug.c\n@@ -1928,7 +1928,7 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n \t\tfolio_put(folio);\n \t}\n \tif (!list_empty(\u0026source)) {\n-\t\tnodemask_t nmask = node_states[N_MEMORY];\n+\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\n \t\tstruct migration_target_control mtc = {\n \t\t\t.nmask = \u0026nmask,\n \t\t\t.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,\n@@ -1944,8 +1944,8 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n \n \t\t/*\n \t\t * try to allocate from a different node but reuse this node\n-\t\t * if there are no other online nodes to be used (e.g. we are\n-\t\t * offlining a part of the only existing node)\n+\t\t * if there are no other public nodes to be used (e.g. we are\n+\t\t * offlining a part of the only public node)\n \t\t */\n \t\tnode_clear(mtc.nid, nmask);\n \t\tif (nodes_empty(nmask))\n"
} |
| 2/1 | 2026/09/14 07:57 | agent | patch-evaluator |
18mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies mm/memory_hotplug.c to use 'N_MEMORY_PUBLIC', an identifier that is not defined anywhere in the kernel source tree (enum node_states in include/linux/nodemask.h only defines N_POSSIBLE, N_ONLINE, N_NORMAL_MEMORY, N_HIGH_MEMORY, N_MEMORY, N_CPU, N_GENERIC_INITIATOR, and NR_NODE_STATES). Consequently, any kernel build with CONFIG_MEMORY_HOTPLUG enabled fails to compile due to an undeclared identifier error, and when CONFIG_MEMORY_HOTPLUG is disabled, mm/memory_hotplug.c is excluded from the build. The modified code is structurally uncompilable and cannot execute in any running kernel.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit 747c46842896f4c9e3cbc94c90b6ba49c660ad93
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Sep 14 07:57:37 2026 +0000
syz-cluster: applied patch under review
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index d7a59167bec43..683925183df6b 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1928,7 +1928,7 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
folio_put(folio);
}
if (!list_empty(&source)) {
- nodemask_t nmask = node_states[N_MEMORY];
+ nodemask_t nmask = node_states[N_MEMORY_PUBLIC];
struct migration_target_control mtc = {
.nmask = &nmask,
.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
@@ -1944,8 +1944,8 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
/*
* try to allocate from a different node but reuse this node
- * if there are no other online nodes to be used (e.g. we are
- * offlining a part of the only existing node)
+ * if there are no other public nodes to be used (e.g. we are
+ * offlining a part of the only public node)
*/
node_clear(mtc.nid, nmask);
if (nodes_empty(nmask))
|
| 3/2 | 2026/09/14 07:57 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 3060 output: 37 thoughts: 369 Thoughts: **Analyzing a Memory Hotplug Change** Okay, let's dive in. I'm looking at a diff in `mm/memory_hotplug.c`, specifically lines 1928-1944. The key change seems to be in the definition of `nodemask_t nmask`. Previously, it was initialized with `node_states[N_MEMORY]`, but now it's `node_states[N_MEMORY_PUBLIC]`. A subtle, but potentially impactful, shift. This suggests they are changing the scope for which nodes are considered valid migration targets. The comment explains the reasoning: "try to allocate from a different node but reuse this node if there are no other public nodes to be used (e.g. we are offlining a part of the only public node)". The code's behavior when offlining a portion of a node is being refined. It appears they are now explicitly targeting "public" memory nodes, perhaps to exclude some non-public memory types during migrations. Now, I need to understand the broader context. I'll need to explore where `do_migrate_range` is called and how `N_MEMORY_PUBLIC` is defined in relation to `N_MEMORY`. This will involve a quick grep search in the code base, probably using read-file or a grepper tool, to check related callers and the broader implications of this `nodemask_t` change. I need to be sure there are no unintended consequences. Is `N_MEMORY_PUBLIC` a new definition, or is it a redefined existing type? I'll need to look at its definition. The goal is to fully understand how this small change affects the memory hotplug process. |
| 4/2 | 2026/09/14 07:57 | tool | read-file |
0mArgs:{
"File": "mm/memory_hotplug.c",
"FirstLine": 1910,
"LineCount": 55
}Results: {
"Contents": "1910:\t\t\t\t\tgoto put_folio;\n1911:\t\t\t\tif (folio_mapped(folio)) {\n1912:\t\t\t\t\tfolio_lock(folio);\n1913:\t\t\t\t\tunmap_poisoned_folio(folio, pfn, false);\n1914:\t\t\t\t\tfolio_unlock(folio);\n1915:\t\t\t\t}\n1916:\t\n1917:\t\t\t\tgoto put_folio;\n1918:\t\t\t}\n1919:\t\n1920:\t\t\tif (!isolate_folio_to_list(folio, \u0026source)) {\n1921:\t\t\t\tif (__ratelimit(\u0026migrate_rs)) {\n1922:\t\t\t\t\tpr_warn(\"failed to isolate pfn %lx\\n\",\n1923:\t\t\t\t\t\tpage_to_pfn(page));\n1924:\t\t\t\t\tdump_page(page, \"isolation failed\");\n1925:\t\t\t\t}\n1926:\t\t\t}\n1927:\tput_folio:\n1928:\t\t\tfolio_put(folio);\n1929:\t\t}\n1930:\t\tif (!list_empty(\u0026source)) {\n1931:\t\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\n1932:\t\t\tstruct migration_target_control mtc = {\n1933:\t\t\t\t.nmask = \u0026nmask,\n1934:\t\t\t\t.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,\n1935:\t\t\t\t.reason = MR_MEMORY_HOTPLUG,\n1936:\t\t\t};\n1937:\t\t\tint ret;\n1938:\t\n1939:\t\t\t/*\n1940:\t\t\t * We have checked that migration range is on a single zone so\n1941:\t\t\t * we can use the nid of the first page to all the others.\n1942:\t\t\t */\n1943:\t\t\tmtc.nid = folio_nid(list_first_entry(\u0026source, struct folio, lru));\n1944:\t\n1945:\t\t\t/*\n1946:\t\t\t * try to allocate from a different node but reuse this node\n1947:\t\t\t * if there are no other public nodes to be used (e.g. we are\n1948:\t\t\t * offlining a part of the only public node)\n1949:\t\t\t */\n1950:\t\t\tnode_clear(mtc.nid, nmask);\n1951:\t\t\tif (nodes_empty(nmask))\n1952:\t\t\t\tnode_set(mtc.nid, nmask);\n1953:\t\t\tret = migrate_pages(\u0026source, alloc_migration_target, NULL,\n1954:\t\t\t\t(unsigned long)\u0026mtc, MIGRATE_SYNC, MR_MEMORY_HOTPLUG, NULL);\n1955:\t\t\tif (ret) {\n1956:\t\t\t\tlist_for_each_entry(folio, \u0026source, lru) {\n1957:\t\t\t\t\tif (__ratelimit(\u0026migrate_rs)) {\n1958:\t\t\t\t\t\tpr_warn(\"migrating pfn %lx failed ret:%d\\n\",\n1959:\t\t\t\t\t\t\tfolio_pfn(folio), ret);\n1960:\t\t\t\t\t\tdump_page(\u0026folio-\u003epage,\n1961:\t\t\t\t\t\t\t \"migration failure\");\n1962:\t\t\t\t\t}\n1963:\t\t\t\t}\n1964:\t\t\t\tputback_movable_pages(\u0026source);\n"
} |
| 5/2 | 2026/09/14 07:57 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 4683 output: 27 thoughts: 44 Thoughts: Okay, here's my thought process laid out, pretending I'm working on this code: **Finding the Context of `do_migrate_range`** Alright, time to dive into this `do_migrate_range` function. Before I make any assumptions, I need to understand its scope and how it's used. First things first, where is it even *called*? And more importantly, what's going on with these constants like `N_MEMORY_PUBLIC`? Those likely hold some crucial context. I'll need to know their values, or what they represent. The most efficient way to get that bird's-eye view is definitely a quick `grepper` search. Let's fire that up and pinpoint all the call sites of `do_migrate_range`. That should give me the entry points and the surrounding logic. And, I'll tack on a search for the definitions of those constants too, so I understand *those* dependencies. Once I've got that, I'll be in a much better position to understand the function's purpose and how it's integrated into the bigger picture. |
| 6/2 | 2026/09/14 07:57 | tool | grepper |
0mArgs:{
"Expression": "do_migrate_range",
"PathPrefix": "mm/"
}Results: {
"Output": "mm/memory_hotplug.c=1832=static int scan_movable_pages(unsigned long start, unsigned long end,\n--\nmm/memory_hotplug.c-1878-\nmm/memory_hotplug.c:1879:static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\nmm/memory_hotplug.c-1880-{\n--\nmm/memory_hotplug.c=1988=int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\n--\nmm/memory_hotplug.c-2105-\t\t\t\t */\nmm/memory_hotplug.c:2106:\t\t\t\tdo_migrate_range(pfn, end_pfn);\nmm/memory_hotplug.c-2107-\t\t\t}\n"
} |
| 7/2 | 2026/09/14 07:57 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 5208 output: 17 thoughts: 39 Thoughts: Okay, let's break this down. **Investigating the `offline_pages` Function Call Chain** Right, so `offline_pages` seems to be the starting point here. I see that it kicks off `do_migrate_range`. My immediate question, of course, is: *where* is `offline_pages` actually being invoked? I need to trace back the call stack to understand the context and why this migration is happening. So, the next logical step is to analyze the callers of the `offline_pages` function. That should give me a good handle on its purpose and the conditions that trigger this migration process. |
| 8/2 | 2026/09/14 07:57 | tool | grepper |
0mArgs:{
"Expression": "offline_pages"
}Results: {
"Output": "arch/arm64/mm/mmu.c=2125=static bool can_unmap_without_split(unsigned long pfn, unsigned long nr_pages)\n--\narch/arm64/mm/mmu.c-2155- * inadvertently removed as it blocks pfn range offlining process in\narch/arm64/mm/mmu.c:2156: * __offline_pages(). Hence this prevents both offlining as well as\narch/arm64/mm/mmu.c-2157- * removal process for boot memory which is initially always online.\n--\ndrivers/base/memory.c=289=static int memory_block_offline(struct memory_block *mem)\n--\ndrivers/base/memory.c-300-\t * Unaccount before offlining, such that unpopulated zone and kthreads\ndrivers/base/memory.c:301:\t * can properly be torn down in offline_pages().\ndrivers/base/memory.c-302-\t */\n--\ndrivers/base/memory.c-310-\ndrivers/base/memory.c:311:\tret = offline_pages(start_pfn + nr_vmemmap_pages,\ndrivers/base/memory.c-312-\t\t\t nr_pages - nr_vmemmap_pages, mem-\u003ezone, mem-\u003egroup);\ndrivers/base/memory.c-313-\tif (ret) {\ndrivers/base/memory.c:314:\t\t/* offline_pages() failed. Account back. */\ndrivers/base/memory.c-315-\t\tif (nr_vmemmap_pages)\n--\ninclude/linux/memory_hotplug.h=265=extern void try_offline_node(int nid);\ninclude/linux/memory_hotplug.h:266:extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\ninclude/linux/memory_hotplug.h-267-\t\t\t struct zone *zone, struct memory_group *group);\n--\ninclude/linux/memory_hotplug.h=275=static inline void try_offline_node(int nid) {}\ninclude/linux/memory_hotplug.h-276-\ninclude/linux/memory_hotplug.h:277:static inline int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\ninclude/linux/memory_hotplug.h-278-\t\t\t\tstruct zone *zone, struct memory_group *group)\n--\nmm/memory_hotplug.c=543=void remove_pfn_range_from_zone(struct zone *zone,\n--\nmm/memory_hotplug.c-588- * sure that pages are marked reserved and zones are adjust properly by\nmm/memory_hotplug.c:589: * calling offline_pages().\nmm/memory_hotplug.c-590- */\n--\nmm/memory_hotplug.c=1976=static int count_system_ram_pages_cb(unsigned long start_pfn,\n--\nmm/memory_hotplug.c-1987- */\nmm/memory_hotplug.c:1988:int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\nmm/memory_hotplug.c-1989-\t\t\tstruct zone *zone, struct memory_group *group)\n--\nmm/mm_init.c=1524=int __ref free_area_init_core_hotplug(struct pglist_data *pgdat)\n--\nmm/mm_init.c-1568-\t * clear all zones' present_pages and managed_pages because they will\nmm/mm_init.c:1569:\t * be updated in online_pages() and offline_pages().\nmm/mm_init.c-1570-\t */\n"
} |
| 9/2 | 2026/09/14 07:57 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 6334 output: 29 thoughts: 55 Thoughts: **Investigating Memory Block Offlining** Okay, so I'm diving into this memory management stuff again. I need to understand how `memory_block_offline` in `drivers/base/memory.c` actually gets triggered. The function itself seems straightforward enough, I just need to figure out the call path. Right, so the logical next step is to go back into `drivers/base/memory.c` and hunt down the calls to `memory_block_offline`. Let's see what the code reveals. Time to put on the detective hat and trace the calls. |
| 10/2 | 2026/09/14 07:57 | tool | grepper |
0mArgs:{
"Expression": "memory_block_offline",
"PathPrefix": "drivers/base/"
}Results: {
"Output": "drivers/base/memory.c=233=static int memory_block_online(struct memory_block *mem)\n--\ndrivers/base/memory.c-288- */\ndrivers/base/memory.c:289:static int memory_block_offline(struct memory_block *mem)\ndrivers/base/memory.c-290-{\n--\ndrivers/base/memory.c=335=memory_block_action(struct memory_block *mem, unsigned long action)\n--\ndrivers/base/memory.c-343-\tcase MEM_OFFLINE:\ndrivers/base/memory.c:344:\t\tret = memory_block_offline(mem);\ndrivers/base/memory.c-345-\t\tbreak;\n"
} |
| 11/2 | 2026/09/14 07:57 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 6731 output: 19 thoughts: 131 Thoughts: **Investigating Memory Offlining and Syzkaller's Capabilities** Okay, so `memory_block_action` is triggered directly from sysfs, specifically when we write "offline" to something like `/sys/devices/system/memory/memoryX/state`. Interesting. The question now is: can user-space, and more importantly, can *Syzkaller* itself, initiate this memory offlining process? That's a critical point to figure out. Hold on a second... can *anyone* with root privileges, or even a regular user with the right permissions, write directly to `/sys/devices/system/memory/memory*/state`? We need to establish the access control first. That's a potential weak point to explore. Right, so let's shift gears and check Syzkaller's codebase. I need to see if it has any pre-defined rules or descriptions related to sysfs manipulation, particularly within the context of memory hotplugging or offlining. The key is to know if this functionality is already tested and reachable within Syzkaller's framework. That'll save a lot of manual investigation. But wait, before I dive deep into the Syzkaller code, let's take a quick look at the Git log associated with the initial commit that introduced this functionality. Understanding the historical context behind the patch is going to shed valuable light on the "why" and potential side effects, and maybe give me some keywords to search for in Syzkaller. Context is key here. |
| 12/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "N_MEMORY_PUBLIC"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n"
} |
| 13/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 7335 output: 19 thoughts: 35 Thoughts: **Investigating N_MEMORY_PUBLIC** Okay, let's dive in. I need to understand what `N_MEMORY_PUBLIC` actually represents here. First, I have to figure out where it's defined within the codebase. It's time to fire up my search tools. I'll need to do a thorough search for `N_MEMORY_PUBLIC` across the entire project. Hopefully, this will lead me to the relevant header files, and the definition will shed some light on its purpose. I'm expecting this to be a crucial macro or constant, and knowing its declaration is the first step toward figuring out its role in the system. |
| 14/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "N_MEMORY_PUBLIC"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n"
} |
| 15/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 7662 output: 18 thoughts: 49 Thoughts: Okay, here's my take on those thoughts, framed as my own: **Wait a Second... That's Unexpected!** Hold on a minute! I'm seeing something here that's making me raise an eyebrow. `N_MEMORY_PUBLIC`... that's a pretty specific constant, and the only place I'm seeing it referenced is in `mm/memory_hotplug.c`? That seems incredibly narrow. Is that even right? Did I miss something? I need to double-check this. Okay, let's take a quick sanity check and make sure that this actually compiles and is being used correctly. I need to refresh my understanding of how this ties into the bigger picture. I should probably review the `node_states` and `enum node_states` definitions quickly to make sure that I am not missing something that would indicate that the current code is wrong. |
| 16/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "enum node_states"
}Results: {
"Output": "Documentation/mm/physical_memory.rst=158=bitmasks called ``node_states``. Each bitmask in this array represents a set of\nDocumentation/mm/physical_memory.rst:159:nodes with particular properties as defined by ``enum node_states``:\nDocumentation/mm/physical_memory.rst-160-\n--\nDocumentation/translations/zh_CN/mm/physical_memory.rst=95=RAM平均分配在两个节点上的arm64机器上,使用 ``movablecore=80%`` 参数\n--\nDocumentation/translations/zh_CN/mm/physical_memory.rst-145-位掩码数组。这个数组中的每个位掩码代表一组特定属性的节点,这些属性由\nDocumentation/translations/zh_CN/mm/physical_memory.rst:146:``enum node_states`` 定义,定义如下:\nDocumentation/translations/zh_CN/mm/physical_memory.rst-147-\n--\ndrivers/base/node.c=944=struct node_attr {\ndrivers/base/node.c-945-\tstruct device_attribute attr;\ndrivers/base/node.c:946:\tenum node_states state;\ndrivers/base/node.c-947-};\n--\ninclude/linux/nodemask.h=373=static __always_inline void __nodes_fold(nodemask_t *dstp, const nodemask_t *origp,\n--\ninclude/linux/nodemask.h-391- */\ninclude/linux/nodemask.h:392:enum node_states {\ninclude/linux/nodemask.h-393-\tN_POSSIBLE,\t\t/* The node could become online at some point */\n--\ninclude/linux/nodemask.h=412=extern nodemask_t node_states[NR_NODE_STATES];\n--\ninclude/linux/nodemask.h-414-#if MAX_NUMNODES \u003e 1\ninclude/linux/nodemask.h:415:static __always_inline int node_state(int node, enum node_states state)\ninclude/linux/nodemask.h-416-{\n--\ninclude/linux/nodemask.h-419-\ninclude/linux/nodemask.h:420:static __always_inline void node_set_state(int node, enum node_states state)\ninclude/linux/nodemask.h-421-{\n--\ninclude/linux/nodemask.h-424-\ninclude/linux/nodemask.h:425:static __always_inline void node_clear_state(int node, enum node_states state)\ninclude/linux/nodemask.h-426-{\n--\ninclude/linux/nodemask.h-429-\ninclude/linux/nodemask.h:430:static __always_inline int num_node_state(enum node_states state)\ninclude/linux/nodemask.h-431-{\n--\ninclude/linux/nodemask.h=455=static __always_inline void node_set_offline(int nid)\n--\ninclude/linux/nodemask.h-462-\ninclude/linux/nodemask.h:463:static __always_inline int node_state(int node, enum node_states state)\ninclude/linux/nodemask.h-464-{\n--\ninclude/linux/nodemask.h-467-\ninclude/linux/nodemask.h:468:static __always_inline void node_set_state(int node, enum node_states state)\ninclude/linux/nodemask.h-469-{\n--\ninclude/linux/nodemask.h-471-\ninclude/linux/nodemask.h:472:static __always_inline void node_clear_state(int node, enum node_states state)\ninclude/linux/nodemask.h-473-{\n--\ninclude/linux/nodemask.h-475-\ninclude/linux/nodemask.h:476:static __always_inline int num_node_state(enum node_states state)\ninclude/linux/nodemask.h-477-{\n"
} |
| 17/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 8950 output: 37 thoughts: 22 Thoughts: Okay, let's dive into this! **Deep Dive into `nodemask.h` Around Line 390** Alright, time to crack open `include/linux/nodemask.h` and specifically hone in around line 390. I know what's in this header, generally, but I want to refresh my memory on the specific implementations around this point. What I'm anticipating is likely some of the finer details of how node masks are manipulated. I'm thinking perhaps it has something to do with iteration, testing set bits, or maybe even atomic operations related to nodemask modifications. Knowing the precise line number can help narrow my focus. I will be looking out for relevant data structures and functions such as `nodemask_t`, `node_mask_set()`, `node_mask_clr()`, `node_mask_test()`, maybe even a `for_each_node_mask()` equivalent or related iterator macros. It's time to refresh and update my understanding of the fine details of this core kernel component. Let's see what interesting, nuanced optimizations or implementation techniques are being employed here. |
| 18/2 | 2026/09/14 07:58 | tool | read-file |
0mArgs:{
"File": "include/linux/nodemask.h",
"FirstLine": 390,
"LineCount": 35
}Results: {
"Contents": " 390:\t * Bitmasks that are kept for all the nodes.\n 391:\t */\n 392:\tenum node_states {\n 393:\t\tN_POSSIBLE,\t\t/* The node could become online at some point */\n 394:\t\tN_ONLINE,\t\t/* The node is online */\n 395:\t\tN_NORMAL_MEMORY,\t/* The node has regular memory */\n 396:\t#ifdef CONFIG_HIGHMEM\n 397:\t\tN_HIGH_MEMORY,\t\t/* The node has regular or high memory */\n 398:\t#else\n 399:\t\tN_HIGH_MEMORY = N_NORMAL_MEMORY,\n 400:\t#endif\n 401:\t\tN_MEMORY,\t\t/* The node has memory(regular, high, movable) */\n 402:\t\tN_CPU,\t\t/* The node has one or more cpus */\n 403:\t\tN_GENERIC_INITIATOR,\t/* The node has one or more Generic Initiators */\n 404:\t\tNR_NODE_STATES\n 405:\t};\n 406:\t\n 407:\t/*\n 408:\t * The following particular system nodemasks and operations\n 409:\t * on them manage all possible and online nodes.\n 410:\t */\n 411:\t\n 412:\textern nodemask_t node_states[NR_NODE_STATES];\n 413:\t\n 414:\t#if MAX_NUMNODES \u003e 1\n 415:\tstatic __always_inline int node_state(int node, enum node_states state)\n 416:\t{\n 417:\t\treturn node_isset(node, node_states[state]);\n 418:\t}\n 419:\t\n 420:\tstatic __always_inline void node_set_state(int node, enum node_states state)\n 421:\t{\n 422:\t\t__node_set(node, \u0026node_states[state]);\n 423:\t}\n 424:\t\n"
} |
| 19/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 9784 output: 17 thoughts: 234 Thoughts: **Investigating the `node_states` Enum** Okay, hold on a second! Let me take a closer look at this `enum node_states`. I see `N_POSSIBLE`, `N_ONLINE`, `N_NORMAL_MEMORY`, and even the conditionally compiled `N_HIGH_MEMORY`. And of course, there's `N_MEMORY` which covers a range of memory types. But something feels off... where is `N_MEMORY_PUBLIC`? I'm *certain* I've seen that state used somewhere in this context. Hmm... it's just not there. It's conspicuously absent from the enumeration. Is it defined elsewhere, maybe? Time to run a quick grep across the entire source tree. Let's see if `MEMORY_PUBLIC` is being used in some other capacity, perhaps as a macro or a separate definition entirely. I need to understand where this state is actually being defined or referenced. |
| 20/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "MEMORY_PUBLIC"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n"
} |
| 21/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 10374 output: 25 thoughts: 151 Thoughts: **Debugging a Potentially Obscure Macro** Okay, so I'm hitting a roadblock. `N_MEMORY_PUBLIC` is an undeclared identifier, which is never a good sign, especially when dealing with the kernel. My first instinct is to check the usual suspects - the git log. I want to see if it's a recent change, or if it was recently added or removed in the codebase. Let's see what commits touch `mm/memory_hotplug.c` or the `node_states` structure, as those are often related to memory management. Crap, no git log available. Okay, let's pivot. If I don't have direct access to git log, then `grepper` will have to do! I'll scan for `MEMORY` within `include/linux/nodemask.h` or, better yet, in the git commit messages if any files are mentioned. This might give some insight into recent modifications. Hold on, I *do* have `git grep`. Excellent! Time for a more comprehensive search. I'll search for `N_MEMORY` across the entire `include/` directory, especially within `include/linux/nodemask.h`, to ensure I haven't missed a simple declaration. This will be the next step. |
| 22/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "N_MEMORY",
"PathPrefix": "include/"
}Results: {
"Output": "include/linux/cpuset.h=225=static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)\n--\ninclude/linux/cpuset.h-229-\ninclude/linux/cpuset.h:230:#define cpuset_current_mems_allowed (node_states[N_MEMORY])\ninclude/linux/cpuset.h-231-static inline void cpuset_init_current_mems_allowed(void) {}\n--\ninclude/linux/cpuset.h=309=static inline void cpuset_nodes_allowed(struct cgroup *cgroup, nodemask_t *mask)\ninclude/linux/cpuset.h-310-{\ninclude/linux/cpuset.h:311:\tnodes_copy(*mask, node_states[N_MEMORY]);\ninclude/linux/cpuset.h-312-}\n--\ninclude/linux/kexec.h=26=extern note_buf_t __percpu *crash_notes;\n--\ninclude/linux/kexec.h-46-\ninclude/linux/kexec.h:47:#ifndef KEXEC_DESTINATION_MEMORY_LIMIT\ninclude/linux/kexec.h:48:#error KEXEC_DESTINATION_MEMORY_LIMIT not defined\ninclude/linux/kexec.h-49-#endif\n--\ninclude/linux/memory.h-24-\ninclude/linux/memory.h:25:#define MIN_MEMORY_BLOCK_SIZE (1UL \u003c\u003c SECTION_SIZE_BITS)\ninclude/linux/memory.h-26-\n--\ninclude/linux/memory_hotplug.h=35=typedef int __bitwise mhp_t;\n--\ninclude/linux/memory_hotplug.h-54- */\ninclude/linux/memory_hotplug.h:55:#define MHP_MEMMAP_ON_MEMORY ((__force mhp_t)BIT(1))\ninclude/linux/memory_hotplug.h-56-/*\n--\ninclude/linux/net/intel/virtchnl2.h=33=enum virtchnl2_op {\n--\ninclude/linux/net/intel/virtchnl2.h-81-\tVIRTCHNL2_OP_PTP_GET_VPORT_TX_TSTAMP_CAPS\t= 548,\ninclude/linux/net/intel/virtchnl2.h:82:\tVIRTCHNL2_OP_GET_LAN_MEMORY_REGIONS\t\t= 549,\ninclude/linux/net/intel/virtchnl2.h-83-\t/* Opcode 550 is reserved */\n--\ninclude/linux/net/intel/virtchnl2.h=197=enum virtchnl2_cap_other {\n--\ninclude/linux/net/intel/virtchnl2.h-222-\tVIRTCHNL2_CAP_FLOW_STEER\t\t= BIT_ULL(21),\ninclude/linux/net/intel/virtchnl2.h:223:\tVIRTCHNL2_CAP_LAN_MEMORY_REGIONS\t= BIT_ULL(22),\ninclude/linux/net/intel/virtchnl2.h-224-\n--\ninclude/linux/nodemask.h=392=enum node_states {\n--\ninclude/linux/nodemask.h-400-#endif\ninclude/linux/nodemask.h:401:\tN_MEMORY,\t\t/* The node has memory(regular, high, movable) */\ninclude/linux/nodemask.h-402-\tN_CPU,\t\t/* The node has one or more cpus */\n--\ninclude/linux/nodemask.h=430=static __always_inline int num_node_state(enum node_states state)\n--\ninclude/linux/nodemask.h-438-#define first_online_node\tfirst_node(node_states[N_ONLINE])\ninclude/linux/nodemask.h:439:#define first_memory_node\tfirst_node(node_states[N_MEMORY])\ninclude/linux/nodemask.h-440-static __always_inline unsigned int next_online_node(int nid)\n--\ninclude/linux/nodemask.h=444=static __always_inline unsigned int next_memory_node(int nid)\ninclude/linux/nodemask.h-445-{\ninclude/linux/nodemask.h:446:\treturn next_node(nid, node_states[N_MEMORY]);\ninclude/linux/nodemask.h-447-}\n--\ninclude/linux/tpm.h=225=static inline ssize_t tpm_ret_to_err(ssize_t ret)\n--\ninclude/linux/tpm.h-232-\t\treturn 0;\ninclude/linux/tpm.h:233:\tcase TPM2_RC_SESSION_MEMORY:\ninclude/linux/tpm.h-234-\t\treturn -ENOMEM;\n--\ninclude/linux/tpm_command.h=199=enum tpm2_return_codes {\n--\ninclude/linux/tpm_command.h-211-\tTPM2_RC_RETRY\t\t= 0x0922,\ninclude/linux/tpm_command.h:212:\tTPM2_RC_SESSION_MEMORY\t= 0x0903,\ninclude/linux/tpm_command.h-213-};\n--\ninclude/net/rstreason.h-21-\tFN(TCP_ABORT_ON_LINGER)\t\t\\\ninclude/net/rstreason.h:22:\tFN(TCP_ABORT_ON_MEMORY)\t\t\\\ninclude/net/rstreason.h-23-\tFN(TCP_STATE)\t\t\t\\\n--\ninclude/net/rstreason.h=46=enum sk_rst_reason {\n--\ninclude/net/rstreason.h-103-\t/**\ninclude/net/rstreason.h:104:\t * @SK_RST_REASON_TCP_ABORT_ON_MEMORY: abort on memory\ninclude/net/rstreason.h-105-\t * corresponding to LINUX_MIB_TCPABORTONMEMORY\ninclude/net/rstreason.h-106-\t */\ninclude/net/rstreason.h:107:\tSK_RST_REASON_TCP_ABORT_ON_MEMORY,\ninclude/net/rstreason.h-108-\t/**\n--\ninclude/pcmcia/ds.h=220=void pcmcia_disable_device(struct pcmcia_device *p_dev);\n--\ninclude/pcmcia/ds.h-228-/* IO memory */\ninclude/pcmcia/ds.h:229:#define WIN_MEMORY_TYPE_CM\t0x00 /* default */\ninclude/pcmcia/ds.h:230:#define WIN_MEMORY_TYPE_AM\t0x20 /* MAP_ATTRIB */\ninclude/pcmcia/ds.h-231-#define WIN_DATA_WIDTH_8\t0x00 /* default */\n--\ninclude/uapi/linux/batman_adv.h=632=enum batadv_tp_meter_reason {\n--\ninclude/uapi/linux/batman_adv.h-662-\t/**\ninclude/uapi/linux/batman_adv.h:663:\t * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory\ninclude/uapi/linux/batman_adv.h-664-\t */\ninclude/uapi/linux/batman_adv.h:665:\tBATADV_TP_REASON_MEMORY_ERROR\t\t= 131,\ninclude/uapi/linux/batman_adv.h-666-\n--\ninclude/uapi/linux/kvm.h=674=struct kvm_enable_cap {\n--\ninclude/uapi/linux/kvm.h-763-/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */\ninclude/uapi/linux/kvm.h:764:#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30\ninclude/uapi/linux/kvm.h-765-#ifdef __KVM_HAVE_MCE\n"
} |
| 23/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 12870 output: 18 thoughts: 390 Thoughts: **Initial Reaction to a Kernel Commit** Okay, hold on a second! Let me take a closer look at this commit, specifically at the changes to `mm/memory_hotplug.c`. It's right here in the diff... aha! `N_MEMORY_PUBLIC`. This looks immediately suspicious. Why are they using `N_MEMORY_PUBLIC`? Is that even a valid symbol? I can't recall seeing that used commonly in this context, or anywhere for that matter. Let me just check for a second, does this even compile? Wait... `N_MEMORY_PUBLIC`... that's not... defined anywhere in the source, as far as I know. It's almost certain this won't compile unless they've added that definition elsewhere. Okay, gotta be thorough. Right, time for grepper, let's search the kernel source for instances of `N_MEMORY_`. Let's see what's actually going on in here. I'm going to quickly check how this new symbol fits into the system. It will quickly become clear if this is legit or if we have a bug on our hands. |
| 24/2 | 2026/09/14 07:58 | tool | grepper |
0mArgs:{
"Expression": "N_MEMORY_"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 584 lines.\nUse more precise expression if possible.\n\nDocumentation/admin-guide/sysctl/xen.rst=30=This option is only available when the kernel is built with\nDocumentation/admin-guide/sysctl/xen.rst:31:``CONFIG_XEN_BALLOON_MEMORY_HOTPLUG`` enabled.\n--\narch/alpha/include/asm/err_common.h-51-# define EL_TYPE__REGATTA__TITAN_PCHIP1_EXTENDED\t(9)\narch/alpha/include/asm/err_common.h:52:# define EL_TYPE__REGATTA__TITAN_MEMORY_EXTENDED\t(10)\narch/alpha/include/asm/err_common.h-53-# define EL_TYPE__REGATTA__PROCESSOR_DBL_ERROR_HALT\t(11)\n--\narch/alpha/kernel/err_titan.c=511=static struct el_subpacket_annotation el_titan_annotations[] = {\n--\narch/alpha/kernel/err_titan.c-522-\tSUBPACKET_ANNOTATION(EL_CLASS__REGATTA_FAMILY,\narch/alpha/kernel/err_titan.c:523:\t\t\t EL_TYPE__REGATTA__TITAN_MEMORY_EXTENDED,\narch/alpha/kernel/err_titan.c-524-\t\t\t 1,\n--\narch/arm/include/asm/kexec.h-7-/* Maximum address we can reach in physical address mode */\narch/arm/include/asm/kexec.h:8:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/arm/include/asm/kexec.h-9-/* Maximum address we can use for the control code buffer */\n--\narch/arm64/Kconfig=2=config ARM64\n--\narch/arm64/Kconfig-64-\tselect ARCH_KEEP_MEMBLOCK\narch/arm64/Kconfig:65:\tselect ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\narch/arm64/Kconfig-66-\tselect ARCH_USE_CMPXCHG_LOCKREF\n--\narch/arm64/include/asm/kexec.h-17-\narch/arm64/include/asm/kexec.h:18:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/arm64/include/asm/kexec.h-19-\n--\narch/loongarch/include/asm/kexec.h-16-/* Maximum address we can reach in physical address mode */\narch/loongarch/include/asm/kexec.h:17:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/loongarch/include/asm/kexec.h-18- /* Maximum address we can use for the control code buffer */\n--\narch/m68k/include/asm/kexec.h-9-/* Maximum address we can reach in physical address mode */\narch/m68k/include/asm/kexec.h:10:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/m68k/include/asm/kexec.h-11-/* Maximum address we can use for the control code buffer */\n--\narch/mips/include/asm/kexec.h-14-/* Maximum address we can reach in physical address mode */\narch/mips/include/asm/kexec.h:15:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/mips/include/asm/kexec.h-16- /* Maximum address we can use for the control code buffer */\n--\narch/parisc/include/asm/kexec.h-7-/* Maximum address we can reach in physical address mode */\narch/parisc/include/asm/kexec.h:8:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/parisc/include/asm/kexec.h-9-/* Maximum address we can use for the control code buffer */\n--\narch/powerpc/Kconfig=118=config PPC\n--\narch/powerpc/Kconfig-164-\tselect ARCH_KEEP_MEMBLOCK\narch/powerpc/Kconfig:165:\tselect ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\tif PPC_RADIX_MMU\narch/powerpc/Kconfig-166-\tselect ARCH_MIGHT_HAVE_PC_PARPORT\n--\narch/powerpc/include/asm/kexec.h-12-#define KEXEC_SOURCE_MEMORY_LIMIT\t(2 * 1024 * 1024 * 1024UL - 1)\narch/powerpc/include/asm/kexec.h:13:#define KEXEC_DESTINATION_MEMORY_LIMIT\t(2 * 1024 * 1024 * 1024UL - 1)\narch/powerpc/include/asm/kexec.h-14-#define KEXEC_CONTROL_MEMORY_LIMIT\t(2 * 1024 * 1024 * 1024UL - 1)\n--\narch/powerpc/include/asm/kexec.h-27- */\narch/powerpc/include/asm/kexec.h:28:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/powerpc/include/asm/kexec.h-29-\n--\narch/powerpc/kernel/setup_64.c=883=unsigned long memory_block_size_bytes(void)\n--\narch/powerpc/kernel/setup_64.c-887-\narch/powerpc/kernel/setup_64.c:888:\treturn MIN_MEMORY_BLOCK_SIZE;\narch/powerpc/kernel/setup_64.c-889-}\n--\narch/powerpc/mm/init_64.c=466=static int __init dt_scan_mmu_pid_width(unsigned long node,\n--\narch/powerpc/mm/init_64.c-501-#else\narch/powerpc/mm/init_64.c:502:#define DEFAULT_MEMORY_BLOCK_SIZE\tMIN_MEMORY_BLOCK_SIZE\narch/powerpc/mm/init_64.c-503-#endif\n--\narch/powerpc/platforms/pseries/hotplug-memory.c=233=static int pseries_remove_memblock(unsigned long base, unsigned long memblock_size)\n--\narch/powerpc/platforms/pseries/hotplug-memory.c-245-\narch/powerpc/platforms/pseries/hotplug-memory.c:246:\tsections_per_block = memory_block_size / MIN_MEMORY_BLOCK_SIZE;\narch/powerpc/platforms/pseries/hotplug-memory.c-247-\narch/powerpc/platforms/pseries/hotplug-memory.c-248-\tfor (i = 0; i \u003c sections_per_block; i++) {\narch/powerpc/platforms/pseries/hotplug-memory.c:249:\t\t__remove_memory(base, MIN_MEMORY_BLOCK_SIZE);\narch/powerpc/platforms/pseries/hotplug-memory.c:250:\t\tbase += MIN_MEMORY_BLOCK_SIZE;\narch/powerpc/platforms/pseries/hotplug-memory.c-251-\t}\n--\narch/riscv/Kconfig=13=config RISCV\n--\narch/riscv/Kconfig-61-\tselect ARCH_KEEP_MEMBLOCK if ACPI || KEXEC\narch/riscv/Kconfig:62:\tselect ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\tif 64BIT \u0026\u0026 MMU\narch/riscv/Kconfig-63-\tselect ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX\n--\narch/riscv/include/asm/kexec.h-15-/* Maximum address we can reach in physical address mode */\narch/riscv/include/asm/kexec.h:16:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/riscv/include/asm/kexec.h-17-\n--\narch/s390/Kconfig=78=config S390\n--\narch/s390/Kconfig-147-\tselect ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE\narch/s390/Kconfig:148:\tselect ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\narch/s390/Kconfig-149-\tselect ARCH_STACKWALK\n--\narch/s390/include/asm/kexec.h-26-/* Maximum address we can reach in physical address mode */\narch/s390/include/asm/kexec.h:27:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/s390/include/asm/kexec.h-28-\n--\narch/s390/mm/init.c=181=unsigned long memory_block_size_bytes(void)\n--\narch/s390/mm/init.c-186-\t */\narch/s390/mm/init.c:187:\treturn max_t(unsigned long, MIN_MEMORY_BLOCK_SIZE, sclp.rzm);\narch/s390/mm/init.c-188-}\n--\narch/sh/include/asm/kexec.h-21-/* Maximum address we can reach in physical address mode */\narch/sh/include/asm/kexec.h:22:#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/sh/include/asm/kexec.h-23-/* Maximum address we can use for the control code buffer */\n--\narch/x86/Kconfig=57=config X86\n--\narch/x86/Kconfig-116-\tselect ARCH_MEMORY_ORDER_TSO\narch/x86/Kconfig:117:\tselect ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\narch/x86/Kconfig-118-\tselect ARCH_MIGHT_HAVE_ACPI_PDC\t\tif ACPI\n--\narch/x86/configs/xen.config=21=CONFIG_XEN_PCIDEV_FRONTEND=m\n--\narch/x86/configs/xen.config-23-# move to generic config if it ever does.\narch/x86/configs/xen.config:24:CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y\n--\narch/x86/include/asm/kexec.h=37=struct kimage;\n--\narch/x86/include/asm/kexec.h-49-/* Maximum address we can reach in physical address mode */\narch/x86/include/asm/kexec.h:50:# define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)\narch/x86/include/asm/kexec.h-51-/* Maximum address we can use for the control code buffer */\n--\narch/x86/include/asm/kexec.h-63-/* Maximum address we can reach in physical address mode */\narch/x86/include/asm/kexec.h:64:# define KEXEC_DESTINATION_MEMORY_LIMIT (MAXMEM-1)\narch/x86/include/asm/kexec.h-65-/* Maximum address we can use for the control pages */\n--\narch/x86/kernel/apic/x2apic_uv_x.c=543=static __init int adj_blksize(u32 lgre)\n--\narch/x86/kernel/apic/x2apic_uv_x.c-547-\narch/x86/kernel/apic/x2apic_uv_x.c:548:\tfor (size = mem_block_size; size \u003e MIN_MEMORY_BLOCK_SIZE; size \u003e\u003e= 1)\narch/x86/kernel/apic/x2apic_uv_x.c-549-\t\tif (IS_ALIGNED(base, size))\n--\narch/x86/mm/init_64.c=1359=void mark_rodata_ro(void)\n--\narch/x86/mm/init_64.c-1407- * hotremoved. It must be power of two and must be equal or larger than\narch/x86/mm/init_64.c:1408: * MIN_MEMORY_BLOCK_SIZE.\narch/x86/mm/init_64.c-1409- */\n--\narch/x86/mm/init_64.c=1417=int __init set_memory_block_size_order(unsigned int order)\n--\narch/x86/mm/init_64.c-1420-\narch/x86/mm/init_64.c:1421:\tif (size \u003e MEM_SIZE_FOR_LARGE_BLOCK || size \u003c MIN_MEMORY_BLOCK_SIZE)\narch/x86/mm/init_64.c-1422-\t\treturn -EINVAL;\n--\narch/x86/mm/init_64.c=1428=static unsigned long probe_memory_block_size(void)\n--\narch/x86/mm/init_64.c-1439-\tif (boot_mem_end \u003c MEM_SIZE_FOR_LARGE_BLOCK) {\narch/x86/mm/init_64.c:1440:\t\tbz = MIN_MEMORY_BLOCK_SIZE;\narch/x86/mm/init_64.c-1441-\t\tgoto done;\n--\narch/x86/mm/init_64.c-1454-\t} else {\narch/x86/mm/init_64.c:1455:\t\tbz = max(min(bz, MAX_BLOCK_SIZE), MIN_MEMORY_BLOCK_SIZE);\narch/x86/mm/init_64.c-1456-\t}\n--\narch/x86/mm/init_64.c-1458-\t/* Find the largest allowed block size that aligns to memory end */\narch/x86/mm/init_64.c:1459:\tfor (; bz \u003e MIN_MEMORY_BLOCK_SIZE; bz \u003e\u003e= 1) {\narch/x86/mm/init_64.c-1460-\t\tif (IS_ALIGNED(boot_mem_end, bz))\n--\narch/x86/xen/p2m.c=100=EXPORT_SYMBOL_GPL(xen_max_p2m_pfn);\narch/x86/xen/p2m.c-101-\narch/x86/xen/p2m.c:102:#ifdef CONFIG_XEN_MEMORY_HOTPLUG_LIMIT\narch/x86/xen/p2m.c:103:#define P2M_LIMIT CONFIG_XEN_MEMORY_HOTPLUG_LIMIT\narch/x86/xen/p2m.c-104-#else\n--\ndrivers/base/memory.c=160=unsigned long __weak memory_block_size_bytes(void)\ndrivers/base/memory.c-161-{\ndrivers/base/memory.c:162:\treturn MIN_MEMORY_BLOCK_SIZE;\ndrivers/base/memory.c-163-}\n--\ndrivers/base/memory.c=572=static ssize_t probe_store(struct device *dev, struct device_attribute *attr,\n--\ndrivers/base/memory.c-591-\tret = __add_memory(nid, phys_addr,\ndrivers/base/memory.c:592:\t\t\t MIN_MEMORY_BLOCK_SIZE * sections_per_block,\ndrivers/base/memory.c-593-\t\t\t MHP_NONE);\n--\ndrivers/base/memory.c=952=void __init memory_dev_init(void)\n--\ndrivers/base/memory.c-958-\tblock_sz = memory_block_size_bytes();\ndrivers/base/memory.c:959:\tif (!is_power_of_2(block_sz) || block_sz \u003c MIN_MEMORY_BLOCK_SIZE)\ndrivers/base/memory.c-960-\t\tpanic(\"Memory block size not suitable: 0x%lx\\n\", block_sz);\ndrivers/base/memory.c:961:\tsections_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE;\ndrivers/base/memory.c-962-\n--\ndrivers/gpib/ines/ines_gpib.c=1200=static int ines_gpib_config(struct pcmcia_device *link)\n--\ndrivers/gpib/ines/ines_gpib.c-1218-\t */\ndrivers/gpib/ines/ines_gpib.c:1219:\tlink-\u003eresource[2]-\u003eflags |= WIN_MEMORY_TYPE_AM | WIN_DATA_WIDTH_8 | WIN_ENABLE;\ndrivers/gpib/ines/ines_gpib.c-1220-\tlink-\u003eresource[2]-\u003eend = 0x1000;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c=1287=static ssize_t current_memory_partition_store(struct device *dev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1296-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1297:\tmode = UNKNOWN_MEMORY_PARTITION_MODE;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1298-\tfor_each_inst(i, adev-\u003egmc.supported_nps_modes) {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1304-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1305:\tif (mode == UNKNOWN_MEMORY_PARTITION_MODE)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1306-\t\treturn -EINVAL;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c=1539=amdgpu_gmc_get_vf_memory_partition(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1542-\tcase 0:\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1543:\t\treturn UNKNOWN_MEMORY_PARTITION_MODE;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1544-\tcase 1:\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c=1558=amdgpu_gmc_get_memory_partition(struct amdgpu_device *adev, u32 *supp_modes)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1559-{\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1560:\tenum amdgpu_memory_partition mode = UNKNOWN_MEMORY_PARTITION_MODE;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1561-\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c=1581=static bool amdgpu_gmc_validate_partition_info(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1589-\t/* Mode detected by hardware not present in supported modes */\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1590:\tif ((mode != UNKNOWN_MEMORY_PARTITION_MODE) \u0026\u0026\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1591-\t !(BIT(mode - 1) \u0026 supp_modes))\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1594-\tswitch (mode) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1595:\tcase UNKNOWN_MEMORY_PARTITION_MODE:\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1596-\tcase AMDGPU_NPS1_PARTITION_MODE:\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c=1666=void amdgpu_gmc_init_sw_mem_ranges(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1675-\tswitch (mode) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c:1676:\tcase UNKNOWN_MEMORY_PARTITION_MODE:\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c-1677-\t\tadev-\u003egmc.num_mem_partitions = 0;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h=73=enum amdgpu_memory_partition {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h:74:\tUNKNOWN_MEMORY_PARTITION_MODE = 0,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h-75-\tAMDGPU_NPS1_PARTITION_MODE = 1,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c=756=static const char *nps_desc[] = {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c:757:\t[UNKNOWN_MEMORY_PARTITION_MODE] = \"UNKNOWN\",\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c-758-\t[AMDGPU_NPS1_PARTITION_MODE] = \"NPS1\",\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c=629=struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-704-\thive-\u003ehi_req_gpu = NULL;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:705:\tatomic_set(\u0026hive-\u003erequested_nps_mode, UNKNOWN_MEMORY_PARTITION_MODE);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-706-\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c=1440=int amdgpu_xgmi_request_nps_change(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-1454-\tif (atomic_read(\u0026hive-\u003erequested_nps_mode) ==\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1455:\t UNKNOWN_MEMORY_PARTITION_MODE) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-1456-\t\tdev_dbg(adev-\u003edev, \"Unexpected entry for hive NPS change\");\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-1475-\t/* Set to UNKNOWN so that other devices don't request anymore */\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1476:\tatomic_set(\u0026hive-\u003erequested_nps_mode, UNKNOWN_MEMORY_PARTITION_MODE);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c-1477-\tmutex_unlock(\u0026hive-\u003ehive_lock);\n--\ndrivers/gpu/drm/amd/amdgpu/gmc_v9_0.c=1525=static void gmc_v9_0_init_nps_details(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/gmc_v9_0.c-1538-\t/* Mode detected by hardware and supported modes available */\ndrivers/gpu/drm/amd/amdgpu/gmc_v9_0.c:1539:\tif ((mode != UNKNOWN_MEMORY_PARTITION_MODE) \u0026\u0026 supp_modes) {\ndrivers/gpu/drm/amd/amdgpu/gmc_v9_0.c-1540-\t\twhile ((i = ffs(supp_modes))) {\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c=1677=static int fill_in_l2_l3_pcache(struct kfd_cache_properties **props_ext,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c-1733-\t\telse\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c:1734:\t\t\tmode = UNKNOWN_MEMORY_PARTITION_MODE;\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c-1735-\n--\ndrivers/gpu/drm/tegra/falcon.c=15=enum falcon_memory {\ndrivers/gpu/drm/tegra/falcon.c:16:\tFALCON_MEMORY_IMEM,\ndrivers/gpu/drm/tegra/falcon.c:17:\tFALCON_MEMORY_DATA,\ndrivers/gpu/drm/tegra/falcon.c-18-};\n--\ndrivers/gpu/drm/tegra/falcon.c=53=static int falcon_copy_chunk(struct falcon *falcon,\n--\ndrivers/gpu/drm/tegra/falcon.c-60-\ndrivers/gpu/drm/tegra/falcon.c:61:\tif (target == FALCON_MEMORY_IMEM)\ndrivers/gpu/drm/tegra/falcon.c-62-\t\tcmd |= FALCON_DMATRFCMD_IMEM;\n--\ndrivers/gpu/drm/tegra/falcon.c=213=int falcon_boot(struct falcon *falcon)\n--\ndrivers/gpu/drm/tegra/falcon.c-239-\t\t\t\t falcon-\u003efirmware.data.offset + offset,\ndrivers/gpu/drm/tegra/falcon.c:240:\t\t\t\t offset, FALCON_MEMORY_DATA);\ndrivers/gpu/drm/tegra/falcon.c-241-\n--\ndrivers/gpu/drm/tegra/falcon.c-244-\t\tfalcon_copy_chunk(falcon, falcon-\u003efirmware.code.offset + offset,\ndrivers/gpu/drm/tegra/falcon.c:245:\t\t\t\t offset, FALCON_MEMORY_IMEM);\ndrivers/gpu/drm/tegra/falcon.c-246-\n--\ndrivers/mtd/maps/pcmciamtd.c=462=static int pcmciamtd_config(struct pcmcia_device *link)\n--\ndrivers/mtd/maps/pcmciamtd.c-493-\ndrivers/mtd/maps/pcmciamtd.c:494:\tlink-\u003eresource[2]-\u003eflags |= WIN_MEMORY_TYPE_CM | WIN_ENABLE;\ndrivers/mtd/maps/pcmciamtd.c-495-\tlink-\u003eresource[2]-\u003eflags |= (dev-\u003epcmcia_map.bankwidth == 1) ?\n--\ndrivers/net/can/sja1000/ems_pcmcia.c=255=static int ems_pcmcia_probe(struct pcmcia_device *dev)\n--\ndrivers/net/can/sja1000/ems_pcmcia.c-272-\tdev-\u003eresource[2]-\u003eflags =\ndrivers/net/can/sja1000/ems_pcmcia.c:273:\t\t(WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE);\ndrivers/net/can/sja1000/ems_pcmcia.c-274-\tdev-\u003eresource[2]-\u003estart = dev-\u003eresource[2]-\u003eend = 0;\n--\ndrivers/net/can/softing/softing_cs.c=184=static int softingcs_probe_config(struct pcmcia_device *pcmcia, void *priv_data)\n--\ndrivers/net/can/softing/softing_cs.c-194-\ndrivers/net/can/softing/softing_cs.c:195:\tpres-\u003eflags |= WIN_MEMORY_TYPE_CM | WIN_ENABLE;\ndrivers/net/can/softing/softing_cs.c-196-\tif (pdat-\u003egeneration \u003c 2) {\n--\ndrivers/net/ethernet/8390/pcnet_cs.c=276=static struct hw_info *get_hwinfo(struct pcmcia_device *link)\n--\ndrivers/net/ethernet/8390/pcnet_cs.c-283- /* Allocate a small memory window */\ndrivers/net/ethernet/8390/pcnet_cs.c:284: link-\u003eresource[2]-\u003eflags |= WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;\ndrivers/net/ethernet/8390/pcnet_cs.c-285- link-\u003eresource[2]-\u003estart = 0; link-\u003eresource[2]-\u003eend = 0;\n--\ndrivers/net/ethernet/8390/pcnet_cs.c=1411=static int setup_shmem_window(struct pcmcia_device *link, int start_pg,\n--\ndrivers/net/ethernet/8390/pcnet_cs.c-1425- /* Allocate a memory window */\ndrivers/net/ethernet/8390/pcnet_cs.c:1426: link-\u003eresource[3]-\u003eflags |= WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;\ndrivers/net/ethernet/8390/pcnet_cs.c-1427- link-\u003eresource[3]-\u003eflags |= WIN_USE_WAIT;\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c=7953=static int bnx2x_init_hw_func(struct bnx2x *bp)\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c-8228-\tif (CHIP_IS_E1x(bp)) {\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8229:\t\tmain_mem_size = HC_REG_MAIN_MEMORY_SIZE / 2; /*dwords*/\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c-8230-\t\tmain_mem_base = HC_REG_MAIN_MEMORY +\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h=871=extern const u32 dmae_reg_go_c[];\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h-908-#define HC_REG_MAIN_MEMORY\t\t\t\t\t 0x108800\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h:909:#define HC_REG_MAIN_MEMORY_SIZE\t\t\t\t\t 152\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h-910-#define HC_REG_P0_PROD_CONS\t\t\t\t\t 0x108200\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c=491=static int idpf_send_get_caps_msg(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-550-\t\t\t VIRTCHNL2_CAP_RDMA |\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c:551:\t\t\t VIRTCHNL2_CAP_LAN_MEMORY_REGIONS\t|\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-552-\t\t\t VIRTCHNL2_CAP_MACFILTER\t\t|\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c=616=static int idpf_cfg_lan_memory_regions(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-619-\tstruct libie_ctlq_xn_send_params xn_params = {\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c:620:\t\t.chnl_opcode = VIRTCHNL2_OP_GET_LAN_MEMORY_REGIONS,\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-621-\t\t.timeout_ms = IDPF_VC_XN_DEFAULT_TIMEOUT_MSEC,\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c=3028=int idpf_vc_core_init(struct idpf_adapter *adapter)\n--\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-3070-\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c:3071:\tif (idpf_is_cap_ena(adapter, IDPF_OTHER_CAPS, VIRTCHNL2_CAP_LAN_MEMORY_REGIONS)) {\ndrivers/net/ethernet/intel/idpf/idpf_virtchnl.c-3072-\t\terr = idpf_cfg_lan_memory_regions(adapter);\n--\ndrivers/net/ethernet/xircom/xirc2ps_cs.c=692=xirc2ps_config(struct pcmcia_device * link)\n--\ndrivers/net/ethernet/xircom/xirc2ps_cs.c-836-\t */\ndrivers/net/ethernet/xircom/xirc2ps_cs.c:837:\tlink-\u003eresource[2]-\u003eflags = WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_AM |\ndrivers/net/ethernet/xircom/xirc2ps_cs.c-838-\t\t\t\t\tWIN_ENABLE;\n--\ndrivers/scsi/pcmcia/nsp_cs.c=1550=static int nsp_cs_config_check(struct pcmcia_device *p_dev, void *priv_data)\n--\ndrivers/scsi/pcmcia/nsp_cs.c-1562-\t\tp_dev-\u003eresource[2]-\u003eflags |= (WIN_DATA_WIDTH_16 |\ndrivers/scsi/pcmcia/nsp_cs.c:1563:\t\t\t\t\tWIN_MEMORY_TYPE_CM |\ndrivers/scsi/pcmcia/nsp_cs.c-1564-\t\t\t\t\tWIN_ENABLE);\n--\ndrivers/xen/Kconfig=5=config XEN_BALLOON\n--\ndrivers/xen/Kconfig-12-\ndrivers/xen/Kconfig:13:config XEN_BALLOON_MEMORY_HOTPLUG\ndrivers/xen/Kconfig-14-\tbool \"Memory hotplug support for Xen balloon driver\"\n--\ndrivers/xen/Kconfig-52-\ndrivers/xen/Kconfig:53:config XEN_MEMORY_HOTPLUG_LIMIT\ndrivers/xen/Kconfig-54-\tint \"Hotplugged memory limit (in GiB) for a PV guest\"\n--\ndrivers/xen/balloon.c=82=module_param(balloon_boot_timeout, uint, 0444);\ndrivers/xen/balloon.c-83-\ndrivers/xen/balloon.c:84:#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG\ndrivers/xen/balloon.c-85-static int xen_hotplug_unpopulated;\n--\ndrivers/xen/balloon.c=197=static void update_schedule(void)\n--\ndrivers/xen/balloon.c-225-\ndrivers/xen/balloon.c:226:#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG\ndrivers/xen/balloon.c-227-static void release_memory_resource(struct resource *resource)\n--\ndrivers/xen/balloon.c=372=static enum bp_state reserve_additional_memory(void)\n--\ndrivers/xen/balloon.c-377-}\ndrivers/xen/balloon.c:378:#endif /* CONFIG_XEN_BALLOON_MEMORY_HOTPLUG */\ndrivers/xen/balloon.c-379-\n--\ndrivers/xen/balloon.c=731=static int __init balloon_init(void)\n--\ndrivers/xen/balloon.c-772-\ndrivers/xen/balloon.c:773:#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG\ndrivers/xen/balloon.c-774-\tset_online_page_callback(\u0026xen_online_page);\n--\ninclude/linux/kexec.h=26=extern note_buf_t __percpu *crash_notes;\n--\ninclude/linux/kexec.h-46-\ninclude/linux/kexec.h:47:#ifndef KEXEC_DESTINATION_MEMORY_LIMIT\ninclude/linux/kexec.h:48:#error KEXEC_DESTINATION_MEMORY_LIMIT not defined\ninclude/linux/kexec.h-49-#endif\n--\ninclude/linux/memory.h-24-\ninclude/linux/memory.h:25:#define MIN_MEMORY_BLOCK_SIZE (1UL \u003c\u003c SECTION_SIZE_BITS)\ninclude/linux/memory.h-26-\n--\ninclude/linux/net/intel/virtchnl2.h=33=enum virtchnl2_op {\n--\ninclude/linux/net/intel/virtchnl2.h-81-\tVIRTCHNL2_OP_PTP_GET_VPORT_TX_TSTAMP_CAPS\t= 548,\ninclude/linux/net/intel/virtchnl2.h:82:\tVIRTCHNL2_OP_GET_LAN_MEMORY_REGIONS\t\t= 549,\ninclude/linux/net/intel/virtchnl2.h-83-\t/* Opcode 550 is reserved */\n--\ninclude/linux/net/intel/virtchnl2.h=197=enum virtchnl2_cap_other {\n--\ninclude/linux/net/intel/virtchnl2.h-222-\tVIRTCHNL2_CAP_FLOW_STEER\t\t= BIT_ULL(21),\ninclude/linux/net/intel/virtchnl2.h:223:\tVIRTCHNL2_CAP_LAN_MEMORY_REGIONS\t= BIT_ULL(22),\ninclude/linux/net/intel/virtchnl2.h-224-\n--\ninclude/pcmcia/ds.h=220=void pcmcia_disable_device(struct pcmcia_device *p_dev);\n--\ninclude/pcmcia/ds.h-228-/* IO memory */\ninclude/pcmcia/ds.h:229:#define WIN_MEMORY_TYPE_CM\t0x00 /* default */\ninclude/pcmcia/ds.h:230:#define WIN_MEMORY_TYPE_AM\t0x20 /* MAP_ATTRIB */\ninclude/pcmcia/ds.h-231-#define WIN_DATA_WIDTH_8\t0x00 /* default */\n--\ninclude/uapi/linux/batman_adv.h=632=enum batadv_tp_meter_reason {\n--\ninclude/uapi/linux/batman_adv.h-662-\t/**\ninclude/uapi/linux/batman_adv.h:663:\t * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory\ninclude/uapi/linux/batman_adv.h-664-\t */\ninclude/uapi/linux/batman_adv.h:665:\tBATADV_TP_REASON_MEMORY_ERROR\t\t= 131,\ninclude/uapi/linux/batman_adv.h-666-\n--\ninclude/uapi/linux/kvm.h=674=struct kvm_enable_cap {\n--\ninclude/uapi/linux/kvm.h-763-/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */\ninclude/uapi/linux/kvm.h:764:#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30\ninclude/uapi/linux/kvm.h-765-#ifdef __KVM_HAVE_MCE\n--\nkernel/kexec_core.c=110=int sanity_check_segment_list(struct kimage *image)\n--\nkernel/kexec_core.c-138-\t\t\treturn -EADDRNOTAVAIL;\nkernel/kexec_core.c:139:\t\tif (mend \u003e= KEXEC_DESTINATION_MEMORY_LIMIT)\nkernel/kexec_core.c-140-\t\t\treturn -EADDRNOTAVAIL;\n--\nmm/Kconfig=585=config MHP_MEMMAP_ON_MEMORY\nmm/Kconfig-586-\tdef_bool y\nmm/Kconfig:587:\tdepends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\nmm/Kconfig-588-\nmm/Kconfig=589=endif # MEMORY_HOTPLUG\nmm/Kconfig-590-\nmm/Kconfig:591:config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE\nmm/Kconfig-592- bool\n--\nmm/kasan/init.c=445=void kasan_remove_zero_shadow(void *start, unsigned long size)\n--\nmm/kasan/init.c-452-\nmm/kasan/init.c:453:\tif (WARN_ON((unsigned long)start % KASAN_MEMORY_PER_SHADOW_PAGE) ||\nmm/kasan/init.c:454:\t WARN_ON(size % KASAN_MEMORY_PER_SHADOW_PAGE))\nmm/kasan/init.c-455-\t\treturn;\n--\nmm/kasan/init.c=480=int kasan_add_zero_shadow(void *start, unsigned long size)\n--\nmm/kasan/init.c-487-\nmm/kasan/init.c:488:\tif (WARN_ON((unsigned long)start % KASAN_MEMORY_PER_SHADOW_PAGE) ||\nmm/kasan/init.c:489:\t WARN_ON(size % KASAN_MEMORY_PER_SHADOW_PAGE))\nmm/kasan/init.c-490-\t\treturn -EINVAL;\n--\nmm/kasan/kasan.h=124=static inline bool kasan_requires_meta(void)\n--\nmm/kasan/kasan.h-139-\nmm/kasan/kasan.h:140:#define KASAN_MEMORY_PER_SHADOW_PAGE\t(KASAN_GRANULE_SIZE \u003c\u003c PAGE_SHIFT)\nmm/kasan/kasan.h-141-\n--\nmm/kasan/shadow.c=213=static int __meminit kasan_mem_notifier(struct notifier_block *nb,\n--\nmm/kasan/shadow.c-226-\tif (WARN_ON(mem_data-\u003enr_pages % KASAN_GRANULE_SIZE) ||\nmm/kasan/shadow.c:227:\t\tWARN_ON(start_kaddr % KASAN_MEMORY_PER_SHADOW_PAGE))\nmm/kasan/shadow.c-228-\t\treturn NOTIFY_BAD;\n--\nmm/kasan/shadow.c=566=void __kasan_release_vmalloc(unsigned long start, unsigned long end,\n--\nmm/kasan/shadow.c-574-\nmm/kasan/shadow.c:575:\tregion_start = ALIGN(start, KASAN_MEMORY_PER_SHADOW_PAGE);\nmm/kasan/shadow.c:576:\tregion_end = ALIGN_DOWN(end, KASAN_MEMORY_PER_SHADOW_PAGE);\nmm/kasan/shadow.c-577-\nmm/kasan/shadow.c:578:\tfree_region_start = ALIGN(free_region_start, KASAN_MEMORY_PER_SHADOW_PAGE);\nmm/kasan/shadow.c-579-\n--\nmm/kasan/shadow.c-581-\t free_region_start \u003c region_start)\nmm/kasan/shadow.c:582:\t\tregion_start -= KASAN_MEMORY_PER_SHADOW_PAGE;\nmm/kasan/shadow.c-583-\nmm/kasan/shadow.c:584:\tfree_region_end = ALIGN_DOWN(free_region_end, KASAN_MEMORY_PER_SHADOW_PAGE);\nmm/kasan/shadow.c-585-\n--\nmm/kasan/shadow.c-587-\t free_region_end \u003e region_end)\nmm/kasan/shadow.c:588:\t\tregion_end += KASAN_MEMORY_PER_SHADOW_PAGE;\nmm/kasan/shadow.c-589-\n--\nmm/memory_hotplug.c=48=enum {\nmm/memory_hotplug.c:49:\tMEMMAP_ON_MEMORY_DISABLE = 0,\nmm/memory_hotplug.c:50:\tMEMMAP_ON_MEMORY_ENABLE,\nmm/memory_hotplug.c:51:\tMEMMAP_ON_MEMORY_FORCE,\n\n"
} |
| 25/2 | 2026/09/14 07:58 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 25008 output: 16 thoughts: 100 Thoughts: **Investigating the Undefined `N_MEMORY_PUBLIC`** Okay, hold on a second... what's this? I'm looking through the kernel code and I've stumbled upon `N_MEMORY_PUBLIC`, and it's not defined anywhere? That's... unusual, to say the least. It's used in `mm/memory_hotplug.c` with `nodemask_t nmask = node_states[N_MEMORY_PUBLIC];`, but where is this thing actually *declared*? This is immediately raising red flags. Let me just double-check that this isn't some oversight. I'll do a quick sweep of the entire codebase to be absolutely sure this `N_MEMORY_PUBLIC` isn't lurking anywhere else. Yep, still nothing. Right, the next logical step. It *has* to be defined somewhere, right? It might be in a header file, so I need to go through those. This screams "convention" so I should probably search for `PUBLIC` in all of the header files. I'll get to the bottom of this. Something doesn't smell right here, and I need to figure out what's going on. |
| 26/2 | 2026/09/14 07:59 | tool | grepper |
0mArgs:{
"Expression": "_PUBLIC"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 2333 lines.\nUse more precise expression if possible.\n\nDocumentation/admin-guide/media/omap3isp.rst=74=OMAP 3430 TRM:\nDocumentation/admin-guide/media/omap3isp.rst:75:\u003cURL:http://focus.ti.com/pdfs/wtbu/OMAP34xx_ES3.1.x_PUBLIC_TRM_vZM.zip\u003e\nDocumentation/admin-guide/media/omap3isp.rst-76-Referenced 2011-03-05.\n--\nDocumentation/admin-guide/media/omap3isp.rst=81=OMAP 3630 TRM:\nDocumentation/admin-guide/media/omap3isp.rst:82:\u003cURL:http://focus.ti.com/pdfs/wtbu/OMAP36xx_ES1.x_PUBLIC_TRM_vQ.zip\u003e\nDocumentation/admin-guide/media/omap3isp.rst-83-Referenced 2011-03-05.\n--\nDocumentation/netlink/specs/wireguard.yaml=220=operations:\n--\nDocumentation/netlink/specs/wireguard.yaml-239- written in the following message, except it will only contain\nDocumentation/netlink/specs/wireguard.yaml:240: ``WGPEER_A_PUBLIC_KEY`` and ``WGPEER_A_ALLOWEDIPS``. This may occur\nDocumentation/netlink/specs/wireguard.yaml-241- several times in a row for the same peer. It is then up to the receiver\n--\nDocumentation/security/keys/trusted-encrypted.rst=604=string length.\nDocumentation/security/keys/trusted-encrypted.rst-605-\nDocumentation/security/keys/trusted-encrypted.rst:606:privkey is the binary representation of TPM2B_PUBLIC excluding the\nDocumentation/security/keys/trusted-encrypted.rst-607-initial TPM2B header which can be reconstructed from the ASN.1 octed\n--\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt=257=OMAP 3430 TRM:\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt:258:\u003cURL:http://focus.ti.com/pdfs/wtbu/OMAP34xx_ES3.1.x_PUBLIC_TRM_vZM.zip\u003e\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt-259-参考于 2011-03-05.\n--\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt=264=OMAP 3630 TRM:\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt:265:\u003cURL:http://focus.ti.com/pdfs/wtbu/OMAP36xx_ES1.x_PUBLIC_TRM_vQ.zip\u003e\nDocumentation/translations/zh_CN/video4linux/omap3isp.txt-266-参考于 2011-03-05.\n--\narch/arm/configs/wpcm450_defconfig=186=CONFIG_ASYMMETRIC_KEY_TYPE=y\narch/arm/configs/wpcm450_defconfig:187:CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y\narch/arm/configs/wpcm450_defconfig-188-CONFIG_X509_CERTIFICATE_PARSER=y\n--\narch/arm/mach-omap1/hardware.h=56=static inline u32 omap_cs3_phys(void)\n--\narch/arm/mach-omap1/hardware.h-188- */\narch/arm/mach-omap1/hardware.h:189:#define TIPB_PUBLIC_CNTL_BASE\t\t0xfffed300\narch/arm/mach-omap1/hardware.h:190:#define MPU_PUBLIC_TIPB_CNTL\t\t(TIPB_PUBLIC_CNTL_BASE + 0x8)\narch/arm/mach-omap1/hardware.h-191-#define TIPB_PRIVATE_CNTL_BASE\t\t0xfffeca00\n--\narch/arm/mach-omap1/io.c=55=void __init omap1_init_early(void)\n--\narch/arm/mach-omap1/io.c-61-\t */\narch/arm/mach-omap1/io.c:62:\tomap_writew(0x0, MPU_PUBLIC_TIPB_CNTL);\narch/arm/mach-omap1/io.c-63-\tomap_writew(0x0, MPU_PRIVATE_TIPB_CNTL);\n--\narch/mips/include/asm/mach-loongson64/loongson_regs.h=196=static inline void csr_writeq(u64 val, u32 reg)\n--\narch/mips/include/asm/mach-loongson64/loongson_regs.h-212-/* Public CSR Register can also be accessed with regular addresses */\narch/mips/include/asm/mach-loongson64/loongson_regs.h:213:#define CSR_PUBLIC_MMIO_BASE 0x1fe00000\narch/mips/include/asm/mach-loongson64/loongson_regs.h-214-\narch/mips/include/asm/mach-loongson64/loongson_regs.h:215:#define MMIO_CSR(x)\t\t(void *)TO_UNCAC(CSR_PUBLIC_MMIO_BASE + x)\narch/mips/include/asm/mach-loongson64/loongson_regs.h-216-\n--\narch/powerpc/platforms/512x/clock-commonclk.c=40=enum {\narch/powerpc/platforms/512x/clock-commonclk.c-41-\t/* arrange for adjacent numbers after the public set */\narch/powerpc/platforms/512x/clock-commonclk.c:42:\tMPC512x_CLK_START_PRIVATE = MPC512x_CLK_LAST_PUBLIC,\narch/powerpc/platforms/512x/clock-commonclk.c-43-\t/* clocks which aren't announced to the public */\n--\narch/powerpc/platforms/512x/clock-commonclk.c=940=static void __init mpc5121_clk_register_of_provider(struct device_node *np)\n--\narch/powerpc/platforms/512x/clock-commonclk.c-942-\tclk_data.clks = clks;\narch/powerpc/platforms/512x/clock-commonclk.c:943:\tclk_data.clk_num = MPC512x_CLK_LAST_PUBLIC + 1;\t/* _not_ ARRAY_SIZE() */\narch/powerpc/platforms/512x/clock-commonclk.c-944-\tof_clk_add_provider(np, of_clk_src_onecell_get, \u0026clk_data);\n--\narch/x86/include/asm/xen/cpuid.h-29-\narch/x86/include/asm/xen/cpuid.h:30:#ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__\narch/x86/include/asm/xen/cpuid.h:31:#define __XEN_PUBLIC_ARCH_X86_CPUID_H__\narch/x86/include/asm/xen/cpuid.h-32-\n--\narch/x86/include/asm/xen/cpuid.h-138-\narch/x86/include/asm/xen/cpuid.h:139:#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */\n--\ncrypto/asymmetric_keys/Kconfig=11=if ASYMMETRIC_KEY_TYPE\ncrypto/asymmetric_keys/Kconfig-12-\ncrypto/asymmetric_keys/Kconfig:13:config ASYMMETRIC_PUBLIC_KEY_SUBTYPE\ncrypto/asymmetric_keys/Kconfig-14-\ttristate \"Asymmetric public-key crypto algorithm subtype\"\n--\ncrypto/asymmetric_keys/Kconfig=26=config X509_CERTIFICATE_PARSER\ncrypto/asymmetric_keys/Kconfig-27-\ttristate \"X.509 certificate parser\"\ncrypto/asymmetric_keys/Kconfig:28:\tdepends on ASYMMETRIC_PUBLIC_KEY_SUBTYPE\ncrypto/asymmetric_keys/Kconfig-29-\tselect ASN1\n--\ncrypto/asymmetric_keys/Kconfig=37=config PKCS8_PRIVATE_KEY_PARSER\ncrypto/asymmetric_keys/Kconfig-38-\ttristate \"PKCS#8 private key parser\"\ncrypto/asymmetric_keys/Kconfig:39:\tdepends on ASYMMETRIC_PUBLIC_KEY_SUBTYPE\ncrypto/asymmetric_keys/Kconfig-40-\tselect ASN1\n--\ncrypto/asymmetric_keys/Makefile=8=asymmetric_keys-y := \\\n--\ncrypto/asymmetric_keys/Makefile-12-\ncrypto/asymmetric_keys/Makefile:13:obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o\ncrypto/asymmetric_keys/Makefile-14-\n--\ncrypto/mldsa.c=10=struct crypto_mldsa_ctx {\ncrypto/mldsa.c:11:\tu8 pk[MAX(MAX(MLDSA44_PUBLIC_KEY_SIZE,\ncrypto/mldsa.c:12:\t\t MLDSA65_PUBLIC_KEY_SIZE),\ncrypto/mldsa.c:13:\t\t MLDSA87_PUBLIC_KEY_SIZE)];\ncrypto/mldsa.c-14-\tunsigned int pk_len;\n--\ncrypto/mldsa.c=39=static unsigned int crypto_mldsa_key_size(struct crypto_sig *tfm)\n--\ncrypto/mldsa.c-44-\tcase MLDSA44:\ncrypto/mldsa.c:45:\t\treturn MLDSA44_PUBLIC_KEY_SIZE;\ncrypto/mldsa.c-46-\tcase MLDSA65:\ncrypto/mldsa.c:47:\t\treturn MLDSA65_PUBLIC_KEY_SIZE;\ncrypto/mldsa.c-48-\tcase MLDSA87:\ncrypto/mldsa.c:49:\t\treturn MLDSA87_PUBLIC_KEY_SIZE;\ncrypto/mldsa.c-50-\tdefault:\n--\ndrivers/char/hw_random/optee-rng.c=211=static int optee_rng_probe(struct tee_client_device *rng_device)\n--\ndrivers/char/hw_random/optee-rng.c-226-\texport_uuid(sess_arg.uuid, \u0026rng_device-\u003eid.uuid);\ndrivers/char/hw_random/optee-rng.c:227:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/char/hw_random/optee-rng.c-228-\tsess_arg.num_params = 0;\n--\ndrivers/char/tpm/tpm2-sessions.c=166=static int tpm2_read_public(struct tpm_chip *chip, u32 handle, void *name)\n--\ndrivers/char/tpm/tpm2-sessions.c-183-\ttpm_buf_init(buf, TPM_BUFSIZE);\ndrivers/char/tpm/tpm2-sessions.c:184:\ttpm_buf_reset(buf, TPM2_ST_NO_SESSIONS, TPM2_CC_READ_PUBLIC);\ndrivers/char/tpm/tpm2-sessions.c-185-\ttpm_buf_append_u32(buf, handle);\n--\ndrivers/char/tpm/tpm2-sessions.c-190-\ndrivers/char/tpm/tpm2-sessions.c:191:\t/* Skip TPMT_PUBLIC: */\ndrivers/char/tpm/tpm2-sessions.c-192-\toffset += tpm_buf_read_u16(buf, \u0026offset);\n--\ndrivers/char/tpm/tpm_ftpm_tee.c=172=static int ftpm_tee_probe_generic(struct device *dev)\n--\ndrivers/char/tpm/tpm_ftpm_tee.c-198-\texport_uuid(sess_arg.uuid, \u0026ftpm_ta_uuid);\ndrivers/char/tpm/tpm_ftpm_tee.c:199:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/char/tpm/tpm_ftpm_tee.c-200-\tsess_arg.num_params = 0;\n--\ndrivers/crypto/caam/desc.h-452-#define OP_PCLID_SECRETKEY\t(0x11 \u003c\u003c OP_PCLID_SHIFT)\ndrivers/crypto/caam/desc.h:453:#define OP_PCLID_PUBLICKEYPAIR\t(0x14 \u003c\u003c OP_PCLID_SHIFT)\ndrivers/crypto/caam/desc.h-454-#define OP_PCLID_DSASIGN\t(0x15 \u003c\u003c OP_PCLID_SHIFT)\n--\ndrivers/crypto/ccp/ccp-dev-v5.c=779=static int ccp5_init(struct ccp_device *ccp)\n--\ndrivers/crypto/ccp/ccp-dev-v5.c-903-\tstatus_hi = ioread32(ccp-\u003eio_regs + LSB_PRIVATE_MASK_HI_OFFSET);\ndrivers/crypto/ccp/ccp-dev-v5.c:904:\tiowrite32(status_lo, ccp-\u003eio_regs + LSB_PUBLIC_MASK_LO_OFFSET);\ndrivers/crypto/ccp/ccp-dev-v5.c:905:\tiowrite32(status_hi, ccp-\u003eio_regs + LSB_PUBLIC_MASK_HI_OFFSET);\ndrivers/crypto/ccp/ccp-dev-v5.c-906-\tstatus = ((u64)status_hi\u003c\u003c30) | (u64)status_lo;\n--\ndrivers/crypto/ccp/ccp-dev.h-67-#define\tCMD5_CMD_TIMEOUT_OFFSET\t\t0x10\ndrivers/crypto/ccp/ccp-dev.h:68:#define LSB_PUBLIC_MASK_LO_OFFSET\t0x18\ndrivers/crypto/ccp/ccp-dev.h:69:#define LSB_PUBLIC_MASK_HI_OFFSET\t0x1C\ndrivers/crypto/ccp/ccp-dev.h-70-#define LSB_PRIVATE_MASK_LO_OFFSET\t0x20\n--\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c=339=static int virtio_crypto_rsa_set_key(struct crypto_akcipher *tfm,\n--\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c-360-\t} else {\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c:361:\t\tkeytype = VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC;\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c-362-\t\tret = rsa_parse_pub_key(\u0026rsa_key, key, keylen);\n--\ndrivers/firmware/broadcom/tee_bnxt_fw.c=184=static int tee_bnxt_fw_probe(struct tee_client_device *bnxt_device)\n--\ndrivers/firmware/broadcom/tee_bnxt_fw.c-200-\texport_uuid(sess_arg.uuid, \u0026bnxt_device-\u003eid.uuid);\ndrivers/firmware/broadcom/tee_bnxt_fw.c:201:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/firmware/broadcom/tee_bnxt_fw.c-202-\tsess_arg.num_params = 0;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c=560=int amdgpu_amdkfd_get_dmabuf_info(struct amdgpu_device *adev, int dma_buf_fd,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c-620-\t\tif (bo-\u003eflags \u0026 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c:621:\t\t\t*flags |= KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c-622-\t}\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c=1709=int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c-1739-\t\t\t\tAMDGPU_GEM_CREATE_VRAM_CLEARED;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1740:\t\t\talloc_flags |= (flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC) ?\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c-1741-\t\t\tAMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED : 0;\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c=1081=static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c-1146-\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c:1147:\tif ((flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC) \u0026\u0026\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c-1148-\t\t(flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_VRAM) \u0026\u0026\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c=2254=static int kfd_create_vcrat_image_gpu(void *pcrat_image,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c-2335-\t\tret = kfd_fill_gpu_memory_affinity(\u0026avail_size,\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c:2336:\t\t\t\tkdev, HSA_MEM_HEAP_TYPE_FB_PUBLIC,\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c-2337-\t\t\t\tlocal_mem_info.local_mem_size_public,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c=2048=int kfd_topology_add_device(struct kfd_node *gpu)\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c-2092-\t */\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c:2093:\tfor (i = 0; i \u003c KFD_TOPOLOGY_PUBLIC_NAME_SIZE-1; i++) {\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.c-2094-\t\tdev-\u003enode_props.name[i] = __tolower(asic_name[i]);\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h-32-\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h:33:#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 32\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h-34-\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h=43=struct kfd_node_properties {\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h-82-\tuint32_t debug_memory_size;\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h:83:\tchar name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];\ndrivers/gpu/drm/amd/amdkfd/kfd_topology.h-84-};\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-992-//RSMU_STRAP_STATUS_DMU\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:993:#define RSMU_STRAP_STATUS_DMU__RSMU_PUBLIC_FUSE_STATUS__SHIFT 0x0\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-994-#define RSMU_STRAP_STATUS_DMU__RSMU_SECURITY_FUSE_STATUS__SHIFT 0x8\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-996-#define RSMU_STRAP_STATUS_DMU__RSMU_ROM_STRAP_STATUS__SHIFT 0x18\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:997:#define RSMU_STRAP_STATUS_DMU__RSMU_PUBLIC_FUSE_STATUS_MASK 0x00000001L\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-998-#define RSMU_STRAP_STATUS_DMU__RSMU_SECURITY_FUSE_STATUS_MASK 0x00000100L\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-1687-//RSMU_STRAP_STATUS_DIO\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:1688:#define RSMU_STRAP_STATUS_DIO__RSMU_PUBLIC_FUSE_STATUS__SHIFT 0x0\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-1689-#define RSMU_STRAP_STATUS_DIO__RSMU_SECURITY_FUSE_STATUS__SHIFT 0x8\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-1691-#define RSMU_STRAP_STATUS_DIO__RSMU_ROM_STRAP_STATUS__SHIFT 0x18\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:1692:#define RSMU_STRAP_STATUS_DIO__RSMU_PUBLIC_FUSE_STATUS_MASK 0x00000001L\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-1693-#define RSMU_STRAP_STATUS_DIO__RSMU_SECURITY_FUSE_STATUS_MASK 0x00000100L\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-2156-//RSMU_STRAP_STATUS_HDA\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:2157:#define RSMU_STRAP_STATUS_HDA__RSMU_PUBLIC_FUSE_STATUS__SHIFT 0x0\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-2158-#define RSMU_STRAP_STATUS_HDA__RSMU_SECURITY_FUSE_STATUS__SHIFT 0x8\n--\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-2160-#define RSMU_STRAP_STATUS_HDA__RSMU_ROM_STRAP_STATUS__SHIFT 0x18\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h:2161:#define RSMU_STRAP_STATUS_HDA__RSMU_PUBLIC_FUSE_STATUS_MASK 0x00000001L\ndrivers/gpu/drm/amd/include/asic_reg/dcn/dcn_6_0_0_sh_mask.h-2162-#define RSMU_STRAP_STATUS_HDA__RSMU_SECURITY_FUSE_STATUS_MASK 0x00000100L\n--\ndrivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.h=35=enum {\ndrivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.h-36-\tHDCP_TRAN_CONFIGURATION,\ndrivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.h:37:\tHDCP2X_TX_SET_PUBLIC_KEY_PARAMS,\ndrivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.h-38-\tHDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS,\n--\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/disp.h=490=typedef struct NV0073_CTRL_DP_CTRL_PARAMS {\n--\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/disp.h-560-#define NV0073_CTRL_DP_CMD_ENABLE_VRR_CMD_STAGE_RESET_MONITOR (0x00000006U)\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/disp.h:561:#define NV0073_CTRL_DP_CMD_ENABLE_VRR_CMD_STAGE_INIT_PUBLIC_INFO (0x00000007U)\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/disp.h:562:#define NV0073_CTRL_DP_CMD_ENABLE_VRR_CMD_STAGE_GET_PUBLIC_INFO (0x00000008U)\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/disp.h-563-#define NV0073_CTRL_DP_CMD_ENABLE_VRR_CMD_STAGE_STATUS_CHECK (0x00000009U)\n--\ndrivers/message/fusion/lsi/mpi_cnfg.h=1706=typedef struct _CONFIG_PAGE_FC_PORT_0\n--\ndrivers/message/fusion/lsi/mpi_cnfg.h-1748-#define MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT (0x00000400)\ndrivers/message/fusion/lsi/mpi_cnfg.h:1749:#define MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP (0x00000800)\ndrivers/message/fusion/lsi/mpi_cnfg.h-1750-\n--\ndrivers/message/fusion/mptfc.c=1011=mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum)\n--\ndrivers/message/fusion/mptfc.c-1090-\t\tport_type = FC_PORTTYPE_LPORT;\ndrivers/message/fusion/mptfc.c:1091:\telse if (pp0-\u003eFlags \u0026 MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP)\ndrivers/message/fusion/mptfc.c-1092-\t\tport_type = FC_PORTTYPE_NLPORT;\n--\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h=2219=enum spad_sections {\n--\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h-2221-\tSPAD_SECTION_NVM_CFG,\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h:2222:\tSPAD_SECTION_PUBLIC,\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h-2223-\tSPAD_SECTION_PRIVATE,\n--\ndrivers/net/wireguard/cookie.c=32=static void precompute_key(u8 key[NOISE_SYMMETRIC_KEY_LEN],\ndrivers/net/wireguard/cookie.c:33:\t\t\t const u8 pubkey[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/cookie.c-34-\t\t\t const u8 label[COOKIE_KEY_LABEL_LEN])\n--\ndrivers/net/wireguard/cookie.c-39-\tblake2s_update(\u0026blake, label, COOKIE_KEY_LABEL_LEN);\ndrivers/net/wireguard/cookie.c:40:\tblake2s_update(\u0026blake, pubkey, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/cookie.c-41-\tblake2s_final(\u0026blake, key);\n--\ndrivers/net/wireguard/generated/netlink.c=24=const struct nla_policy wireguard_wgpeer_nl_policy[WGPEER_A_PROTOCOL_VERSION + 1] = {\ndrivers/net/wireguard/generated/netlink.c:25:\t[WGPEER_A_PUBLIC_KEY] = NLA_POLICY_EXACT_LEN(WG_KEY_LEN),\ndrivers/net/wireguard/generated/netlink.c-26-\t[WGPEER_A_PRESHARED_KEY] = NLA_POLICY_EXACT_LEN(WG_KEY_LEN),\n--\ndrivers/net/wireguard/generated/netlink.c=44=static const struct nla_policy wireguard_set_device_nl_policy[WGDEVICE_A_PEERS + 1] = {\n--\ndrivers/net/wireguard/generated/netlink.c-47-\t[WGDEVICE_A_PRIVATE_KEY] = NLA_POLICY_EXACT_LEN(WG_KEY_LEN),\ndrivers/net/wireguard/generated/netlink.c:48:\t[WGDEVICE_A_PUBLIC_KEY] = NLA_POLICY_EXACT_LEN(WG_KEY_LEN),\ndrivers/net/wireguard/generated/netlink.c-49-\t[WGDEVICE_A_FLAGS] = NLA_POLICY_MASK(NLA_U32, 0x1),\n--\ndrivers/net/wireguard/messages.h=17=enum noise_lengths {\ndrivers/net/wireguard/messages.h:18:\tNOISE_PUBLIC_KEY_LEN = CURVE25519_KEY_SIZE,\ndrivers/net/wireguard/messages.h-19-\tNOISE_SYMMETRIC_KEY_LEN = CHACHA20POLY1305_KEY_SIZE,\n--\ndrivers/net/wireguard/messages.h=80=struct message_handshake_initiation {\n--\ndrivers/net/wireguard/messages.h-82-\t__le32 sender_index;\ndrivers/net/wireguard/messages.h:83:\tu8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/messages.h:84:\tu8 encrypted_static[noise_encrypted_len(NOISE_PUBLIC_KEY_LEN)];\ndrivers/net/wireguard/messages.h-85-\tu8 encrypted_timestamp[noise_encrypted_len(NOISE_TIMESTAMP_LEN)];\n--\ndrivers/net/wireguard/messages.h=89=struct message_handshake_response {\n--\ndrivers/net/wireguard/messages.h-92-\t__le32 receiver_index;\ndrivers/net/wireguard/messages.h:93:\tu8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/messages.h-94-\tu8 encrypted_nothing[noise_encrypted_len(0)];\n--\ndrivers/net/wireguard/netlink.c=77=get_peer(struct wg_peer *peer, struct sk_buff *skb, struct dump_ctx *ctx)\n--\ndrivers/net/wireguard/netlink.c-87-\tdown_read(\u0026peer-\u003ehandshake.lock);\ndrivers/net/wireguard/netlink.c:88:\tfail = nla_put(skb, WGPEER_A_PUBLIC_KEY, NOISE_PUBLIC_KEY_LEN,\ndrivers/net/wireguard/netlink.c-89-\t\t peer-\u003ehandshake.remote_static);\n--\ndrivers/net/wireguard/netlink.c=181=int wg_get_device_dumpit(struct sk_buff *skb, struct netlink_callback *cb)\n--\ndrivers/net/wireguard/netlink.c-212-\t\t\tif (nla_put(skb, WGDEVICE_A_PRIVATE_KEY,\ndrivers/net/wireguard/netlink.c:213:\t\t\t\t NOISE_PUBLIC_KEY_LEN,\ndrivers/net/wireguard/netlink.c-214-\t\t\t\t wg-\u003estatic_identity.static_private) ||\ndrivers/net/wireguard/netlink.c:215:\t\t\t nla_put(skb, WGDEVICE_A_PUBLIC_KEY,\ndrivers/net/wireguard/netlink.c:216:\t\t\t\t NOISE_PUBLIC_KEY_LEN,\ndrivers/net/wireguard/netlink.c-217-\t\t\t\t wg-\u003estatic_identity.static_public)) {\n--\ndrivers/net/wireguard/netlink.c=340=static int set_peer(struct wg_device *wg, struct nlattr **attrs)\n--\ndrivers/net/wireguard/netlink.c-347-\tret = -EINVAL;\ndrivers/net/wireguard/netlink.c:348:\tif (attrs[WGPEER_A_PUBLIC_KEY] \u0026\u0026\ndrivers/net/wireguard/netlink.c:349:\t nla_len(attrs[WGPEER_A_PUBLIC_KEY]) == NOISE_PUBLIC_KEY_LEN)\ndrivers/net/wireguard/netlink.c:350:\t\tpublic_key = nla_data(attrs[WGPEER_A_PUBLIC_KEY]);\ndrivers/net/wireguard/netlink.c-351-\telse\n--\ndrivers/net/wireguard/netlink.c-366-\tpeer = wg_pubkey_hashtable_lookup(wg-\u003epeer_hashtable,\ndrivers/net/wireguard/netlink.c:367:\t\t\t\t\t nla_data(attrs[WGPEER_A_PUBLIC_KEY]));\ndrivers/net/wireguard/netlink.c-368-\tret = 0;\n--\ndrivers/net/wireguard/netlink.c-377-\t\tif (wg-\u003estatic_identity.has_identity \u0026\u0026\ndrivers/net/wireguard/netlink.c:378:\t\t !memcmp(nla_data(attrs[WGPEER_A_PUBLIC_KEY]),\ndrivers/net/wireguard/netlink.c-379-\t\t\t wg-\u003estatic_identity.static_public,\ndrivers/net/wireguard/netlink.c:380:\t\t\t NOISE_PUBLIC_KEY_LEN)) {\ndrivers/net/wireguard/netlink.c-381-\t\t\t/* We silently ignore peers that have the same public\n--\ndrivers/net/wireguard/netlink.c=473=int wg_set_device_doit(struct sk_buff *skb, struct genl_info *info)\n--\ndrivers/net/wireguard/netlink.c-521-\t nla_len(info-\u003eattrs[WGDEVICE_A_PRIVATE_KEY]) ==\ndrivers/net/wireguard/netlink.c:522:\t\t NOISE_PUBLIC_KEY_LEN) {\ndrivers/net/wireguard/netlink.c-523-\t\tu8 *private_key = nla_data(info-\u003eattrs[WGDEVICE_A_PRIVATE_KEY]);\ndrivers/net/wireguard/netlink.c:524:\t\tu8 public_key[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/netlink.c-525-\t\tstruct wg_peer *peer, *temp;\n--\ndrivers/net/wireguard/netlink.c-528-\t\tif (!crypto_memneq(wg-\u003estatic_identity.static_private,\ndrivers/net/wireguard/netlink.c:529:\t\t\t\t private_key, NOISE_PUBLIC_KEY_LEN))\ndrivers/net/wireguard/netlink.c-530-\t\t\tgoto skip_set_private_key;\n--\ndrivers/net/wireguard/netlink.c=596=int __init wg_genetlink_init(void)\ndrivers/net/wireguard/netlink.c-597-{\ndrivers/net/wireguard/netlink.c:598:\tBUILD_BUG_ON(WG_KEY_LEN != NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/netlink.c-599-\tBUILD_BUG_ON(WG_KEY_LEN != NOISE_SYMMETRIC_KEY_LEN);\n--\ndrivers/net/wireguard/noise.c=47=void wg_noise_precompute_static_static(struct wg_peer *peer)\n--\ndrivers/net/wireguard/noise.c-54-\t\tmemset(peer-\u003ehandshake.precomputed_static_static, 0,\ndrivers/net/wireguard/noise.c:55:\t\t NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-56-\tup_write(\u0026peer-\u003ehandshake.lock);\n--\ndrivers/net/wireguard/noise.c=59=void wg_noise_handshake_init(struct noise_handshake *handshake,\ndrivers/net/wireguard/noise.c-60-\t\t\t struct noise_static_identity *static_identity,\ndrivers/net/wireguard/noise.c:61:\t\t\t const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/noise.c-62-\t\t\t const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],\n--\ndrivers/net/wireguard/noise.c-68-\thandshake-\u003eentry.peer = peer;\ndrivers/net/wireguard/noise.c:69:\tmemcpy(handshake-\u003eremote_static, peer_public_key, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-70-\tif (peer_preshared_key)\n--\ndrivers/net/wireguard/noise.c=78=static void handshake_zero(struct noise_handshake *handshake)\ndrivers/net/wireguard/noise.c-79-{\ndrivers/net/wireguard/noise.c:80:\tmemset(\u0026handshake-\u003eephemeral_private, 0, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c:81:\tmemset(\u0026handshake-\u003eremote_ephemeral, 0, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-82-\tmemset(\u0026handshake-\u003ehash, 0, NOISE_HASH_LEN);\n--\ndrivers/net/wireguard/noise.c=294=void wg_noise_set_static_identity_private_key(\ndrivers/net/wireguard/noise.c-295-\tstruct noise_static_identity *static_identity,\ndrivers/net/wireguard/noise.c:296:\tconst u8 private_key[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/noise.c-297-{\ndrivers/net/wireguard/noise.c-298-\tmemcpy(static_identity-\u003estatic_private, private_key,\ndrivers/net/wireguard/noise.c:299:\t NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-300-\tcurve25519_clamp_secret(static_identity-\u003estatic_private);\n--\ndrivers/net/wireguard/noise.c=404=static bool __must_check mix_dh(u8 chaining_key[NOISE_HASH_LEN],\ndrivers/net/wireguard/noise.c-405-\t\t\t\tu8 key[NOISE_SYMMETRIC_KEY_LEN],\ndrivers/net/wireguard/noise.c:406:\t\t\t\tconst u8 private[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/noise.c:407:\t\t\t\tconst u8 public[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/noise.c-408-{\ndrivers/net/wireguard/noise.c:409:\tu8 dh_calculation[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c-410-\n--\ndrivers/net/wireguard/noise.c-413-\tkdf(chaining_key, key, NULL, dh_calculation, NOISE_HASH_LEN,\ndrivers/net/wireguard/noise.c:414:\t NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN, chaining_key);\ndrivers/net/wireguard/noise.c:415:\tmemzero_explicit(dh_calculation, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-416-\treturn true;\n--\ndrivers/net/wireguard/noise.c=419=static bool __must_check mix_precomputed_dh(u8 chaining_key[NOISE_HASH_LEN],\ndrivers/net/wireguard/noise.c-420-\t\t\t\t\t u8 key[NOISE_SYMMETRIC_KEY_LEN],\ndrivers/net/wireguard/noise.c:421:\t\t\t\t\t const u8 precomputed[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/noise.c-422-{\ndrivers/net/wireguard/noise.c:423:\tstatic u8 zero_point[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c:424:\tif (unlikely(!crypto_memneq(precomputed, zero_point, NOISE_PUBLIC_KEY_LEN)))\ndrivers/net/wireguard/noise.c-425-\t\treturn false;\ndrivers/net/wireguard/noise.c-426-\tkdf(chaining_key, key, NULL, precomputed, NOISE_HASH_LEN,\ndrivers/net/wireguard/noise.c:427:\t NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,\ndrivers/net/wireguard/noise.c-428-\t chaining_key);\n--\ndrivers/net/wireguard/noise.c=454=static void handshake_init(u8 chaining_key[NOISE_HASH_LEN],\ndrivers/net/wireguard/noise.c-455-\t\t\t u8 hash[NOISE_HASH_LEN],\ndrivers/net/wireguard/noise.c:456:\t\t\t const u8 remote_static[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/noise.c-457-{\n--\ndrivers/net/wireguard/noise.c-459-\tmemcpy(chaining_key, handshake_init_chaining_key, NOISE_HASH_LEN);\ndrivers/net/wireguard/noise.c:460:\tmix_hash(hash, remote_static, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-461-}\n--\ndrivers/net/wireguard/noise.c=473=static bool message_decrypt(u8 *dst_plaintext, const u8 *src_ciphertext,\n--\ndrivers/net/wireguard/noise.c-484-\ndrivers/net/wireguard/noise.c:485:static void message_ephemeral(u8 ephemeral_dst[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/noise.c:486:\t\t\t const u8 ephemeral_src[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/noise.c-487-\t\t\t u8 chaining_key[NOISE_HASH_LEN],\n--\ndrivers/net/wireguard/noise.c-490-\tif (ephemeral_dst != ephemeral_src)\ndrivers/net/wireguard/noise.c:491:\t\tmemcpy(ephemeral_dst, ephemeral_src, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c:492:\tmix_hash(hash, ephemeral_src, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-493-\tkdf(chaining_key, NULL, NULL, ephemeral_src, NOISE_HASH_LEN, 0, 0,\ndrivers/net/wireguard/noise.c:494:\t NOISE_PUBLIC_KEY_LEN, chaining_key);\ndrivers/net/wireguard/noise.c-495-}\n--\ndrivers/net/wireguard/noise.c=517=wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,\n--\ndrivers/net/wireguard/noise.c-556-\t\t\thandshake-\u003estatic_identity-\u003estatic_public,\ndrivers/net/wireguard/noise.c:557:\t\t\tNOISE_PUBLIC_KEY_LEN, key, handshake-\u003ehash);\ndrivers/net/wireguard/noise.c-558-\n--\ndrivers/net/wireguard/noise.c=584=wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src,\n--\ndrivers/net/wireguard/noise.c-592-\tu8 hash[NOISE_HASH_LEN];\ndrivers/net/wireguard/noise.c:593:\tu8 s[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c:594:\tu8 e[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c-595-\tu8 t[NOISE_TIMESTAMP_LEN];\n--\ndrivers/net/wireguard/noise.c-643-\tdown_write(\u0026handshake-\u003elock);\ndrivers/net/wireguard/noise.c:644:\tmemcpy(handshake-\u003eremote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-645-\tif (memcmp(t, handshake-\u003elatest_timestamp, NOISE_TIMESTAMP_LEN) \u003e 0)\n--\ndrivers/net/wireguard/noise.c=728=wg_noise_handshake_consume_response(struct message_handshake_response *src,\n--\ndrivers/net/wireguard/noise.c-736-\tu8 chaining_key[NOISE_HASH_LEN];\ndrivers/net/wireguard/noise.c:737:\tu8 e[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c:738:\tu8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c:739:\tu8 static_private[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.c-740-\tu8 preshared_key[NOISE_SYMMETRIC_KEY_LEN];\n--\ndrivers/net/wireguard/noise.c-757-\tmemcpy(ephemeral_private, handshake-\u003eephemeral_private,\ndrivers/net/wireguard/noise.c:758:\t NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-759-\tmemcpy(preshared_key, handshake-\u003epreshared_key,\n--\ndrivers/net/wireguard/noise.c-793-\t}\ndrivers/net/wireguard/noise.c:794:\tmemcpy(handshake-\u003eremote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-795-\tmemcpy(handshake-\u003ehash, hash, NOISE_HASH_LEN);\n--\ndrivers/net/wireguard/noise.c-808-\tmemzero_explicit(chaining_key, NOISE_HASH_LEN);\ndrivers/net/wireguard/noise.c:809:\tmemzero_explicit(ephemeral_private, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c:810:\tmemzero_explicit(static_private, NOISE_PUBLIC_KEY_LEN);\ndrivers/net/wireguard/noise.c-811-\tmemzero_explicit(preshared_key, NOISE_SYMMETRIC_KEY_LEN);\n--\ndrivers/net/wireguard/noise.h=50=struct noise_static_identity {\ndrivers/net/wireguard/noise.h:51:\tu8 static_public[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h:52:\tu8 static_private[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h-53-\tstruct rw_semaphore lock;\n--\ndrivers/net/wireguard/noise.h=65=struct noise_handshake {\n--\ndrivers/net/wireguard/noise.h-72-\ndrivers/net/wireguard/noise.h:73:\tu8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h:74:\tu8 remote_static[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h:75:\tu8 remote_ephemeral[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h:76:\tu8 precomputed_static_static[NOISE_PUBLIC_KEY_LEN];\ndrivers/net/wireguard/noise.h-77-\n--\ndrivers/net/wireguard/noise.h=95=void wg_noise_handshake_init(struct noise_handshake *handshake,\ndrivers/net/wireguard/noise.h-96-\t\t\t struct noise_static_identity *static_identity,\ndrivers/net/wireguard/noise.h:97:\t\t\t const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/noise.h-98-\t\t\t const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],\n--\ndrivers/net/wireguard/noise.h=114=void wg_noise_set_static_identity_private_key(\ndrivers/net/wireguard/noise.h-115-\tstruct noise_static_identity *static_identity,\ndrivers/net/wireguard/noise.h:116:\tconst u8 private_key[NOISE_PUBLIC_KEY_LEN]);\ndrivers/net/wireguard/noise.h-117-void wg_noise_precompute_static_static(struct wg_peer *peer);\n--\ndrivers/net/wireguard/peer.c=21=struct wg_peer *wg_peer_create(struct wg_device *wg,\ndrivers/net/wireguard/peer.c:22:\t\t\t const u8 public_key[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/peer.c-23-\t\t\t const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN])\n--\ndrivers/net/wireguard/peer.h=69=struct wg_peer *wg_peer_create(struct wg_device *wg,\ndrivers/net/wireguard/peer.h:70:\t\t\t const u8 public_key[NOISE_PUBLIC_KEY_LEN],\ndrivers/net/wireguard/peer.h-71-\t\t\t const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN]);\n--\ndrivers/net/wireguard/peerlookup.c=10=static struct hlist_head *pubkey_bucket(struct pubkey_hashtable *table,\ndrivers/net/wireguard/peerlookup.c:11:\t\t\t\t\tconst u8 pubkey[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/peerlookup.c-12-{\n--\ndrivers/net/wireguard/peerlookup.c-16-\t */\ndrivers/net/wireguard/peerlookup.c:17:\tconst u64 hash = siphash(pubkey, NOISE_PUBLIC_KEY_LEN, \u0026table-\u003ekey);\ndrivers/net/wireguard/peerlookup.c-18-\n--\ndrivers/net/wireguard/peerlookup.c=54=wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,\ndrivers/net/wireguard/peerlookup.c:55:\t\t\t const u8 pubkey[NOISE_PUBLIC_KEY_LEN])\ndrivers/net/wireguard/peerlookup.c-56-{\n--\ndrivers/net/wireguard/peerlookup.c-62-\t\tif (!memcmp(pubkey, iter_peer-\u003ehandshake.remote_static,\ndrivers/net/wireguard/peerlookup.c:63:\t\t\t NOISE_PUBLIC_KEY_LEN)) {\ndrivers/net/wireguard/peerlookup.c-64-\t\t\tpeer = iter_peer;\n--\ndrivers/net/wireguard/peerlookup.h=30=wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,\n\n"
} |
| 27/2 | 2026/09/14 07:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 39011 output: 21 thoughts: 41 Thoughts: Okay, here's my take on those thoughts, framed as my own internal monologue, with a **bolded header** as requested: **Debugging a Non-Existent Identifier** Alright, *N_MEMORY_PUBLIC*... complete blank. No trace of it in the codebase, as far as I can tell. Hmm, but hold on a second, don't jump to conclusions just yet. We're dealing with C, C++, or something similar here, right? Could this thing be hiding behind a preprocessor macro? It wouldn't be the first time I've been tripped up by a cleverly disguised `#define`. Okay, time to fire up grep. Let's look for any instances of a `define` statement that might be defining *N_MEMORY_PUBLIC*. Gotta be thorough, gotta be sure. Time to see if the linker is lying to me, or if I am just a fool. Let's get to work! |
| 28/2 | 2026/09/14 07:59 | tool | grepper |
0mError:no matches Args: {
"Expression": "define.*N_MEMORY_PUBLIC"
}Results: {
"error": "no matches"
} |
| 29/2 | 2026/09/14 07:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 39286 output: 23 thoughts: 428 Thoughts: **My Thought Process on Examining this Code**
Okay, hold on a second! Before I dive too deep, I need to make sure I'm understanding this correctly. Did the author misspell something? Is this even supposed to compile? I mean, given the prompt's focus on crash detection, regressions, and such, the first step *has* to be figuring out if this code is even *reachable*. The goal of patch fuzzing hinges on that. The prompt explicitly states that unreachable code *must not* be fuzzed.
Right, so can this actually compile? Unfortunately, I can't directly execute make or gcc here, as there is no bash execution tool. Let's see what the intent is behind `N_MEMORY_PUBLIC`. Maybe if I understand its context, that will help with the next steps. Without git log, my best bet is probably git grep.
Can I grep inside `.git`? No, grep is on the kernel sources, not the dot git directory. Okay, let's go back and check `include/linux/nodemask.h` again. Let's see what `node_states` is all about.
```c
enum node_states {
N_POSSIBLE, /* The node could become online at some point */
N_ONLINE, /* The node is online */
N_NORMAL_MEMORY, /* The node has regular memory */
#ifdef CONFIG_HIGHMEM
N_HIGH_MEMORY, /* The node has regular or high memory */
#else
N_HIGH_MEMORY = N_NORMAL_MEMORY,
#endif
N_MEMORY, /* The node has memory(regular, high, movable) */
N_CPU, /* The node has one or more cpus */
N_GENERIC_INITIATOR, /* The node has one or more Generic Initiators */
NR_NODE_STATES
};
```
Wait a second, there is no mention of `MEMORY_PUBLIC` anywhere here! This is strange... Let's grep for `PUBLIC` in the `mm/` directory. Maybe it's defined somewhere else, and that will shed some light on this.
|
| 30/2 | 2026/09/14 07:59 | tool | grepper |
0mArgs:{
"Expression": "PUBLIC",
"PathPrefix": "mm/"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n"
} |
| 31/2 | 2026/09/14 07:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 40346 output: 25 thoughts: 73 Thoughts: **My Line of Reasoning** Okay, hold on a minute. Let's think this through. Across the *entire* `mm/` directory, the search for "PUBLIC" yielded just *one* result – line 1931 in `mm/memory_hotplug.c`! That's... surprisingly narrow. Hmm, what about the `include/` directory? Did we cover that thoroughly? Right, we did check `_PUBLIC` in `include/`, but what about simply searching for `PUBLIC` in `include/linux/`? It's the most likely place for declarations that could affect overall memory management, so it's the next logical step in this investigation. Let's see what we find there. |
| 32/2 | 2026/09/14 07:59 | tool | grepper |
0mArgs:{
"Expression": "PUBLIC",
"PathPrefix": "include/linux/"
}Results: {
"Output": "include/linux/bnge/hsi.h=19=struct hwrm_resp_hdr {\n--\ninclude/linux/bnge/hsi.h-39-#define TLV_TYPE_MODIFY_ROCE_CC_GEN2_EXT 0xbUL\ninclude/linux/bnge/hsi.h:40:#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY 0x8001UL\ninclude/linux/bnge/hsi.h-41-#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL\n--\ninclude/linux/bnge/hsi.h-44-#define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS 0x8006UL\ninclude/linux/bnge/hsi.h:45:#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL\ninclude/linux/bnge/hsi.h-46-#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL\ninclude/linux/bnge/hsi.h:47:#define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY 0x8009UL\ninclude/linux/bnge/hsi.h-48-#define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS 0x800aUL\n--\ninclude/linux/bnxt/hsi.h=27=struct hwrm_resp_hdr {\n--\ninclude/linux/bnxt/hsi.h-48-#define TLV_TYPE_MODIFY_ROCE_CC_GEN2_EXT 0xbUL\ninclude/linux/bnxt/hsi.h:49:#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY 0x8001UL\ninclude/linux/bnxt/hsi.h-50-#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL\n--\ninclude/linux/bnxt/hsi.h-53-#define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS 0x8006UL\ninclude/linux/bnxt/hsi.h:54:#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL\ninclude/linux/bnxt/hsi.h-55-#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL\ninclude/linux/bnxt/hsi.h:56:#define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY 0x8009UL\ninclude/linux/bnxt/hsi.h-57-#define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS 0x800aUL\n--\ninclude/linux/ceph/rados.h=384=enum {\n--\ninclude/linux/ceph/rados.h-396-\tCEPH_OSD_FLAG_EXEC = 0x0800, /* op may exec */\ninclude/linux/ceph/rados.h:397:\tCEPH_OSD_FLAG_EXEC_PUBLIC = 0x1000, /* DEPRECATED op may exec (public) */\ninclude/linux/ceph/rados.h-398-\tCEPH_OSD_FLAG_LOCALIZE_READS = 0x2000, /* read from nearby replica, if any */\n--\ninclude/linux/ieee80211.h=1793=enum ieee80211_eid_ext {\n--\ninclude/linux/ieee80211.h-1801-\tWLAN_EID_EXT_FILS_WRAPPED_DATA = 8,\ninclude/linux/ieee80211.h:1802:\tWLAN_EID_EXT_FILS_PUBLIC_KEY = 12,\ninclude/linux/ieee80211.h-1803-\tWLAN_EID_EXT_FILS_NONCE = 13,\n--\ninclude/linux/ieee80211.h=1843=enum ieee80211_category {\n--\ninclude/linux/ieee80211.h-1847-\tWLAN_CATEGORY_BACK = 3,\ninclude/linux/ieee80211.h:1848:\tWLAN_CATEGORY_PUBLIC = 4,\ninclude/linux/ieee80211.h-1849-\tWLAN_CATEGORY_RADIO_MEASUREMENT = 5,\n--\ninclude/linux/ieee80211.h=1958=enum ieee80211_pub_actioncode {\n--\ninclude/linux/ieee80211.h-1982-\tWLAN_PUB_ACTION_HCCA_TXOP_RESPONSE = 23,\ninclude/linux/ieee80211.h:1983:\tWLAN_PUB_ACTION_PUBLIC_KEY = 24,\ninclude/linux/ieee80211.h-1984-\tWLAN_PUB_ACTION_CHANNEL_AVAIL_QUERY = 25,\n--\ninclude/linux/ieee80211.h=2401=static inline bool ieee80211_is_bufferable_mmpdu(struct sk_buff *skb)\n--\ninclude/linux/ieee80211.h-2423-\ninclude/linux/ieee80211.h:2424:\tif (mgmt-\u003eu.action.category != WLAN_CATEGORY_PUBLIC \u0026\u0026\ninclude/linux/ieee80211.h-2425-\t mgmt-\u003eu.action.category != WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION)\n--\ninclude/linux/ieee80211.h=2440=static inline bool _ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)\n--\ninclude/linux/ieee80211.h-2458-\t\tcategory = ((u8 *) hdr) + 24;\ninclude/linux/ieee80211.h:2459:\t\treturn *category != WLAN_CATEGORY_PUBLIC \u0026\u0026\ninclude/linux/ieee80211.h-2460-\t\t\t*category != WLAN_CATEGORY_HT \u0026\u0026\n--\ninclude/linux/ieee80211.h=2490=static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,\n--\ninclude/linux/ieee80211.h-2498-\t\treturn false;\ninclude/linux/ieee80211.h:2499:\treturn mgmt-\u003eu.action.category == WLAN_CATEGORY_PUBLIC;\ninclude/linux/ieee80211.h-2500-}\n--\ninclude/linux/tpm_command.h=215=enum tpm2_command_codes {\n--\ninclude/linux/tpm_command.h-231-\tTPM2_CC_FLUSH_CONTEXT\t\t= 0x0165,\ninclude/linux/tpm_command.h:232:\tTPM2_CC_READ_PUBLIC\t\t= 0x0173,\ninclude/linux/tpm_command.h-233-\tTPM2_CC_START_AUTH_SESS\t\t= 0x0176,\n--\ninclude/linux/tpm_command.h=425=struct tpm2_context {\n--\ninclude/linux/tpm_command.h-445- * A TPM name digest i.e., TPMT_HA, is a concatenation of TPM_ALG_ID of the\ninclude/linux/tpm_command.h:446: * name algorithm and hash of TPMT_PUBLIC.\ninclude/linux/tpm_command.h-447- */\n--\ninclude/linux/turris-omnia-mcu-interface.h=17=enum omnia_commands_e {\n--\ninclude/linux/turris-omnia-mcu-interface.h-72-\t/* available if CRYPTO bit set in features */\ninclude/linux/turris-omnia-mcu-interface.h:73:\tOMNIA_CMD_CRYPTO_GET_PUBLIC_KEY\t\t= 0x29,\ninclude/linux/turris-omnia-mcu-interface.h-74-\tOMNIA_CMD_CRYPTO_SIGN_MESSAGE\t\t= 0x2A,\n"
} |
| 33/2 | 2026/09/14 07:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 42744 output: 26 thoughts: 280 Thoughts: **My Analysis of a Potential Compilation Issue** Okay, so the code I'm looking at references `N_MEMORY_PUBLIC`, but I'm immediately noticing it's *nowhere* in the kernel source. That's a huge red flag. Why would the author use this if it's undefined? My first thought is an external patch series – maybe a preceding patch introduced this enum value to `node_states`, but that patch isn't included here. Or, perhaps the author submitted this code for review or testing (like with syzbot) prematurely, without the definition present. But wait a minute, the instructions specifically say to *not* make any assumptions. I need to rely on the actual source and my access to it. Okay, that's what I'll do. So, if `N_MEMORY_PUBLIC` is truly undefined, can `mm/memory_hotplug.c` even *compile*? And the critical thing is that `CONFIG_MEMORY_HOTPLUG` is enabled (and thus compiles `mm/memory_hotplug.c`) compilation will fail with a classic undeclared identifier error. Therefore, the next question is: Is `mm/memory_hotplug.o` compiled if `CONFIG_MEMORY_HOTPLUG` is enabled? I'll check the `mm/Makefile` to understand the build process and when that particular file gets compiled. |
| 34/2 | 2026/09/14 07:59 | tool | grepper |
0mArgs:{
"Expression": "memory_hotplug",
"PathPrefix": "mm/"
}Results: {
"Output": "mm/Makefile=63=page-alloc-$(CONFIG_SHUFFLE_PAGE_ALLOCATOR) += shuffle.o\nmm/Makefile-64-\nmm/Makefile:65:# Give 'memory_hotplug' its own module-parameter namespace\nmm/Makefile:66:memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o\nmm/Makefile-67-\n--\nmm/hmm.c-29-#include \u003clinux/mmu_notifier.h\u003e\nmm/hmm.c:30:#include \u003clinux/memory_hotplug.h\u003e\nmm/hmm.c-31-\n--\nmm/hugetlb_vmemmap.c=99=static int vmemmap_pmd_entry(pmd_t *pmd, unsigned long addr,\n--\nmm/hugetlb_vmemmap.c-114-\t * pages being at the start of the hotplugged memory\nmm/hugetlb_vmemmap.c:115:\t * region in memory_hotplug.memmap_on_memory case. Checking\nmm/hugetlb_vmemmap.c-116-\t * the vmemmap page associated with the first vmemmap page\n--\nmm/kmemleak.c-104-#include \u003clinux/kmemleak.h\u003e\nmm/kmemleak.c:105:#include \u003clinux/memory_hotplug.h\u003e\nmm/kmemleak.c-106-\n--\nmm/memory-failure.c-55-#include \u003clinux/hugetlb.h\u003e\nmm/memory-failure.c:56:#include \u003clinux/memory_hotplug.h\u003e\nmm/memory-failure.c-57-#include \u003clinux/mm_inline.h\u003e\n--\nmm/memory_hotplug.c-2-/*\nmm/memory_hotplug.c:3: * linux/mm/memory_hotplug.c\nmm/memory_hotplug.c-4- *\n--\nmm/memory_hotplug.c-21-#include \u003clinux/memremap.h\u003e\nmm/memory_hotplug.c:22:#include \u003clinux/memory_hotplug.h\u003e\nmm/memory_hotplug.c-23-#include \u003clinux/vmalloc.h\u003e\n--\nmm/memory_hotplug.c=61=static inline unsigned long memory_block_memmap_on_memory_pages(void)\n--\nmm/memory_hotplug.c-77-/*\nmm/memory_hotplug.c:78: * memory_hotplug.memmap_on_memory parameter\nmm/memory_hotplug.c-79- */\n--\nmm/memory_hotplug.c=155=static int get_online_policy(char *buffer, const struct kernel_param *kp)\n--\nmm/memory_hotplug.c-160-/*\nmm/memory_hotplug.c:161: * memory_hotplug.online_policy: configure online behavior when onlining without\nmm/memory_hotplug.c-162- * specifying a zone (MMOP_ONLINE)\n--\nmm/memory_hotplug.c=174=MODULE_PARM_DESC(online_policy,\n--\nmm/memory_hotplug.c-178-/*\nmm/memory_hotplug.c:179: * memory_hotplug.auto_movable_ratio: specify maximum MOVABLE:KERNEL ratio\nmm/memory_hotplug.c-180- *\n--\nmm/memory_hotplug.c=187=MODULE_PARM_DESC(auto_movable_ratio,\n--\nmm/memory_hotplug.c-191-/*\nmm/memory_hotplug.c:192: * memory_hotplug.auto_movable_numa_aware: consider numa node stats\nmm/memory_hotplug.c-193- */\n--\nmm/memremap.c-5-#include \u003clinux/kasan.h\u003e\nmm/memremap.c:6:#include \u003clinux/memory_hotplug.h\u003e\nmm/memremap.c-7-#include \u003clinux/memremap.h\u003e\n--\nmm/page_alloc.c-34-#include \u003clinux/folio_batch.h\u003e\nmm/page_alloc.c:35:#include \u003clinux/memory_hotplug.h\u003e\nmm/page_alloc.c-36-#include \u003clinux/nodemask.h\u003e\n--\nmm/page_idle.c-6-#include \u003clinux/kobject.h\u003e\nmm/page_idle.c:7:#include \u003clinux/memory_hotplug.h\u003e\nmm/page_idle.c-8-#include \u003clinux/mm.h\u003e\n"
} |
| 35/2 | 2026/09/14 07:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 44487 output: 30 thoughts: 53 Thoughts: Here's my summary, as though I'm thinking through this process: **Diving into the Memory Hotplug Makefile** Okay, let's get down to brass tacks. I'm focusing on how the memory hotplug module is built within the kernel. The first thing that jumps out is the line in `mm/Makefile`: `memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o`. That's the core of it, right? It's the conditional inclusion of `memory_hotplug.o` based on the `CONFIG_MEMORY_HOTPLUG` kernel configuration option. Just to be absolutely sure, I'll quickly check the surrounding context within `mm/Makefile` using a quick file read around line 65 to make sure that the logic makes sense in the greater scheme. Context is king, as always, and I need to see how this fits into the overall memory management build process. I'm looking for any other dependencies, potential build flags, or anything that might impact how `memory_hotplug.o` is built and linked. I want to rule out any potential surprises. |
| 36/2 | 2026/09/14 08:00 | tool | read-file |
0mArgs:{
"File": "mm/Makefile",
"FirstLine": 60,
"LineCount": 20
}Results: {
"Contents": " 60:\t\n 61:\t# Give 'page_alloc' its own module-parameter namespace\n 62:\tpage-alloc-y := page_alloc.o\n 63:\tpage-alloc-$(CONFIG_SHUFFLE_PAGE_ALLOCATOR) += shuffle.o\n 64:\t\n 65:\t# Give 'memory_hotplug' its own module-parameter namespace\n 66:\tmemory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o\n 67:\t\n 68:\tobj-y += page-alloc.o\n 69:\tobj-y += page_frag_cache.o\n 70:\tobj-y += init-mm.o\n 71:\tobj-y += memblock.o\n 72:\tobj-y += $(memory-hotplug-y)\n 73:\tobj-y += slub.o\n 74:\t\n 75:\tifdef CONFIG_MMU\n 76:\t\tobj-$(CONFIG_ADVISE_SYSCALLS)\t+= madvise.o\n 77:\tendif\n 78:\t\n 79:\tobj-$(CONFIG_SWAP)\t+= page_io.o swap_state.o swapfile.o\n"
} |
| 37/2 | 2026/09/14 08:00 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 45134 output: 34 thoughts: 239 Thoughts: **Investigating a Potential Kernel Compilation Issue**
Okay, so I'm looking at this kernel code, specifically around memory hotplug. If `CONFIG_MEMORY_HOTPLUG` is set to 'y', which means memory hotplug is enabled, `memory_hotplug.o` gets built into the kernel. Makes sense. Then I see this in `memory_hotplug.c` with the `do_migrate_range` function:
```c
static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
{
...
if (!list_empty(&source)) {
nodemask_t nmask = node_states[N_MEMORY_PUBLIC];
```
Hang on a second. If `CONFIG_MEMORY_HOTPLUG` is active and this file is compiled, where the hell is `N_MEMORY_PUBLIC` defined? It's not immediately obvious. This could cause a compilation error, and that would be a serious issue. I don't see it defined anywhere obvious in the code. My first instinct, given it's a kernel include, is that it's likely defined by a macro in some header file included in `memory_hotplug.c`.
Right, let's see. Need to carefully inspect every single header file that `memory_hotplug.c` pulls in. Need to check those includes. I need to read the top of `mm/memory_hotplug.c` and figure out where this value is actually defined before I make any assumptions. Hopefully it's in a standard include, but I need to make sure. Let's see...
|
| 38/2 | 2026/09/14 08:00 | tool | read-file |
0mArgs:{
"File": "mm/memory_hotplug.c",
"FirstLine": 1,
"LineCount": 45
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0-only\n 2:\t/*\n 3:\t * linux/mm/memory_hotplug.c\n 4:\t *\n 5:\t * Copyright (C)\n 6:\t */\n 7:\t\n 8:\t#include \u003clinux/stddef.h\u003e\n 9:\t#include \u003clinux/mm.h\u003e\n 10:\t#include \u003clinux/sched/signal.h\u003e\n 11:\t#include \u003clinux/swap.h\u003e\n 12:\t#include \u003clinux/interrupt.h\u003e\n 13:\t#include \u003clinux/pagemap.h\u003e\n 14:\t#include \u003clinux/compiler.h\u003e\n 15:\t#include \u003clinux/export.h\u003e\n 16:\t#include \u003clinux/writeback.h\u003e\n 17:\t#include \u003clinux/slab.h\u003e\n 18:\t#include \u003clinux/sysctl.h\u003e\n 19:\t#include \u003clinux/cpu.h\u003e\n 20:\t#include \u003clinux/memory.h\u003e\n 21:\t#include \u003clinux/memremap.h\u003e\n 22:\t#include \u003clinux/memory_hotplug.h\u003e\n 23:\t#include \u003clinux/vmalloc.h\u003e\n 24:\t#include \u003clinux/ioport.h\u003e\n 25:\t#include \u003clinux/delay.h\u003e\n 26:\t#include \u003clinux/migrate.h\u003e\n 27:\t#include \u003clinux/page-isolation.h\u003e\n 28:\t#include \u003clinux/pfn.h\u003e\n 29:\t#include \u003clinux/suspend.h\u003e\n 30:\t#include \u003clinux/mm_inline.h\u003e\n 31:\t#include \u003clinux/firmware-map.h\u003e\n 32:\t#include \u003clinux/stop_machine.h\u003e\n 33:\t#include \u003clinux/hugetlb.h\u003e\n 34:\t#include \u003clinux/memblock.h\u003e\n 35:\t#include \u003clinux/compaction.h\u003e\n 36:\t#include \u003clinux/rmap.h\u003e\n 37:\t#include \u003clinux/module.h\u003e\n 38:\t#include \u003clinux/node.h\u003e\n 39:\t\n 40:\t#include \u003casm/tlbflush.h\u003e\n 41:\t\n 42:\t#include \"internal.h\"\n 43:\t#include \"mm_init.h\"\n 44:\t#include \"page_alloc.h\"\n 45:\t#include \"shuffle.h\"\n"
} |
| 39/2 | 2026/09/14 08:00 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 46419 output: 17 thoughts: 966 Thoughts: **Analyzing the Patch's Reachability** Okay, so we've confirmed `N_MEMORY_PUBLIC` only appears once in the entire codebase, specifically in `mm/memory_hotplug.c:1931`. That's a red flag. Why is it so isolated? The immediate question is, is this part of a series introducing `N_MEMORY_PUBLIC`? Or, is this a lone patch that potentially breaks compilation? And if it's broken, what does triage say? Let's quickly refresh the triage guidelines. Reachability is key. The fuzzing efforts are only useful if the modified code is *actually* executed in a standard virtualized environment. Things like vendor-specific hardware or driver tear-down callbacks during physical un-plugs, which are unreachable in standard setups, are not worth fuzzing. My primary concern is: Is memory hotplug offlining code something that *is* reachable in syzkaller or a standard virtualized environment? Does the code even compile? We're ignoring the "NFCI" or "refactoring" claims. So, could this `N_MEMORY_PUBLIC` be generated by some macro magic? `CONCAT`, or something similar? Let's see if there are any macros that generate `N_` prefixes. That's the next step; we need to see how `N_MEMORY_PUBLIC` is defined or constructed. This will determine if it warrants fuzzing efforts. |
| 40/2 | 2026/09/14 08:00 | tool | grepper |
0mArgs:{
"Expression": "N_##"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1295 lines.\nUse more precise expression if possible.\n\narch/arm/mach-pxa/mfp-pxa2xx.h-46-\t((MFP_CFG_DEFAULT \u0026 ~(MFP_AF_MASK | MFP_DIR_MASK)) |\\\narch/arm/mach-pxa/mfp-pxa2xx.h:47:\t (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_DIR_IN))\narch/arm/mach-pxa/mfp-pxa2xx.h-48-\n--\narch/arm/mach-pxa/mfp-pxa2xx.h-53-\t((MFP_CFG_DEFAULT \u0026 ~(MFP_AF_MASK | MFP_DIR_MASK | MFP_LPM_STATE_MASK)) |\\\narch/arm/mach-pxa/mfp-pxa2xx.h:54:\t (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_DIR_OUT | MFP_LPM_##state))\narch/arm/mach-pxa/mfp-pxa2xx.h-55-\n--\narch/m68k/include/asm/bootstd.h=50=type name(void) \\\narch/m68k/include/asm/bootstd.h-51-{ \\\narch/m68k/include/asm/bootstd.h:52: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-53- __asm__ __volatile__ (\"trap #2\" \\\n--\narch/m68k/include/asm/bootstd.h=61=type name(atype a) \\\narch/m68k/include/asm/bootstd.h-62-{ \\\narch/m68k/include/asm/bootstd.h:63: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-64- register long __a __asm__ (\"%d1\") = (long)a; \\\n--\narch/m68k/include/asm/bootstd.h=73=type name(atype a, btype b) \\\narch/m68k/include/asm/bootstd.h-74-{ \\\narch/m68k/include/asm/bootstd.h:75: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-76- register long __a __asm__ (\"%d1\") = (long)a; \\\n--\narch/m68k/include/asm/bootstd.h=86=type name(atype a, btype b, ctype c) \\\narch/m68k/include/asm/bootstd.h-87-{ \\\narch/m68k/include/asm/bootstd.h:88: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-89- register long __a __asm__ (\"%d1\") = (long)a; \\\n--\narch/m68k/include/asm/bootstd.h=101=type name(atype a, btype b, ctype c, dtype d) \\\narch/m68k/include/asm/bootstd.h-102-{ \\\narch/m68k/include/asm/bootstd.h:103: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-104- register long __a __asm__ (\"%d1\") = (long)a; \\\n--\narch/m68k/include/asm/bootstd.h=117=type name(atype a, btype b, ctype c, dtype d, etype e) \\\narch/m68k/include/asm/bootstd.h-118-{ \\\narch/m68k/include/asm/bootstd.h:119: register long __res __asm__ (\"%d0\") = __BN_##name; \\\narch/m68k/include/asm/bootstd.h-120- register long __a __asm__ (\"%d1\") = (long)a; \\\n--\narch/powerpc/include/asm/lv1call.h-208-#define LV1_CALL(name, in, out, num) \\\narch/powerpc/include/asm/lv1call.h:209: extern s64 _lv1_##name(LV1_##in##_IN_##out##_OUT_ARG_DECL); \\\narch/powerpc/include/asm/lv1call.h:210: static inline int lv1_##name(LV1_##in##_IN_##out##_OUT_ARG_DECL) \\\narch/powerpc/include/asm/lv1call.h:211: {return _lv1_##name(LV1_##in##_IN_##out##_OUT_ARGS);}\narch/powerpc/include/asm/lv1call.h-212-#endif\n--\narch/powerpc/kernel/entry_32.S=362=_ASM_NOKPROBE_SYMBOL(interrupt_return)\n--\narch/powerpc/kernel/entry_32.S-411-\tlwz\tr10,_##exc_lvl_srr1(r1);\t\t\t\t\\\narch/powerpc/kernel/entry_32.S:412:\tmtspr\tSPRN_##exc_lvl_srr0,r9;\t\t\t\t\t\\\narch/powerpc/kernel/entry_32.S:413:\tmtspr\tSPRN_##exc_lvl_srr1,r10;\narch/powerpc/kernel/entry_32.S-414-\n--\narch/powerpc/kernel/exceptions-64e.S=245=SYM_CODE_END(ret_from_mc_except)\n--\narch/powerpc/kernel/exceptions-64e.S-253-\tmfcr\tr10;\t\t\t/* save CR */\t\t\t \\\narch/powerpc/kernel/exceptions-64e.S:254:\tmfspr\tr11,SPRN_##type##_SRR1;/* what are we coming from */\t \\\narch/powerpc/kernel/exceptions-64e.S:255:\tDO_KVM\tintnum,SPRN_##type##_SRR1; /* KVM hook */\t\t \\\narch/powerpc/kernel/exceptions-64e.S-256-\tstw\tr10,PACA_EX##type+EX_CR(r13); /* save old CR in the PACA */ \\\n--\narch/powerpc/kernel/exceptions-64e.S-265-\tbge-\tcr1,exc_##n##_bad_stack;/* bad stack (TODO: out of line) */ \\\narch/powerpc/kernel/exceptions-64e.S:266:\tmfspr\tr10,SPRN_##type##_SRR0;\t/* read SRR0 before touching stack */\narch/powerpc/kernel/exceptions-64e.S-267-\n--\narch/powerpc/kernel/head_booke.h=132=ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)\n--\narch/powerpc/kernel/head_booke.h-237-#define SAVE_xSRR(xSRR)\t\t\t\\\narch/powerpc/kernel/head_booke.h:238:\tmfspr\tr0,SPRN_##xSRR##0;\t\\\narch/powerpc/kernel/head_booke.h-239-\tstw\tr0,_##xSRR##0(r1);\t\\\narch/powerpc/kernel/head_booke.h:240:\tmfspr\tr0,SPRN_##xSRR##1;\t\\\narch/powerpc/kernel/head_booke.h-241-\tstw\tr0,_##xSRR##1(r1)\n--\narch/powerpc/kernel/swsusp_asm64.S-56-#define SAVE_SPR(register)\t\t\\\narch/powerpc/kernel/swsusp_asm64.S:57:\tmfspr\tr0, SPRN_##register\t;\\\narch/powerpc/kernel/swsusp_asm64.S-58-\tstd\tr0, SL_##register(r11)\n--\narch/powerpc/kernel/swsusp_asm64.S-60-\tld\tr0, SL_##register(r11)\t;\\\narch/powerpc/kernel/swsusp_asm64.S:61:\tmtspr\tSPRN_##register, r0\narch/powerpc/kernel/swsusp_asm64.S-62-#define SAVE_SPECIAL(special)\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=228=globl(ftr_fixup_test_ ##TYPE##_macros)\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-230-\t/* Basic test, this section should all be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:231:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-232-\tor\t2,2,2;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=235=END_##TYPE##_SECTION(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-238-\t/* Basic test, this section should NOT be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:239:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-240-\tor\t2,2,2;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=243=END_##TYPE##_SECTION(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-246-\t/* Nesting test, inner section should be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:247:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-248-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-249-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:250:BEGIN_##TYPE##_SECTION_NESTED(80)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-251-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=256=END_##TYPE##_SECTION(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-259-\t/* Nesting test, whole section should be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:260:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-261-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-262-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:263:BEGIN_##TYPE##_SECTION_NESTED(80)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-264-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=269=END_##TYPE##_SECTION(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-272-\t/* Nesting test, none should be nop'ed */\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:273:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-274-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-275-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:276:BEGIN_##TYPE##_SECTION_NESTED(80)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-277-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=282=END_##TYPE##_SECTION(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-285-\t/* Basic alt section test, default case should be taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:286:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-287-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=293=ALT_##TYPE##_SECTION_END(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-296-\t/* Basic alt section test, else case should be taken */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:297:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-298-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=305=ALT_##TYPE##_SECTION_END(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-308-\t/* Alt with smaller else case, should be padded with nops */\t\\\narch/powerpc/lib/feature-fixups-test.S:309:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-310-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=315=ALT_##TYPE##_SECTION_END(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-319-\t/* Default case should be taken, with nop'ed inner section */\t\\\narch/powerpc/lib/feature-fixups-test.S:320:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-321-\tor\t3,3,3;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:322:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-323-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=330=ALT_##TYPE##_SECTION_END(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-333-\t/* Alt section with nested section in else, default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:334:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-335-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-339-\tor\t5,5,5;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:340:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-341-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=344=ALT_##TYPE##_SECTION_END(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-347-\t/* Alt section with nested section in else, else taken \u0026 nop */\t\\\narch/powerpc/lib/feature-fixups-test.S:348:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-349-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-353-\tor\t5,5,5;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:354:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-355-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=358=ALT_##TYPE##_SECTION_END(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-361-\t/* Feature section with nested alt section, default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:362:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-363-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:364:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-365-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=370=END_##TYPE##_SECTION(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-373-\t/* Feature section with nested alt section, else taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:374:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-375-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:376:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-377-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=382=END_##TYPE##_SECTION(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-385-\t/* Feature section with nested alt section, all nop'ed */\t\\\narch/powerpc/lib/feature-fixups-test.S:386:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-387-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:388:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-389-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=394=END_##TYPE##_SECTION(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-397-\t/* Nested alt sections, default with inner default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:398:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-399-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:400:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-401-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=404=ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-407-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:408:BEGIN_##TYPE##_SECTION_NESTED(94)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-409-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=414=ALT_##TYPE##_SECTION_END(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-417-\t/* Nested alt sections, default with inner else taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:418:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-419-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:420:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-421-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=424=ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-427-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:428:BEGIN_##TYPE##_SECTION_NESTED(94)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-429-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=434=ALT_##TYPE##_SECTION_END(0, 0)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-437-\t/* Nested alt sections, else with inner default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:438:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-439-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:440:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-441-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=444=ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-447-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:448:BEGIN_##TYPE##_SECTION_NESTED(94)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-449-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=454=ALT_##TYPE##_SECTION_END(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-457-\t/* Nested alt sections, else with inner else taken */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:458:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-459-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:460:BEGIN_##TYPE##_SECTION_NESTED(95)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-461-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=464=ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-467-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:468:BEGIN_##TYPE##_SECTION_NESTED(94)\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-469-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=474=ALT_##TYPE##_SECTION_END(0, 1)\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-477-\t/* Nested alt sections, else can have large else case */\t\\\narch/powerpc/lib/feature-fixups-test.S:478:BEGIN_##TYPE##_SECTION\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-479-\tor\t2,2,2;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-483-##TYPE##_SECTION_ELSE \t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:484:BEGIN_##TYPE##_SECTION_NESTED(94) \t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-485-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S=500=globl(ftr_fixup_test_ ##TYPE##_macros_expected)\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-502-\t/* Basic test, this section should all be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:503:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-504-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-510-\t/* Basic test, this section should NOT be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:511:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-512-\tor\t2,2,2;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-518-\t/* Nesting test, inner section should be nop'ed */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:519:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-520-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-521-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:522:/* BEGIN_##TYPE##_SECTION_NESTED(80) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-523-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-532-\t/* NB. inner section is not nop'ed, but then entire outer is */\t\\\narch/powerpc/lib/feature-fixups-test.S:533:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-534-\tnop;\t\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-535-\tnop;\t\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:536:/* BEGIN_##TYPE##_SECTION_NESTED(80) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-537-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-545-\t/* Nesting test, none should be nop'ed */\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:546:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-547-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-548-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:549:/* BEGIN_##TYPE##_SECTION_NESTED(80) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-550-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-558-\t/* Basic alt section test, default case should be taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:559:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-560-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-569-\t/* Basic alt section test, else case should be taken */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:570:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-571-\t/* or\t3,3,3; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-581-\t/* Alt with smaller else case, should be padded with nops */\t\\\narch/powerpc/lib/feature-fixups-test.S:582:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-583-\t/* or\t3,3,3; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-594-\t/* Default case should be taken, with nop'ed inner section */\t\\\narch/powerpc/lib/feature-fixups-test.S:595:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-596-\tor\t3,3,3;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:597:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-598-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-608-\t/* Alt section with nested section in else, default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:609:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-610-\tor\t3,3,3;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-614-\t/* or\t5,5,5; */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:615:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-616-\t/* or\t3,3,3; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-622-\t/* Alt section with nested section in else, else taken \u0026 nop */\t\\\narch/powerpc/lib/feature-fixups-test.S:623:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-624-\t/* or\t3,3,3; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-628-\tor\t5,5,5;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:629:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-630-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-636-\t/* Feature section with nested alt section, default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:637:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-638-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:639:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-640-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-648-\t/* Feature section with nested alt section, else taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:649:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-650-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:651:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-652-\t/* or\t1,1,1; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-660-\t/* Feature section with nested alt section, all nop'ed */\t\\\narch/powerpc/lib/feature-fixups-test.S:661:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-662-\tnop;\t\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:663:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-664-\tnop;\t\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-672-\t/* Nested alt sections, default with inner default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:673:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-674-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:675:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-676-\tor\t1,1,1;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-682-\t/* or\t31,31,31; */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:683:/* BEGIN_##TYPE##_SECTION_NESTED(94) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-684-\t/* or\t5,5,5; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-692-\t/* Nested alt sections, default with inner else taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:693:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-694-\tor\t2,2,2;\t\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:695:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-696-\t/* or\t1,1,1; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-702-\t/* or\t31,31,31; */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:703:/* BEGIN_##TYPE##_SECTION_NESTED(94) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-704-\t/* or\t5,5,5; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-712-\t/* Nested alt sections, else with inner default taken */\t\\\narch/powerpc/lib/feature-fixups-test.S:713:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-714-\t/* or\t2,2,2; */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:715:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-716-\t/* or\t1,1,1; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-722-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:723:/* BEGIN_##TYPE##_SECTION_NESTED(94) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-724-\tor\t5,5,5;\t\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-732-\t/* Nested alt sections, else with inner else taken */\t\t\\\narch/powerpc/lib/feature-fixups-test.S:733:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-734-\t/* or\t2,2,2; */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:735:/* BEGIN_##TYPE##_SECTION_NESTED(95) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-736-\t/* or\t1,1,1; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-742-\tor\t31,31,31;\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:743:/* BEGIN_##TYPE##_SECTION_NESTED(94) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-744-\t/* or\t5,5,5; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-752-\t/* Nested alt sections, else can have large else case */\t\\\narch/powerpc/lib/feature-fixups-test.S:753:/* BEGIN_##TYPE##_SECTION */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-754-\t/* or\t2,2,2; */\t\t\t\t\t\t\\\n--\narch/powerpc/lib/feature-fixups-test.S-758-/* ##TYPE##_SECTION_ELSE */\t\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S:759:/* BEGIN_##TYPE##_SECTION_NESTED(94) */\t\t\t\t\t\\\narch/powerpc/lib/feature-fixups-test.S-760-\t/* or\t5,5,5; */\t\t\t\t\t\t\\\n--\narch/powerpc/perf/hv-24x7.c=38=static bool domain_is_valid(unsigned int domain)\n--\narch/powerpc/perf/hv-24x7.c-41-#define DOMAIN(n, v, x, c)\t\t\\\narch/powerpc/perf/hv-24x7.c:42:\tcase HV_PERF_DOMAIN_##n:\t\\\narch/powerpc/perf/hv-24x7.c-43-\t\t/* fall through */\n--\narch/powerpc/perf/hv-24x7.c=52=static bool is_physical_domain(unsigned int domain)\n--\narch/powerpc/perf/hv-24x7.c-55-#define DOMAIN(n, v, x, c)\t\t\\\narch/powerpc/perf/hv-24x7.c:56:\tcase HV_PERF_DOMAIN_##n:\t\\\narch/powerpc/perf/hv-24x7.c-57-\t\treturn c;\n--\narch/powerpc/perf/hv-24x7.h=7=enum hv_perf_domains {\narch/powerpc/perf/hv-24x7.h:8:#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v,\narch/powerpc/perf/hv-24x7.h-9-#include \"hv-24x7-domains.h\"\n--\narch/powerpc/platforms/52xx/lite5200_sleep.S-25-#define SAVE_SPRN(reg, addr)\t\t\\\narch/powerpc/platforms/52xx/lite5200_sleep.S:26:\tmfspr\tr10, SPRN_##reg;\t\\\narch/powerpc/platforms/52xx/lite5200_sleep.S-27-\tstw\tr10, ((addr)*4)(r4);\n--\narch/powerpc/platforms/52xx/lite5200_sleep.S-30-\tlwz\tr10, ((addr)*4)(r4);\t\\\narch/powerpc/platforms/52xx/lite5200_sleep.S:31:\tmtspr\tSPRN_##reg, r10;\t\\\narch/powerpc/platforms/52xx/lite5200_sleep.S-32-\tsync;\t\t\t\t\\\n--\narch/powerpc/platforms/ps3/exports.c-9-#define LV1_CALL(name, in, out, num) \\\narch/powerpc/platforms/ps3/exports.c:10: extern s64 _lv1_##name(LV1_##in##_IN_##out##_OUT_ARG_DECL); \\\narch/powerpc/platforms/ps3/exports.c-11- EXPORT_SYMBOL(_lv1_##name);\n--\narch/powerpc/platforms/ps3/hvcall.S=806=_GLOBAL(_##API_NAME)\t\t\t\t\\\n--\narch/powerpc/platforms/ps3/hvcall.S-826-\narch/powerpc/platforms/ps3/hvcall.S:827:#define LV1_CALL(name, in, out, num) LV1_##in##_IN_##out##_OUT(lv1_##name, num)\narch/powerpc/platforms/ps3/hvcall.S-828-#include \u003casm/lv1call.h\u003e\n--\narch/x86/kvm/x86.h=535=enum kvm_apicv_inhibit {\n--\narch/x86/kvm/x86.h-625-#define __APICV_INHIBIT_REASON(reason)\t\t\t\\\narch/x86/kvm/x86.h:626:\t{ BIT(APICV_INHIBIT_REASON_##reason), #reason }\narch/x86/kvm/x86.h-627-\n--\ndrivers/bus/mhi/host/init.c=33=const char * const mhi_ee_str[MHI_EE_MAX] = {\n--\ndrivers/bus/mhi/host/init.c-39-\ndrivers/bus/mhi/host/init.c:40:#define dev_st_trans(a, b)\t[DEV_ST_TRANSITION_##a] = b,\ndrivers/bus/mhi/host/init.c:41:#define dev_st_trans_end(a, b)\t[DEV_ST_TRANSITION_##a] = b,\ndrivers/bus/mhi/host/init.c-42-\n--\ndrivers/bus/mhi/host/trace.h=66=MHI_CH_STATE_TYPE_LIST\n--\ndrivers/bus/mhi/host/trace.h-76-\ndrivers/bus/mhi/host/trace.h:77:#define dev_st_trans(a, b)\t\tTRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);\ndrivers/bus/mhi/host/trace.h:78:#define dev_st_trans_end(a, b)\t\tTRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);\ndrivers/bus/mhi/host/trace.h-79-\ndrivers/bus/mhi/host/trace.h=80=DEV_ST_TRANSITION_LIST\n--\ndrivers/bus/mhi/host/trace.h-84-\ndrivers/bus/mhi/host/trace.h:85:#define dev_st_trans(a, b)\t\t{ DEV_ST_TRANSITION_##a, b },\ndrivers/bus/mhi/host/trace.h:86:#define dev_st_trans_end(a, b)\t\t{ DEV_ST_TRANSITION_##a, b }\ndrivers/bus/mhi/host/trace.h-87-\n--\ndrivers/crypto/caam/desc_constr.h=406=APPEND_CMD_RAW_IMM2(load, LOAD, be, 32);\n--\ndrivers/crypto/caam/desc_constr.h-412-#define APPEND_MATH(op, desc, dest, src_0, src_1, len) \\\ndrivers/crypto/caam/desc_constr.h:413:append_cmd(desc, CMD_MATH | MATH_FUN_##op | MATH_DEST_##dest | \\\ndrivers/crypto/caam/desc_constr.h-414-\tMATH_SRC0_##src_0 | MATH_SRC1_##src_1 | (u32)len);\n--\ndrivers/firmware/psci/psci.c-40-#else\ndrivers/firmware/psci/psci.c:41:#define PSCI_FN_NATIVE(version, name)\tPSCI_##version##_FN_##name\ndrivers/firmware/psci/psci.c-42-#endif\n--\ndrivers/firmware/psci/psci.c=367=static int psci_features(u32 psci_func_id)\n--\ndrivers/firmware/psci/psci.c-375-#define PSCI_ID(ver, _name) \\\ndrivers/firmware/psci/psci.c:376:\t{ .fn = PSCI_##ver##_FN_##_name, .name = #_name, }\ndrivers/firmware/psci/psci.c-377-#define PSCI_ID_NATIVE(ver, _name) \\\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h=244=enum amdgpu_vcn_caps {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h-247-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h:248:#define AMDGPU_VCN_CAPS(caps) BIT(AMDGPU_VCN_##caps)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h-249-\n--\ndrivers/gpu/drm/imagination/pvr_device_info.c-15-#define QUIRK_MAPPING(quirk) \\\ndrivers/gpu/drm/imagination/pvr_device_info.c:16:\t[PVR_FW_HAS_BRN_##quirk] = offsetof(struct pvr_device, quirks.has_brn##quirk)\ndrivers/gpu/drm/imagination/pvr_device_info.c-17-\ndrivers/gpu/drm/imagination/pvr_device_info.c=18=static const uintptr_t quirks_mapping[] = {\n--\ndrivers/gpu/drm/imagination/pvr_device_info.c-35-#define ENHANCEMENT_MAPPING(enhancement) \\\ndrivers/gpu/drm/imagination/pvr_device_info.c:36:\t[PVR_FW_HAS_ERN_##enhancement] = offsetof(struct pvr_device, \\\ndrivers/gpu/drm/imagination/pvr_device_info.c-37-\t\t\t\t\t\t enhancements.has_ern##enhancement)\n--\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h=16=enum rogue_riscvfw_region {\n--\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h-36-\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h:37:#define ROGUE_RISCVFW_REGION_BASE(r) ((u32)(ROGUE_RISCV_REGION_##r) \u003c\u003c ROGUE_RISCVFW_REGION_SHIFT)\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h-38-#define ROGUE_RISCVFW_REGION_REMAP_CR(r) \\\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h:39:\t(ROGUE_CR_FWCORE_ADDR_REMAP_CONFIG0 + (u32)(ROGUE_RISCV_REGION_##r) * 8U)\ndrivers/gpu/drm/imagination/pvr_rogue_riscv.h-40-\n--\ndrivers/gpu/drm/nouveau/include/nvkm/core/client.h=23=int nvkm_client_new(const char *name, u64 device, const char *cfg, const char *dbg,\n--\ndrivers/gpu/drm/nouveau/include/nvkm/core/client.h-30-\tif (_client-\u003edebug \u003e= NV_DBG_##l) \\\ndrivers/gpu/drm/nouveau/include/nvkm/core/client.h:31:\t\tprintk(KERN_##p \"nouveau: %s:%08x:%08x: \"f, _client-\u003ename, \\\ndrivers/gpu/drm/nouveau/include/nvkm/core/client.h-32-\t\t _object-\u003ehandle, _object-\u003eoclass, ##a); \\\n--\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/rpcfn.h-11-#ifndef X\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/rpcfn.h:12:# define X(UNIT, RPC) NV_VGPU_MSG_FUNCTION_##RPC,\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/rpcfn.h-13-# define DEFINING_X_IN_RPC_GLOBAL_ENUMS_H\n--\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/rpcfn.h-11-#ifndef X\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/rpcfn.h:12:# define X(UNIT, RPC, VAL) NV_VGPU_MSG_FUNCTION_##RPC = VAL,\ndrivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/rpcfn.h-13-# define DEFINING_X_IN_RPC_GLOBAL_ENUMS_H\n--\ndrivers/hwmon/asb100.c=248=static ssize_t set_in_##reg(struct device *dev, struct device_attribute *attr, \\\n--\ndrivers/hwmon/asb100.c-259-\tdata-\u003ein_##reg[nr] = IN_TO_REG(val); \\\n\n"
} |
| 41/2 | 2026/09/14 08:00 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 61123 output: 17 thoughts: 1116 Thoughts: **Analyzing a Potentially Invalid Kernel Patch** Okay, first things first, I see this patch and immediately notice the use of `N_MEMORY_PUBLIC`. That's a red flag – I don't recall that enum member existing. Let's start with a systematic check. I'll search the kernel source tree for `N_MEMORY_PUBLIC`, and also for `N_` or `node_states` to refresh my memory about the relevant definitions, starting in `include/linux/`. Ah, here's `nodemask.h`, showing me the standard `enum node_states`. No `N_MEMORY_PUBLIC` in sight. Alright, so the patch is changing `N_MEMORY` to this unknown `N_MEMORY_PUBLIC`. This smells like a problem. The commit message points to syzkaller, which suggests this might be a fuzzing-related submission. My immediate thought is, did someone submit a broken patch? Was `N_MEMORY_PUBLIC` a typo? Maybe an incomplete patch? Or, did they simply *assume* something was defined and it's not? To be sure I need to double-check that `N_MEMORY_PUBLIC` is truly absent from the entire kernel tree. A `grep` across the whole thing should do the trick. Okay, confirming the `grep` results. `N_MEMORY_PUBLIC` is *only* in the patched file! So, the code *cannot* compile as-is. Now, the question becomes, is this code even *fuzzable*? I recall the fuzzing guidelines. Reachability is key. If the code doesn't compile, it's structurally unreachable. No fuzzing. The guidelines explicitly cover this – non-kernel, non-executable changes are not to be fuzzed. Wait, hold on. Is it *possible* that `N_MEMORY_PUBLIC` is valid under some configuration or architecture? Could it have been introduced in an RFC, an out-of-tree patch, or a specific kernel version? Let's broaden the search; I need to look for any mention of "memory_public" in the kernel. Maybe this relates to CXL, HMM, or some device-private versus public memory concept. Perhaps it's a very new thing. I need to investigate any possibilities before I dismiss the patch entirely, but so far it looks like a dead end. |
| 42/2 | 2026/09/14 08:00 | tool | grepper |
0mArgs:{
"Expression": "MEMORY_PUBLIC"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n"
} |
| 43/2 | 2026/09/14 08:00 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 62903 output: 37 thoughts: 72 Thoughts: **Investigating the `node_states` Source** Okay, so I'm trying to figure out the history or definition of `node_states`. My first instinct is to dig into the version control, but `git log` isn't an option here. No problem. Let's see if there's any mention in the `Documentation/` directory, or maybe something in `include/linux/nodemask.h`. Those are the usual suspects for this kind of core memory management data structure. Alternatively, there's `Documentation/mm/physical_memory.rst` that I recall is the primary reference. Let me check around line 150 – that's often where the core data structure explanations are located. Hopefully, it’ll be a good description! |
| 44/2 | 2026/09/14 08:00 | tool | read-file |
0mArgs:{
"File": "Documentation/mm/physical_memory.rst",
"FirstLine": 150,
"LineCount": 40
}Results: {
"Contents": " 150:\tstructures. The actual structures are allocated early during boot when\n 151:\tarchitecture specific code parses the physical memory map reported by the\n 152:\tfirmware. The bulk of the node initialization happens slightly later in the\n 153:\tboot process by free_area_init() function, described later in Section\n 154:\t:ref:`Initialization \u003cinitialization\u003e`.\n 155:\t\n 156:\t\n 157:\tAlong with the node structures, kernel maintains an array of ``nodemask_t``\n 158:\tbitmasks called ``node_states``. Each bitmask in this array represents a set of\n 159:\tnodes with particular properties as defined by ``enum node_states``:\n 160:\t\n 161:\t``N_POSSIBLE``\n 162:\t The node could become online at some point.\n 163:\t``N_ONLINE``\n 164:\t The node is online.\n 165:\t``N_NORMAL_MEMORY``\n 166:\t The node has regular memory.\n 167:\t``N_HIGH_MEMORY``\n 168:\t The node has regular or high memory. When ``CONFIG_HIGHMEM`` is disabled\n 169:\t aliased to ``N_NORMAL_MEMORY``.\n 170:\t``N_MEMORY``\n 171:\t The node has memory(regular, high, movable)\n 172:\t``N_CPU``\n 173:\t The node has one or more CPUs\n 174:\t``N_GENERIC_INITIATOR``\n 175:\t The node has one or more Generic Initiators\n 176:\t\n 177:\tFor each node that has a property described above, the bit corresponding to the\n 178:\tnode ID in the ``node_states[\u003cproperty\u003e]`` bitmask is set.\n 179:\t\n 180:\tFor example, for node 2 with normal memory and CPUs, bit 2 will be set in ::\n 181:\t\n 182:\t node_states[N_POSSIBLE]\n 183:\t node_states[N_ONLINE]\n 184:\t node_states[N_NORMAL_MEMORY]\n 185:\t node_states[N_HIGH_MEMORY]\n 186:\t node_states[N_MEMORY]\n 187:\t node_states[N_CPU]\n 188:\t\n 189:\tFor various operations possible with nodemasks please refer to\n"
} |
| 45/2 | 2026/09/14 08:00 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 63832 output: 29 thoughts: 1104 Thoughts: **Analyzing the Build Failure and Fuzzing Worthiness** Okay, so `enum node_states` has *never* had `N_MEMORY_PUBLIC` defined in the mainline kernel, that's certain. Unless, and this is a hunch, it was introduced and then immediately removed in a patch series, perhaps an RFC, where a single patch slipped through and was applied by a tool like syz-cluster? Hmm, but even if it *was* there for a moment, a non-compiling patch is unusable for fuzzing, obviously. You can't build a kernel image with it! Wait, would `CONFIG_MEMORY_HOTPLUG` change things? If it's *not* set, then `mm/memory_hotplug.c` isn't compiled. So, *only* when `CONFIG_MEMORY_HOTPLUG=y` will `mm/memory_hotplug.c` even exist, and *that's* when it will fail to compile because `N_MEMORY_PUBLIC` is undefined. Okay, got it. Could `N_MEMORY_PUBLIC` be defined by *another* config option? Let's check. Time to grep the entire kernel source tree for `N_MEMORY_PUBLIC`. Yep, `grepper` only turned up one hit: `mm/memory_hotplug.c:1931: nodemask_t nmask = node_states[N_MEMORY_PUBLIC];`. Nothing else. Zero. Dead end. Now, the crucial question: should `WorthFuzzing` be false here? Why would it be false? Let's carefully re-read those criteria, especially the negative ones in Sections 2 and 3. Essentially, `WorthFuzzing=false` only if the change is *strictly* one of these categories: * Non-kernel and non-executable changes (documentation, comments, user-space tools, logging that doesn't affect control flow) * Structurally unreachable hardware (vendor-specific drivers needing physical hardware that isn't emulated). * Unreachable execution paths (driver teardown callbacks triggered only by hot-unplug). Conversely, `WorthFuzzing=true` whenever the patch touches reachable executable code, including core subsystems, refactorings, assertions, and drivers accessible via virtual buses. Wait a second... Is memory hot-unplug/offlining considered "unreachable"? The text *specifically* mentions "driver teardown callbacks...executed only during physical PCI hot-unplug or manual sysfs driver unbinding" as unreachable. That sounds very similar. But what about *memory* offlining? The question is, how is `offline_pages` invoked? Let's trace the callers of `offline_pages` to figure out if it is potentially unreachable. The grep shows `drivers/base/memory.c: memory_block_offline(mem)`, which is called from `memory_block_action(mem, action)` where `action` is `MEM_OFFLINE`. Where is `memory_block_action` called from? I need to check `drivers/base/memory.c`! |
| 46/2 | 2026/09/14 08:01 | tool | grepper |
0mArgs:{
"Expression": "memory_block_action",
"PathPrefix": "drivers/base/"
}Results: {
"Output": "drivers/base/memory.c=334=static int\ndrivers/base/memory.c:335:memory_block_action(struct memory_block *mem, unsigned long action)\ndrivers/base/memory.c-336-{\n--\ndrivers/base/memory.c=355=static int memory_block_change_state(struct memory_block *mem,\n--\ndrivers/base/memory.c-365-\ndrivers/base/memory.c:366:\tret = memory_block_action(mem, to_state);\ndrivers/base/memory.c-367-\tmem-\u003estate = ret ? from_state_req : to_state;\n"
} |
| 47/2 | 2026/09/14 08:01 | llm | patch-evaluator-compressor |
0mModel:gemini-3.8-flash Args: null Results: null Reply: ### Summary of Workspace and Investigation State
#### 1. Diff Under Review
Commit: `747c46842896f4c9e3cbc94c90b6ba49c660ad93`
Target Architecture: `amd64`
Diff contents:
```diff
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index d7a59167bec43..683925183df6b 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1928,7 +1928,7 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
folio_put(folio);
}
if (!list_empty(&source)) {
- nodemask_t nmask = node_states[N_MEMORY];
+ nodemask_t nmask = node_states[N_MEMORY_PUBLIC];
struct migration_target_control mtc = {
.nmask = &nmask,
.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
@@ -1944,8 +1944,8 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
/*
* try to allocate from a different node but reuse this node
- * if there are no other online nodes to be used (e.g. we are
- * offlining a part of the only existing node)
+ * if there are no other public nodes to be used (e.g. we are
+ * offlining a part of the only public node)
*/
node_clear(mtc.nid, nmask);
if (nodes_empty(nmask))
```
#### 2. Approaches Tried & Key Findings
- **Context Inspection in `mm/memory_hotplug.c`**:
- `do_migrate_range(start_pfn, end_pfn)` is a static function in `mm/memory_hotplug.c` (lines 1879-1965).
- It is invoked exclusively by `offline_pages(start_pfn, nr_pages, zone, group)` at line 2106.
- `offline_pages()` is called via sysfs memory block offlining: writing `offline` to `/sys/devices/system/memory/memoryX/state` -> `memory_block_action()` -> `memory_block_offline()` -> `offline_pages()`.
- **Search for Identifier `N_MEMORY_PUBLIC`**:
- Searched whole repository for `N_MEMORY_PUBLIC`. Result: Only matched `mm/memory_hotplug.c:1931` (the line changed by the patch).
- Inspected `include/linux/nodemask.h` (lines 390-405):
```c
enum node_states {
N_POSSIBLE,
N_ONLINE,
N_NORMAL_MEMORY,
#ifdef CONFIG_HIGHMEM
N_HIGH_MEMORY,
#else
N_HIGH_MEMORY = N_NORMAL_MEMORY,
#endif
N_MEMORY,
N_CPU,
N_GENERIC_INITIATOR,
NR_NODE_STATES
};
```
- Searched for any `#define` of `N_MEMORY_PUBLIC`: none exist (`define.*N_MEMORY_PUBLIC` returned no matches).
- Searched for `PUBLIC` in `mm/`: only `mm/memory_hotplug.c:1931` matched.
- Searched for `PUBLIC` across `include/linux/`: only unrelated subsystems matched (WiFi/IEEE802.11, Broadcom NIC HSI, TPM, Ceph, Turris Omnia MCU).
- **Build System Verification**:
- Checked `mm/Makefile`: `memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o`.
- When `CONFIG_MEMORY_HOTPLUG` is enabled, `memory_hotplug.c` is compiled.
- Because `N_MEMORY_PUBLIC` is completely undefined anywhere in the tree, any build enabling `CONFIG_MEMORY_HOTPLUG` will fail to compile due to an undeclared identifier error (`'N_MEMORY_PUBLIC' undeclared`).
#### 3. Current Hypotheses & Active Line of Investigation
- **Compilation Failure / Broken Patch Series**:
- The patch modifies `mm/memory_hotplug.c` to use `N_MEMORY_PUBLIC`, which does not exist in `enum node_states` in `include/linux/nodemask.h` or anywhere else in the kernel tree.
- The patch likely depends on an unapplied precursor patch that introduces `N_MEMORY_PUBLIC` (e.g. distinguishing public memory from private/secure memory on architectures/devices like CXL or AMD SEV/GPU memory).
- In its current applied state in the tree, the patch does not compile whenever `CONFIG_MEMORY_HOTPLUG` is enabled. If `CONFIG_MEMORY_HOTPLUG` is disabled, `memory_hotplug.o` is not built, making the code completely unreachable and unexecutable.
- Evaluation against criteria:
- If code cannot compile or is completely nonexistent/unreachable, or if it is an invalid compilation-breaking change, how should syzkaller triage treat it?
- Core triage instructions state:
- "Fuzzing can only discover bugs in code that can actually execute in standard virtualized environments... If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed..."
- However, Section 3 also specifies: "Return WorthFuzzing=true whenever the patch touches reachable executable code, including: Core Subsystems: Any logic modifications in memory management (mm/)...".
- Need to determine whether `WorthFuzzing` should be `false` (due to compilation failure / structural unreachability) or if it's considered `WorthFuzzing=true` if it's considered a core mm change, or if syzkaller triage rejects unbuildable patches.
#### 4. Critical Files and Functions
- `mm/memory_hotplug.c`:
- `do_migrate_range()` (lines 1879–1965)
- `offline_pages()` (lines 1988–2120)
- `include/linux/nodemask.h`:
- `enum node_states` (lines 392–405) - shows `N_MEMORY_PUBLIC` is missing.
- `drivers/base/memory.c`:
- `memory_block_offline()` (lines 289–320)
- Relevant configs:
- `CONFIG_MEMORY_HOTPLUG` (`MEMORY_HOTPLUG`)
- `CONFIG_MIGRATION` (`MIGRATION`)
- `CONFIG_NUMA` (`NUMA`)
#### 5. Repetitive Patterns / Loops to Avoid
- Avoid repeating greps for variations of `*PUBLIC*` in the codebase; it is established beyond doubt that `N_MEMORY_PUBLIC` is completely absent outside line 1931 in `mm/memory_hotplug.c`.
- Ready to conclude analysis on whether uncompilable/missing symbol code is eligible for fuzzing or must be flagged as unbuildable/unreachable.Tokens: input: 44294 output: 1752 thoughts: 0 |
| 48/2 | 2026/09/14 08:01 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 22598 output: 35 thoughts: 0 |
| 49/2 | 2026/09/14 08:01 | tool | read-file |
0mArgs:{
"File": "drivers/base/memory.c",
"FirstLine": 330,
"LineCount": 45
}Results: {
"Contents": " 330:\t/*\n 331:\t * MEMORY_HOTPLUG depends on SPARSEMEM in mm/Kconfig, so it is\n 332:\t * OK to have direct references to sparsemem variables in here.\n 333:\t */\n 334:\tstatic int\n 335:\tmemory_block_action(struct memory_block *mem, unsigned long action)\n 336:\t{\n 337:\t\tint ret;\n 338:\t\n 339:\t\tswitch (action) {\n 340:\t\tcase MEM_ONLINE:\n 341:\t\t\tret = memory_block_online(mem);\n 342:\t\t\tbreak;\n 343:\t\tcase MEM_OFFLINE:\n 344:\t\t\tret = memory_block_offline(mem);\n 345:\t\t\tbreak;\n 346:\t\tdefault:\n 347:\t\t\tWARN(1, KERN_WARNING \"%s(%ld, %ld) unknown action: \"\n 348:\t\t\t \"%ld\\n\", __func__, mem-\u003estart_section_nr, action, action);\n 349:\t\t\tret = -EINVAL;\n 350:\t\t}\n 351:\t\n 352:\t\treturn ret;\n 353:\t}\n 354:\t\n 355:\tstatic int memory_block_change_state(struct memory_block *mem,\n 356:\t\t\tunsigned long to_state, unsigned long from_state_req)\n 357:\t{\n 358:\t\tint ret = 0;\n 359:\t\n 360:\t\tif (mem-\u003estate != from_state_req)\n 361:\t\t\treturn -EINVAL;\n 362:\t\n 363:\t\tif (to_state == MEM_OFFLINE)\n 364:\t\t\tmem-\u003estate = MEM_GOING_OFFLINE;\n 365:\t\n 366:\t\tret = memory_block_action(mem, to_state);\n 367:\t\tmem-\u003estate = ret ? from_state_req : to_state;\n 368:\t\n 369:\t\treturn ret;\n 370:\t}\n 371:\t\n 372:\t/* The device lock serializes operations on memory_subsys_[online|offline] */\n 373:\tstatic int memory_subsys_online(struct device *dev)\n 374:\t{\n"
} |
| 50/2 | 2026/09/14 08:01 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 23259 output: 35 thoughts: 0 |
| 51/2 | 2026/09/14 08:01 | tool | read-file |
0mArgs:{
"File": "drivers/base/memory.c",
"FirstLine": 290,
"LineCount": 40
}Results: {
"Contents": " 290:\t{\n 291:\t\tunsigned long start_pfn = section_nr_to_pfn(mem-\u003estart_section_nr);\n 292:\t\tunsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;\n 293:\t\tunsigned long nr_vmemmap_pages = 0;\n 294:\t\tint ret;\n 295:\t\n 296:\t\tif (!mem-\u003ezone)\n 297:\t\t\treturn -EINVAL;\n 298:\t\n 299:\t\t/*\n 300:\t\t * Unaccount before offlining, such that unpopulated zone and kthreads\n 301:\t\t * can properly be torn down in offline_pages().\n 302:\t\t */\n 303:\t\tif (mem-\u003ealtmap)\n 304:\t\t\tnr_vmemmap_pages = mem-\u003ealtmap-\u003efree;\n 305:\t\n 306:\t\tmem_hotplug_begin();\n 307:\t\tif (nr_vmemmap_pages)\n 308:\t\t\tadjust_present_page_count(pfn_to_page(start_pfn), mem-\u003egroup,\n 309:\t\t\t\t\t\t -nr_vmemmap_pages);\n 310:\t\n 311:\t\tret = offline_pages(start_pfn + nr_vmemmap_pages,\n 312:\t\t\t\t nr_pages - nr_vmemmap_pages, mem-\u003ezone, mem-\u003egroup);\n 313:\t\tif (ret) {\n 314:\t\t\t/* offline_pages() failed. Account back. */\n 315:\t\t\tif (nr_vmemmap_pages)\n 316:\t\t\t\tadjust_present_page_count(pfn_to_page(start_pfn),\n 317:\t\t\t\t\t\t\t mem-\u003egroup, nr_vmemmap_pages);\n 318:\t\t\tgoto out;\n 319:\t\t}\n 320:\t\n 321:\t\tif (nr_vmemmap_pages)\n 322:\t\t\tmhp_deinit_memmap_on_memory(start_pfn, nr_vmemmap_pages);\n 323:\t\n 324:\t\tmem-\u003ezone = NULL;\n 325:\tout:\n 326:\t\tmem_hotplug_done();\n 327:\t\treturn ret;\n 328:\t}\n 329:\t\n"
} |
| 52/2 | 2026/09/14 08:01 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 23916 output: 37 thoughts: 0 |
| 53/2 | 2026/09/14 08:01 | tool | read-file |
0mArgs:{
"File": "mm/memory_hotplug.c",
"FirstLine": 1920,
"LineCount": 45
}Results: {
"Contents": "1920:\t\t\tif (!isolate_folio_to_list(folio, \u0026source)) {\n1921:\t\t\t\tif (__ratelimit(\u0026migrate_rs)) {\n1922:\t\t\t\t\tpr_warn(\"failed to isolate pfn %lx\\n\",\n1923:\t\t\t\t\t\tpage_to_pfn(page));\n1924:\t\t\t\t\tdump_page(page, \"isolation failed\");\n1925:\t\t\t\t}\n1926:\t\t\t}\n1927:\tput_folio:\n1928:\t\t\tfolio_put(folio);\n1929:\t\t}\n1930:\t\tif (!list_empty(\u0026source)) {\n1931:\t\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\n1932:\t\t\tstruct migration_target_control mtc = {\n1933:\t\t\t\t.nmask = \u0026nmask,\n1934:\t\t\t\t.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,\n1935:\t\t\t\t.reason = MR_MEMORY_HOTPLUG,\n1936:\t\t\t};\n1937:\t\t\tint ret;\n1938:\t\n1939:\t\t\t/*\n1940:\t\t\t * We have checked that migration range is on a single zone so\n1941:\t\t\t * we can use the nid of the first page to all the others.\n1942:\t\t\t */\n1943:\t\t\tmtc.nid = folio_nid(list_first_entry(\u0026source, struct folio, lru));\n1944:\t\n1945:\t\t\t/*\n1946:\t\t\t * try to allocate from a different node but reuse this node\n1947:\t\t\t * if there are no other public nodes to be used (e.g. we are\n1948:\t\t\t * offlining a part of the only public node)\n1949:\t\t\t */\n1950:\t\t\tnode_clear(mtc.nid, nmask);\n1951:\t\t\tif (nodes_empty(nmask))\n1952:\t\t\t\tnode_set(mtc.nid, nmask);\n1953:\t\t\tret = migrate_pages(\u0026source, alloc_migration_target, NULL,\n1954:\t\t\t\t(unsigned long)\u0026mtc, MIGRATE_SYNC, MR_MEMORY_HOTPLUG, NULL);\n1955:\t\t\tif (ret) {\n1956:\t\t\t\tlist_for_each_entry(folio, \u0026source, lru) {\n1957:\t\t\t\t\tif (__ratelimit(\u0026migrate_rs)) {\n1958:\t\t\t\t\t\tpr_warn(\"migrating pfn %lx failed ret:%d\\n\",\n1959:\t\t\t\t\t\t\tfolio_pfn(folio), ret);\n1960:\t\t\t\t\t\tdump_page(\u0026folio-\u003epage,\n1961:\t\t\t\t\t\t\t \"migration failure\");\n1962:\t\t\t\t\t}\n1963:\t\t\t\t}\n1964:\t\t\t\tputback_movable_pages(\u0026source);\n"
} |
| 54/2 | 2026/09/14 08:01 | llm | patch-evaluator |
1mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 24690 output: 19 thoughts: 467 Thoughts: **Analyzing a Memory Hotplug Patch** Okay, let's break this down. This patch is modifying `mm/memory_hotplug.c`. The core of the change seems to be around the `do_migrate_range` function. I'm seeing a replacement of `N_MEMORY` with `N_MEMORY_PUBLIC` within the `nodemask_t nmask` assignment. The comment block that follows this is quite interesting. It seems the code is trying to find a different node for migration, but will fall back to using the current node if there aren't any other available *public* nodes. The key here is this distinction between "nodes" and "public nodes." I'm immediately wondering about the precise definition of "public." Is `N_MEMORY_PUBLIC` actually defined anywhere? My first instinct is to double-check the codebase and see if it is defined anywhere. Let me just check the git log and history for related commits and patches. Alright, better yet, let's just grep the entire codebase for `N_MEMORY` to see all instances of the original value before the patch, to help provide context for this change and see where it might be used. I want to see if this is a general substitution or if there are subtle differences in the usage that require my attention. |
| 55/2 | 2026/09/14 08:03 | tool | grepper |
0mArgs:{
"Expression": "N_MEMORY\\b"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 772 lines.\nUse more precise expression if possible.\n\nDocumentation/ABI/testing/sysfs-bus-dax=142=Description:\n--\nDocumentation/ABI/testing/sysfs-bus-dax-149-\t\tdriver (i.e. hotplugged into system-ram). Additionally, this\nDocumentation/ABI/testing/sysfs-bus-dax:150:\t\tdepends on CONFIG_MHP_MEMMAP_ON_MEMORY, and a globally enabled\nDocumentation/ABI/testing/sysfs-bus-dax-151-\t\tmemmap_on_memory parameter for memory_hotplug. This is\n--\nDocumentation/admin-guide/cgroup-v1/cpusets.rst=224=cpu_online_mask using a CPU hotplug notifier, and the mems file\nDocumentation/admin-guide/cgroup-v1/cpusets.rst:225:automatically tracks the value of node_states[N_MEMORY]--i.e.,\nDocumentation/admin-guide/cgroup-v1/cpusets.rst-226-nodes with memory--using the cpuset_track_online_nodes() hook.\n--\nDocumentation/driver-api/cxl/linux/early-boot.rst=100=During :code:`__init`, Linux initializes the system with a default memory tier that\nDocumentation/driver-api/cxl/linux/early-boot.rst:101:contains all nodes marked :code:`N_MEMORY`.\nDocumentation/driver-api/cxl/linux/early-boot.rst-102-\n--\nDocumentation/driver-api/cxl/linux/early-boot.rst=105=during driver configuration.\nDocumentation/driver-api/cxl/linux/early-boot.rst-106-\nDocumentation/driver-api/cxl/linux/early-boot.rst:107:Nodes are only marked :code:`N_MEMORY` if they have *online* memory.\nDocumentation/driver-api/cxl/linux/early-boot.rst-108-\n--\nDocumentation/mm/physical_memory.rst=159=nodes with particular properties as defined by ``enum node_states``:\n--\nDocumentation/mm/physical_memory.rst-169- aliased to ``N_NORMAL_MEMORY``.\nDocumentation/mm/physical_memory.rst:170:``N_MEMORY``\nDocumentation/mm/physical_memory.rst-171- The node has memory(regular, high, movable)\n--\nDocumentation/mm/physical_memory.rst=180=For example, for node 2 with normal memory and CPUs, bit 2 will be set in ::\n--\nDocumentation/mm/physical_memory.rst-185- node_states[N_HIGH_MEMORY]\nDocumentation/mm/physical_memory.rst:186: node_states[N_MEMORY]\nDocumentation/mm/physical_memory.rst-187- node_states[N_CPU]\n--\nDocumentation/translations/zh_CN/core-api/memory-hotplug.rst=60=memory_notify结构体的指针::\n--\nDocumentation/translations/zh_CN/core-api/memory-hotplug.rst-72-\nDocumentation/translations/zh_CN/core-api/memory-hotplug.rst:73:- status_change_nid是当nodemask的N_MEMORY被(将)设置/清除时设置的节点id。这\nDocumentation/translations/zh_CN/core-api/memory-hotplug.rst-74- 意味着一个新的(没上线的)节点通过联机获得新的内存,而一个节点失去了所有的内\n--\nDocumentation/translations/zh_CN/mm/physical_memory.rst=95=RAM平均分配在两个节点上的arm64机器上,使用 ``movablecore=80%`` 参数\n--\nDocumentation/translations/zh_CN/mm/physical_memory.rst-160-\nDocumentation/translations/zh_CN/mm/physical_memory.rst:161:``N_MEMORY``\nDocumentation/translations/zh_CN/mm/physical_memory.rst-162-节点拥有(普通、高端、可移动)内存。\n--\nDocumentation/translations/zh_CN/mm/physical_memory.rst-175- node_states[N_HIGH_MEMORY]\nDocumentation/translations/zh_CN/mm/physical_memory.rst:176: node_states[N_MEMORY]\nDocumentation/translations/zh_CN/mm/physical_memory.rst-177- node_states[N_CPU]\n--\narch/powerpc/platforms/pseries/hotplug-memory.c=564=static int dlpar_add_lmb(struct drmem_lmb *lmb)\n--\narch/powerpc/platforms/pseries/hotplug-memory.c-586-\t/* Add the memory */\narch/powerpc/platforms/pseries/hotplug-memory.c:587:\trc = __add_memory(nid, lmb-\u003ebase_addr, block_sz, MHP_MEMMAP_ON_MEMORY);\narch/powerpc/platforms/pseries/hotplug-memory.c-588-\tif (rc) {\n--\narch/x86/kernel/cpu/sgx/main.c=797=static bool __init sgx_page_cache_init(void)\n--\narch/x86/kernel/cpu/sgx/main.c-860-\t\tif (!node_isset(nid, sgx_numa_mask) \u0026\u0026\narch/x86/kernel/cpu/sgx/main.c:861:\t\t node_state(nid, N_MEMORY) \u0026\u0026 node_state(nid, N_CPU))\narch/x86/kernel/cpu/sgx/main.c-862-\t\t\tpr_info(\"node%d has both CPUs and memory but doesn't have an EPC section\\n\",\n--\narch/x86/mm/init_64.c=833=void __init paging_init(void)\n--\narch/x86/mm/init_64.c-840-\t */\narch/x86/mm/init_64.c:841:\tnode_clear_state(0, N_MEMORY);\narch/x86/mm/init_64.c-842-\tnode_clear_state(0, N_NORMAL_MEMORY);\n--\ndrivers/acpi/acpi_memhotplug.c=168=static int acpi_memory_enable_device(struct acpi_memory_device *mem_device)\n--\ndrivers/acpi/acpi_memhotplug.c-211-\ndrivers/acpi/acpi_memhotplug.c:212:\t\tmhp_flags |= MHP_MEMMAP_ON_MEMORY;\ndrivers/acpi/acpi_memhotplug.c-213-\t\tresult = __add_memory(mgid, info-\u003estart_addr, info-\u003elength,\n--\ndrivers/base/node.c=961=static struct node_attr node_state_attr[] = {\n--\ndrivers/base/node.c-967-#endif\ndrivers/base/node.c:968:\t[N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY),\ndrivers/base/node.c-969-\t[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),\n--\ndrivers/base/node.c=974=static struct attribute *node_state_attrs[] = {\n--\ndrivers/base/node.c-980-#endif\ndrivers/base/node.c:981:\t\u0026node_state_attr[N_MEMORY].attr.attr,\ndrivers/base/node.c-982-\t\u0026node_state_attr[N_CPU].attr.attr,\n--\ndrivers/dax/kmem.c=87=static int dax_kmem_do_hotplug(struct dev_dax *dev_dax,\n--\ndrivers/dax/kmem.c-120-\t\tif (dev_dax-\u003ememmap_on_memory)\ndrivers/dax/kmem.c:121:\t\t\tmhp_flags |= MHP_MEMMAP_ON_MEMORY;\ndrivers/dax/kmem.c-122-\n--\ndrivers/gpu/drm/nouveau/dispnv50/crc.c=501=nv50_crc_ctx_init(struct nv50_head *head, struct nvif_mmu *mmu,\n--\ndrivers/gpu/drm/nouveau/dispnv50/crc.c-516-\t\t\t NV50_DISP_HANDLE_CRC_CTX(head, idx),\ndrivers/gpu/drm/nouveau/dispnv50/crc.c:517:\t\t\t NV_DMA_IN_MEMORY,\ndrivers/gpu/drm/nouveau/dispnv50/crc.c-518-\t\t\t \u0026(struct nv_dma_v0) {\n--\ndrivers/gpu/drm/nouveau/dispnv50/disp.c=232=nv50_dmac_create(struct nouveau_drm *drm,\n--\ndrivers/gpu/drm/nouveau/dispnv50/disp.c-292-\tret = nvif_object_ctor(\u0026dmac-\u003ebase.user, \"kmsSyncCtxDma\", NV50_DISP_HANDLE_SYNCBUF,\ndrivers/gpu/drm/nouveau/dispnv50/disp.c:293:\t\t\t NV_DMA_IN_MEMORY,\ndrivers/gpu/drm/nouveau/dispnv50/disp.c-294-\t\t\t \u0026(struct nv_dma_v0) {\n--\ndrivers/gpu/drm/nouveau/dispnv50/disp.c-304-\tret = nvif_object_ctor(\u0026dmac-\u003ebase.user, \"kmsVramCtxDma\", NV50_DISP_HANDLE_VRAM,\ndrivers/gpu/drm/nouveau/dispnv50/disp.c:305:\t\t\t NV_DMA_IN_MEMORY,\ndrivers/gpu/drm/nouveau/dispnv50/disp.c-306-\t\t\t \u0026(struct nv_dma_v0) {\n--\ndrivers/gpu/drm/nouveau/dispnv50/wndw.c=57=nv50_wndw_ctxdma_new(struct nv50_wndw *wndw, struct drm_framebuffer *fb)\n--\ndrivers/gpu/drm/nouveau/dispnv50/wndw.c-110-\tret = nvif_object_ctor(wndw-\u003ectxdma.parent, \"kmsFbCtxDma\", handle,\ndrivers/gpu/drm/nouveau/dispnv50/wndw.c:111:\t\t\t NV_DMA_IN_MEMORY, \u0026args, argc, \u0026ctxdma-\u003eobject);\ndrivers/gpu/drm/nouveau/dispnv50/wndw.c-112-\tif (ret) {\n--\ndrivers/gpu/drm/nouveau/include/nvif/class.h-49-#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003\ndrivers/gpu/drm/nouveau/include/nvif/class.h:50:#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d\ndrivers/gpu/drm/nouveau/include/nvif/class.h-51-\n--\ndrivers/gpu/drm/nouveau/nouveau_abi16.c=650=nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS)\n--\ndrivers/gpu/drm/nouveau/nouveau_abi16.c-704-\tret = nvif_object_ctor(\u0026chan-\u003echan-\u003euser, \"abi16Ntfy\", info-\u003ehandle,\ndrivers/gpu/drm/nouveau/nouveau_abi16.c:705:\t\t\t NV_DMA_IN_MEMORY, \u0026args, sizeof(args),\ndrivers/gpu/drm/nouveau/nouveau_abi16.c-706-\t\t\t \u0026ntfy-\u003eobject);\n--\ndrivers/gpu/drm/nouveau/nouveau_chan.c=361=nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart)\n--\ndrivers/gpu/drm/nouveau/nouveau_chan.c-408-\t\tret = nvif_object_ctor(\u0026chan-\u003euser, \"abi16ChanVramCtxDma\", vram,\ndrivers/gpu/drm/nouveau/nouveau_chan.c:409:\t\t\t\t NV_DMA_IN_MEMORY, \u0026args, sizeof(args),\ndrivers/gpu/drm/nouveau/nouveau_chan.c-410-\t\t\t\t \u0026chan-\u003evram);\n--\ndrivers/gpu/drm/nouveau/nouveau_chan.c-432-\t\tret = nvif_object_ctor(\u0026chan-\u003euser, \"abi16ChanGartCtxDma\", gart,\ndrivers/gpu/drm/nouveau/nouveau_chan.c:433:\t\t\t\t NV_DMA_IN_MEMORY, \u0026args, sizeof(args),\ndrivers/gpu/drm/nouveau/nouveau_chan.c-434-\t\t\t\t \u0026chan-\u003egart);\n--\ndrivers/gpu/drm/nouveau/nouveau_drm.c=367=nouveau_accel_gr_init(struct nouveau_drm *drm)\n--\ndrivers/gpu/drm/nouveau/nouveau_drm.c-436-\t\tret = nvif_object_ctor(\u0026drm-\u003echannel-\u003euser, \"drmM2mfNtfy\",\ndrivers/gpu/drm/nouveau/nouveau_drm.c:437:\t\t\t\t NvNotify0, NV_DMA_IN_MEMORY,\ndrivers/gpu/drm/nouveau/nouveau_drm.c-438-\t\t\t\t \u0026(struct nv_dma_v0) {\n--\ndrivers/gpu/drm/nouveau/nouveau_reg.h-86-#define NV_CLASS_NULL 0x00000030\ndrivers/gpu/drm/nouveau/nouveau_reg.h:87:#define NV_CLASS_DMA_IN_MEMORY 0x0000003D\ndrivers/gpu/drm/nouveau/nouveau_reg.h-88-\n--\ndrivers/gpu/drm/nouveau/nv50_fence.c=36=nv50_fence_context_new(struct nouveau_channel *chan)\n--\ndrivers/gpu/drm/nouveau/nv50_fence.c-54-\tret = nvif_object_ctor(\u0026chan-\u003euser, \"fenceCtxDma\", NvSema,\ndrivers/gpu/drm/nouveau/nv50_fence.c:55:\t\t\t NV_DMA_IN_MEMORY,\ndrivers/gpu/drm/nouveau/nv50_fence.c-56-\t\t\t \u0026(struct nv_dma_v0) {\n--\ndrivers/gpu/drm/nouveau/nvkm/engine/dma/base.c=60=nvkm_dma_sclass[] = {\n--\ndrivers/gpu/drm/nouveau/nvkm/engine/dma/base.c-62-\t{ 0, 0, NV_DMA_TO_MEMORY, NULL, nvkm_dma_oclass_fifo_new },\ndrivers/gpu/drm/nouveau/nvkm/engine/dma/base.c:63:\t{ 0, 0, NV_DMA_IN_MEMORY, NULL, nvkm_dma_oclass_fifo_new },\ndrivers/gpu/drm/nouveau/nvkm/engine/dma/base.c-64-};\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c=7953=static int bnx2x_init_hw_func(struct bnx2x *bp)\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c-8229-\t\tmain_mem_size = HC_REG_MAIN_MEMORY_SIZE / 2; /*dwords*/\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8230:\t\tmain_mem_base = HC_REG_MAIN_MEMORY +\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c-8231-\t\t\t\tBP_PORT(bp) * (main_mem_size * 4);\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h=871=extern const u32 dmae_reg_go_c[];\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h-907-#define HC_REG_LEADING_EDGE_1\t\t\t\t\t 0x108048\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h:908:#define HC_REG_MAIN_MEMORY\t\t\t\t\t 0x108800\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h-909-#define HC_REG_MAIN_MEMORY_SIZE\t\t\t\t\t 152\n--\ndrivers/powercap/intel_rapl_tpmi.c=27=enum tpmi_rapl_domain_type {\n--\ndrivers/powercap/intel_rapl_tpmi.c-31-\tTPMI_RAPL_DOMAIN_RESERVED,\ndrivers/powercap/intel_rapl_tpmi.c:32:\tTPMI_RAPL_DOMAIN_MEMORY,\ndrivers/powercap/intel_rapl_tpmi.c-33-\tTPMI_RAPL_DOMAIN_MAX,\n--\ndrivers/powercap/intel_rapl_tpmi.c=196=static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)\n--\ndrivers/powercap/intel_rapl_tpmi.c-254-\t\tbreak;\ndrivers/powercap/intel_rapl_tpmi.c:255:\tcase TPMI_RAPL_DOMAIN_MEMORY:\ndrivers/powercap/intel_rapl_tpmi.c-256-\t\tdomain_type = RAPL_DOMAIN_DRAM;\n--\ndrivers/s390/char/sclp_mem.c=189=static ssize_t sclp_config_mem_store(struct kobject *kobj, struct kobj_attribute *attr,\n--\ndrivers/s390/char/sclp_mem.c-228-\t\t\t\t sclp_mem-\u003ememmap_on_memory ?\ndrivers/s390/char/sclp_mem.c:229:\t\t\t\t MHP_MEMMAP_ON_MEMORY : MHP_NONE);\ndrivers/s390/char/sclp_mem.c-230-\t\tif (rc) {\n--\nfs/proc/kcore.c=250=static int kcore_ram_list(struct list_head *list)\n--\nfs/proc/kcore.c-257-\tend_pfn = 0;\nfs/proc/kcore.c:258:\tfor_each_node_state(nid, N_MEMORY) {\nfs/proc/kcore.c-259-\t\tunsigned long node_end;\n--\nfs/proc/task_mmu.c=3260=static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma,\n--\nfs/proc/task_mmu.c-3276-\tnid = page_to_nid(page);\nfs/proc/task_mmu.c:3277:\tif (!node_isset(nid, node_states[N_MEMORY]))\nfs/proc/task_mmu.c-3278-\t\treturn NULL;\n--\nfs/proc/task_mmu.c=3284=static struct page *can_gather_numa_stats_pmd(pmd_t pmd,\n--\nfs/proc/task_mmu.c-3301-\tnid = page_to_nid(page);\nfs/proc/task_mmu.c:3302:\tif (!node_isset(nid, node_states[N_MEMORY]))\nfs/proc/task_mmu.c-3303-\t\treturn NULL;\n--\nfs/proc/task_mmu.c=3402=static int show_numa_map(struct seq_file *m, void *v)\n--\nfs/proc/task_mmu.c-3474-\nfs/proc/task_mmu.c:3475:\tfor_each_node_state(nid, N_MEMORY)\nfs/proc/task_mmu.c-3476-\t\tif (md-\u003enode[nid])\n--\ninclude/linux/cpuset.h=225=static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)\n--\ninclude/linux/cpuset.h-229-\ninclude/linux/cpuset.h:230:#define cpuset_current_mems_allowed (node_states[N_MEMORY])\ninclude/linux/cpuset.h-231-static inline void cpuset_init_current_mems_allowed(void) {}\n--\ninclude/linux/cpuset.h=309=static inline void cpuset_nodes_allowed(struct cgroup *cgroup, nodemask_t *mask)\ninclude/linux/cpuset.h-310-{\ninclude/linux/cpuset.h:311:\tnodes_copy(*mask, node_states[N_MEMORY]);\ninclude/linux/cpuset.h-312-}\n--\ninclude/linux/memory_hotplug.h=35=typedef int __bitwise mhp_t;\n--\ninclude/linux/memory_hotplug.h-54- */\ninclude/linux/memory_hotplug.h:55:#define MHP_MEMMAP_ON_MEMORY ((__force mhp_t)BIT(1))\ninclude/linux/memory_hotplug.h-56-/*\n--\ninclude/linux/nodemask.h=392=enum node_states {\n--\ninclude/linux/nodemask.h-400-#endif\ninclude/linux/nodemask.h:401:\tN_MEMORY,\t\t/* The node has memory(regular, high, movable) */\ninclude/linux/nodemask.h-402-\tN_CPU,\t\t/* The node has one or more cpus */\n--\ninclude/linux/nodemask.h=430=static __always_inline int num_node_state(enum node_states state)\n--\ninclude/linux/nodemask.h-438-#define first_online_node\tfirst_node(node_states[N_ONLINE])\ninclude/linux/nodemask.h:439:#define first_memory_node\tfirst_node(node_states[N_MEMORY])\ninclude/linux/nodemask.h-440-static __always_inline unsigned int next_online_node(int nid)\n--\ninclude/linux/nodemask.h=444=static __always_inline unsigned int next_memory_node(int nid)\ninclude/linux/nodemask.h-445-{\ninclude/linux/nodemask.h:446:\treturn next_node(nid, node_states[N_MEMORY]);\ninclude/linux/nodemask.h-447-}\n--\ninclude/linux/tpm.h=225=static inline ssize_t tpm_ret_to_err(ssize_t ret)\n--\ninclude/linux/tpm.h-232-\t\treturn 0;\ninclude/linux/tpm.h:233:\tcase TPM2_RC_SESSION_MEMORY:\ninclude/linux/tpm.h-234-\t\treturn -ENOMEM;\n--\ninclude/linux/tpm_command.h=199=enum tpm2_return_codes {\n--\ninclude/linux/tpm_command.h-211-\tTPM2_RC_RETRY\t\t= 0x0922,\ninclude/linux/tpm_command.h:212:\tTPM2_RC_SESSION_MEMORY\t= 0x0903,\ninclude/linux/tpm_command.h-213-};\n--\ninclude/net/rstreason.h-21-\tFN(TCP_ABORT_ON_LINGER)\t\t\\\ninclude/net/rstreason.h:22:\tFN(TCP_ABORT_ON_MEMORY)\t\t\\\ninclude/net/rstreason.h-23-\tFN(TCP_STATE)\t\t\t\\\n--\ninclude/net/rstreason.h=46=enum sk_rst_reason {\n--\ninclude/net/rstreason.h-103-\t/**\ninclude/net/rstreason.h:104:\t * @SK_RST_REASON_TCP_ABORT_ON_MEMORY: abort on memory\ninclude/net/rstreason.h-105-\t * corresponding to LINUX_MIB_TCPABORTONMEMORY\ninclude/net/rstreason.h-106-\t */\ninclude/net/rstreason.h:107:\tSK_RST_REASON_TCP_ABORT_ON_MEMORY,\ninclude/net/rstreason.h-108-\t/**\n--\ninit/main.c=1641=static noinline void __init kernel_init_freeable(void)\n--\ninit/main.c-1648-\t */\ninit/main.c:1649:\tset_mems_allowed(node_states[N_MEMORY]);\ninit/main.c-1650-\n--\nkernel/cgroup/cpuset.c=504=static void guarantee_active_cpus(struct task_struct *tsk,\n--\nkernel/cgroup/cpuset.c-532- * One way or another, we guarantee to return some non-empty subset\nkernel/cgroup/cpuset.c:533: * of node_states[N_MEMORY].\nkernel/cgroup/cpuset.c-534- *\n--\nkernel/cgroup/cpuset.c=537=static void guarantee_online_mems(struct cpuset *cs, nodemask_t *pmask)\nkernel/cgroup/cpuset.c-538-{\nkernel/cgroup/cpuset.c:539:\twhile (!nodes_and(*pmask, cs-\u003eeffective_mems, node_states[N_MEMORY]))\nkernel/cgroup/cpuset.c-540-\t\tcs = parent_cs(cs);\n--\nkernel/cgroup/cpuset.c=3938=static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp)\n--\nkernel/cgroup/cpuset.c-4026- * changed and updates cpuset accordingly. The top_cpuset is always\nkernel/cgroup/cpuset.c:4027: * synchronized to cpu_active_mask and N_MEMORY, which is necessary in\nkernel/cgroup/cpuset.c-4028- * order to make cpusets transparent (of no affect) on systems that are\n--\nkernel/cgroup/cpuset.c=4040=static void cpuset_handle_hotplug(void)\n--\nkernel/cgroup/cpuset.c-4056-\tcpumask_copy(\u0026new_cpus, cpu_active_mask);\nkernel/cgroup/cpuset.c:4057:\tnew_mems = node_states[N_MEMORY];\nkernel/cgroup/cpuset.c-4058-\n--\nkernel/cgroup/cpuset.c-4092-\nkernel/cgroup/cpuset.c:4093:\t/* synchronize mems_allowed to N_MEMORY */\nkernel/cgroup/cpuset.c-4094-\tif (mems_updated) {\n--\nkernel/cgroup/cpuset.c=4147=void cpuset_update_active_cpus(void)\n--\nkernel/cgroup/cpuset.c-4157-/*\nkernel/cgroup/cpuset.c:4158: * Keep top_cpuset.mems_allowed tracking node_states[N_MEMORY].\nkernel/cgroup/cpuset.c:4159: * Call this routine anytime after node_states[N_MEMORY] changes.\nkernel/cgroup/cpuset.c-4160- * See cpuset_update_active_cpus() for CPU hotplug handling.\n--\nkernel/cgroup/cpuset.c=4174=void __init cpuset_init_smp(void)\n--\nkernel/cgroup/cpuset.c-4183-\tcpumask_copy(top_cpuset.effective_cpus, cpu_active_mask);\nkernel/cgroup/cpuset.c:4184:\ttop_cpuset.effective_mems = node_states[N_MEMORY];\nkernel/cgroup/cpuset.c-4185-\n--\nkernel/cgroup/cpuset.c=4324=void __init cpuset_init_current_mems_allowed(void)\n--\nkernel/cgroup/cpuset.c-4334- * attached to the specified @tsk. Guaranteed to return some non-empty\nkernel/cgroup/cpuset.c:4335: * subset of node_states[N_MEMORY], even if this means going outside the\nkernel/cgroup/cpuset.c-4336- * tasks cpuset.\n--\nkernel/cgroup/cpuset.c=4415=bool cpuset_current_node_allowed(int node, gfp_t gfp_mask)\n--\nkernel/cgroup/cpuset.c-4454- * Returns effective_mems mask from a cgroup cpuset if it is cgroup v2 and\nkernel/cgroup/cpuset.c:4455: * has cpuset subsys. Otherwise, returns node_states[N_MEMORY].\nkernel/cgroup/cpuset.c-4456- *\n--\nkernel/cgroup/cpuset.c=4467=void cpuset_nodes_allowed(struct cgroup *cgroup, nodemask_t *mask)\n--\nkernel/cgroup/cpuset.c-4477-\tif (!cgroup || !cpuset_v2()) {\nkernel/cgroup/cpuset.c:4478:\t\tnodes_copy(*mask, node_states[N_MEMORY]);\nkernel/cgroup/cpuset.c-4479-\t\treturn;\n--\nkernel/cgroup/cpuset.c-4483-\tif (!css) {\nkernel/cgroup/cpuset.c:4484:\t\tnodes_copy(*mask, node_states[N_MEMORY]);\nkernel/cgroup/cpuset.c-4485-\t\treturn;\n--\nkernel/fork.c=242=static bool try_release_thread_stack_to_cache(struct vm_struct *vm_area)\n--\nkernel/fork.c-256-\t\tnid = numa_node_id();\nkernel/fork.c:257:\t\tif (node_state(nid, N_MEMORY)) {\nkernel/fork.c-258-\t\t\tfor (i = 0; i \u003c vm_area-\u003enr_pages; i++) {\n--\nkernel/kthread.c=787=int kthreadd(void *unused)\n--\nkernel/kthread.c-794-\tignore_signals(tsk);\nkernel/kthread.c:795:\tset_mems_allowed(node_states[N_MEMORY]);\nkernel/kthread.c-796-\n--\nkernel/liveupdate/kexec_handover.c=831=static void __init kho_reserve_scratch(void)\n--\nkernel/liveupdate/kexec_handover.c-841-\t/* FIXME: deal with node hot-plug/remove */\nkernel/liveupdate/kexec_handover.c:842:\tkho_scratch_cnt = nodes_weight(node_states[N_MEMORY]) + 2;\nkernel/liveupdate/kexec_handover.c-843-\tsize = kho_scratch_cnt * sizeof(*kho_scratch);\n--\nkernel/liveupdate/kexec_handover.c-881-\t */\nkernel/liveupdate/kexec_handover.c:882:\tfor_each_node_state(nid, N_MEMORY) {\nkernel/liveupdate/kexec_handover.c-883-\t\tsize = scratch_size_node(nid);\n--\nkernel/sched/fair.c=2721=bool should_numa_migrate_memory(struct task_struct *p, struct folio *folio,\n--\nkernel/sched/fair.c-2730-\t */\nkernel/sched/fair.c:2731:\tif (!node_state(dst_nid, N_MEMORY))\nkernel/sched/fair.c-2732-\t\treturn false;\n--\nmm/Kconfig=581=config MEMORY_HOTREMOVE\n--\nmm/Kconfig-584-\nmm/Kconfig:585:config MHP_MEMMAP_ON_MEMORY\nmm/Kconfig-586-\tdef_bool y\n--\nmm/compaction.c=3355=static int __init kcompactd_init(void)\n--\nmm/compaction.c-3358-\nmm/compaction.c:3359:\tfor_each_node_state(nid, N_MEMORY)\nmm/compaction.c-3360-\t\tkcompactd_run(nid);\n--\nmm/damon/core.c=2927=static bool invalid_mem_node(int nid)\nmm/damon/core.c-2928-{\nmm/damon/core.c:2929:\treturn nid \u003c 0 || nid \u003e= MAX_NUMNODES || !node_state(nid, N_MEMORY);\nmm/damon/core.c-2930-}\n--\nmm/damon/ops-common.c=484=unsigned long damon_migrate_pages(struct list_head *folio_list, int target_nid)\n--\nmm/damon/ops-common.c-494-\tif (target_nid \u003c 0 || target_nid \u003e= MAX_NUMNODES ||\nmm/damon/ops-common.c:495:\t\t\t!node_state(target_nid, N_MEMORY)) {\nmm/damon/ops-common.c-496-\t\tdamon_putback_folio_list(folio_list);\n--\nmm/hugetlb.c=2377=static void return_unused_surplus_pages(struct hstate *h,\n--\nmm/hugetlb.c-2406-\nmm/hugetlb.c:2407:\t\tfolio = remove_pool_hugetlb_folio(h, \u0026node_states[N_MEMORY], 1);\nmm/hugetlb.c-2408-\t\tif (!folio)\n--\nmm/hugetlb.c=3376=void __init hugetlb_bootmem_struct_page_init(void)\n--\nmm/hugetlb.c-3384-\t\t.min_chunk\t= 1,\nmm/hugetlb.c:3385:\t\t.max_threads\t= num_node_state(N_MEMORY),\nmm/hugetlb.c-3386-\t\t.numa_aware\t= true,\n--\nmm/hugetlb.c=3420=static void __init hugetlb_hstate_alloc_pages_onenode(struct hstate *h, int nid)\n--\nmm/hugetlb.c-3434-\t\t\tfolio = only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid,\nmm/hugetlb.c:3435:\t\t\t\t\t\u0026node_states[N_MEMORY], NULL);\nmm/hugetlb.c-3436-\t\t\tif (!folio \u0026\u0026 !list_empty(\u0026folio_list) \u0026\u0026\n--\nmm/hugetlb.c-3440-\t\t\t\tfolio = only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid,\nmm/hugetlb.c:3441:\t\t\t\t\t\t\u0026node_states[N_MEMORY], NULL);\nmm/hugetlb.c-3442-\t\t\t}\n--\nmm/hugetlb.c=3492=static void __init hugetlb_pages_alloc_boot_node(unsigned long start, unsigned long end, void *arg)\n--\nmm/hugetlb.c-3510-\t\t}\nmm/hugetlb.c:3511:\t\tfolio = alloc_pool_huge_folio(h, \u0026node_states[N_MEMORY],\nmm/hugetlb.c-3512-\t\t\t\t\t\t\u0026node_alloc_noretry, \u0026next_node);\n--\nmm/hugetlb.c=4141=ssize_t __nr_hugepages_store_common(bool obey_mempolicy,\n--\nmm/hugetlb.c-4156-\t\t\t\tinit_nodemask_of_mempolicy(\u0026nodes_allowed)))\nmm/hugetlb.c:4157:\t\t\tn_mask = \u0026node_states[N_MEMORY];\nmm/hugetlb.c-4158-\t\telse\n--\nmm/hugetlb_cgroup.c=459=static int hugetlb_cgroup_read_numa_stat(struct seq_file *seq, void *dummy)\n--\nmm/hugetlb_cgroup.c-471-\t\tusage = 0;\nmm/hugetlb_cgroup.c:472:\t\tfor_each_node_state(nid, N_MEMORY)\nmm/hugetlb_cgroup.c-473-\t\t\tusage += READ_ONCE(h_cg-\u003enodeinfo[nid]-\u003eusage[idx]);\n--\nmm/hugetlb_cgroup.c-476-\t\t/* Simply print the per-node usage for the non-hierarchical total. */\nmm/hugetlb_cgroup.c:477:\t\tfor_each_node_state(nid, N_MEMORY)\nmm/hugetlb_cgroup.c-478-\t\t\tseq_printf(seq, \" N%d=%lu\", nid,\n--\nmm/hugetlb_cgroup.c-494-\t */\nmm/hugetlb_cgroup.c:495:\tfor_each_node_state(nid, N_MEMORY) {\nmm/hugetlb_cgroup.c-496-\t\tusage = 0;\n--\nmm/hugetlb_sysfs.c=181=static ssize_t demote_store(struct kobject *kobj,\n--\nmm/hugetlb_sysfs.c-199-\t} else {\nmm/hugetlb_sysfs.c:200:\t\tn_mask = \u0026node_states[N_MEMORY];\nmm/hugetlb_sysfs.c-201-\t}\n--\nmm/memcontrol-v1.c=1780=static int memcg_numa_stat_show(struct seq_file *m, void *v)\n--\nmm/memcontrol-v1.c-1802-\t\t\t\t\t\t false));\nmm/memcontrol-v1.c:1803:\t\tfor_each_node_state(nid, N_MEMORY)\nmm/memcontrol-v1.c-1804-\t\t\tseq_printf(m, \" N%d=%lu\", nid,\n--\nmm/memcontrol-v1.c-1814-\t\t\t\t\t\t true));\nmm/memcontrol-v1.c:1815:\t\tfor_each_node_state(nid, N_MEMORY)\nmm/memcontrol-v1.c-1816-\t\t\tseq_printf(m, \" N%d=%lu\", nid,\n--\nmm/memcontrol.c=4547=static void flush_nmi_stats(struct mem_cgroup *memcg, struct mem_cgroup *parent)\n--\nmm/memcontrol.c-4562-\nmm/memcontrol.c:4563:\tfor_each_node_state(nid, N_MEMORY) {\nmm/memcontrol.c-4564-\t\tstruct mem_cgroup_per_node *pn = memcg-\u003enodeinfo[nid];\n--\nmm/memcontrol.c=4606=static void mem_cgroup_css_rstat_flush(struct cgroup_subsys_state *css, int cpu)\n--\nmm/memcontrol.c-4639-\nmm/memcontrol.c:4640:\tfor_each_node_state(nid, N_MEMORY) {\nmm/memcontrol.c-4641-\t\tstruct mem_cgroup_per_node *pn = memcg-\u003enodeinfo[nid];\n--\nmm/memcontrol.c=5067=static int memory_numa_stat_show(struct seq_file *m, void *v)\n--\nmm/memcontrol.c-5080-\t\tseq_printf(m, \"%s\", memory_stats[i].name);\nmm/memcontrol.c:5081:\t\tfor_each_node_state(nid, N_MEMORY) {\nmm/memcontrol.c-5082-\t\t\tu64 size;\n--\nmm/memory-tiers.c=330=int next_demotion_node(int node, const nodemask_t *allowed_mask)\n--\nmm/memory-tiers.c-372-\tnodes_complement(mask, *allowed_mask);\nmm/memory-tiers.c:373:\treturn find_next_best_node_in(node, \u0026mask, \u0026node_states[N_MEMORY]);\nmm/memory-tiers.c-374-}\n--\nmm/memory-tiers.c=376=static void disable_all_demotion_targets(void)\n--\nmm/memory-tiers.c-380-\nmm/memory-tiers.c:381:\tfor_each_node_state(node, N_MEMORY) {\nmm/memory-tiers.c-382-\t\tnode_demotion[node].preferred = NODE_MASK_NONE;\n--\nmm/memory-tiers.c=400=static void dump_demotion_targets(void)\n--\nmm/memory-tiers.c-403-\nmm/memory-tiers.c:404:\tfor_each_node_state(node, N_MEMORY) {\nmm/memory-tiers.c-405-\t\tstruct memory_tier *memtier = __node_get_memory_tier(node);\n--\nmm/memory-tiers.c=425=static void establish_demotion_targets(void)\n--\nmm/memory-tiers.c-439-\nmm/memory-tiers.c:440:\tfor_each_node_state(node, N_MEMORY) {\nmm/memory-tiers.c-441-\t\tbest_distance = -1;\n--\nmm/memory-tiers.c-457-\t\t */\nmm/memory-tiers.c:458:\t\tnodes_andnot(tier_nodes, node_states[N_MEMORY], tier_nodes);\nmm/memory-tiers.c-459-\n--\nmm/memory-tiers.c-466-\t\t\ttarget = find_next_best_node_in(node, \u0026tier_nodes,\nmm/memory-tiers.c:467:\t\t\t\t\t\t\t\u0026node_states[N_MEMORY]);\nmm/memory-tiers.c-468-\t\t\tif (target == NUMA_NO_NODE)\n--\nmm/memory-tiers.c-505-\t */\n\n"
} |
| 56/2 | 2026/09/14 08:03 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 36257 output: 18 thoughts: 1011 Thoughts: **Analyzing a Suspect Patch** Okay, here's what I'm thinking. That `grep` output from `include/linux/nodemask.h` shows no sign of `N_MEMORY_PUBLIC`. This immediately raises a red flag. It's not in the kernel source, or at least, not where it *should* be. Why would this be in the patch if it's not defined? Is it a typo? An incomplete patch? Maybe a user's uncompilable submission? Wait, I need to check the patch metadata: The author is `syz-cluster <triage@syzkaller.com>`. The subject says "applied patch under review". This means the patch is already *in* the code base and the bot is supposed to be checking it. The instructions are clear: I *must* use my code access tools to inspect the code. The instructions emphasize that I should be focusing on reachability. Fuzzing is only useful for code that *actually* executes in standard environments. This also reminds me that I need to be cautious about blindly trusting "No Functional Change" or "Refactoring" claims. So, first, does `N_MEMORY_PUBLIC` even compile? Can it be defined? I need to check if there is any mention of `MEMORY_PUBLIC` anywhere at all. If the kernel can't build because `N_MEMORY_PUBLIC` isn't defined, that's critical. Let's see: `grepper` returns only one result: `mm/memory_hotplug.c:1931: nodemask_t nmask = node_states[N_MEMORY_PUBLIC];`. This is highly suspicious. It's only *used* in one place. And it's not defined anywhere. Could it be a macro concatenation? Let's check the code for any macro using `_PUBLIC`. I need to figure out where `N_MEMORY_PUBLIC` comes from and if it even can exist. My task now is to determine whether or not that particular code path is reachable, and if it is, can it ever compile. |
| 57/2 | 2026/09/14 08:03 | tool | grepper |
0mArgs:{
"Expression": "_PUBLIC\\b"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 680 lines.\nUse more precise expression if possible.\n\nDocumentation/security/keys/trusted-encrypted.rst=604=string length.\nDocumentation/security/keys/trusted-encrypted.rst-605-\nDocumentation/security/keys/trusted-encrypted.rst:606:privkey is the binary representation of TPM2B_PUBLIC excluding the\nDocumentation/security/keys/trusted-encrypted.rst-607-initial TPM2B header which can be reconstructed from the ASN.1 octed\n--\narch/powerpc/platforms/512x/clock-commonclk.c=40=enum {\narch/powerpc/platforms/512x/clock-commonclk.c-41-\t/* arrange for adjacent numbers after the public set */\narch/powerpc/platforms/512x/clock-commonclk.c:42:\tMPC512x_CLK_START_PRIVATE = MPC512x_CLK_LAST_PUBLIC,\narch/powerpc/platforms/512x/clock-commonclk.c-43-\t/* clocks which aren't announced to the public */\n--\narch/powerpc/platforms/512x/clock-commonclk.c=940=static void __init mpc5121_clk_register_of_provider(struct device_node *np)\n--\narch/powerpc/platforms/512x/clock-commonclk.c-942-\tclk_data.clks = clks;\narch/powerpc/platforms/512x/clock-commonclk.c:943:\tclk_data.clk_num = MPC512x_CLK_LAST_PUBLIC + 1;\t/* _not_ ARRAY_SIZE() */\narch/powerpc/platforms/512x/clock-commonclk.c-944-\tof_clk_add_provider(np, of_clk_src_onecell_get, \u0026clk_data);\n--\ndrivers/char/hw_random/optee-rng.c=211=static int optee_rng_probe(struct tee_client_device *rng_device)\n--\ndrivers/char/hw_random/optee-rng.c-226-\texport_uuid(sess_arg.uuid, \u0026rng_device-\u003eid.uuid);\ndrivers/char/hw_random/optee-rng.c:227:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/char/hw_random/optee-rng.c-228-\tsess_arg.num_params = 0;\n--\ndrivers/char/tpm/tpm2-sessions.c=166=static int tpm2_read_public(struct tpm_chip *chip, u32 handle, void *name)\n--\ndrivers/char/tpm/tpm2-sessions.c-183-\ttpm_buf_init(buf, TPM_BUFSIZE);\ndrivers/char/tpm/tpm2-sessions.c:184:\ttpm_buf_reset(buf, TPM2_ST_NO_SESSIONS, TPM2_CC_READ_PUBLIC);\ndrivers/char/tpm/tpm2-sessions.c-185-\ttpm_buf_append_u32(buf, handle);\n--\ndrivers/char/tpm/tpm2-sessions.c-190-\ndrivers/char/tpm/tpm2-sessions.c:191:\t/* Skip TPMT_PUBLIC: */\ndrivers/char/tpm/tpm2-sessions.c-192-\toffset += tpm_buf_read_u16(buf, \u0026offset);\n--\ndrivers/char/tpm/tpm_ftpm_tee.c=172=static int ftpm_tee_probe_generic(struct device *dev)\n--\ndrivers/char/tpm/tpm_ftpm_tee.c-198-\texport_uuid(sess_arg.uuid, \u0026ftpm_ta_uuid);\ndrivers/char/tpm/tpm_ftpm_tee.c:199:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/char/tpm/tpm_ftpm_tee.c-200-\tsess_arg.num_params = 0;\n--\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c=339=static int virtio_crypto_rsa_set_key(struct crypto_akcipher *tfm,\n--\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c-360-\t} else {\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c:361:\t\tkeytype = VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC;\ndrivers/crypto/virtio/virtio_crypto_akcipher_algs.c-362-\t\tret = rsa_parse_pub_key(\u0026rsa_key, key, keylen);\n--\ndrivers/firmware/broadcom/tee_bnxt_fw.c=184=static int tee_bnxt_fw_probe(struct tee_client_device *bnxt_device)\n--\ndrivers/firmware/broadcom/tee_bnxt_fw.c-200-\texport_uuid(sess_arg.uuid, \u0026bnxt_device-\u003eid.uuid);\ndrivers/firmware/broadcom/tee_bnxt_fw.c:201:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/firmware/broadcom/tee_bnxt_fw.c-202-\tsess_arg.num_params = 0;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c=560=int amdgpu_amdkfd_get_dmabuf_info(struct amdgpu_device *adev, int dma_buf_fd,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c-620-\t\tif (bo-\u003eflags \u0026 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c:621:\t\t\t*flags |= KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c-622-\t}\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c=1709=int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c-1739-\t\t\t\tAMDGPU_GEM_CREATE_VRAM_CLEARED;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1740:\t\t\talloc_flags |= (flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC) ?\ndrivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c-1741-\t\t\tAMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED : 0;\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c=1081=static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c-1146-\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c:1147:\tif ((flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC) \u0026\u0026\ndrivers/gpu/drm/amd/amdkfd/kfd_chardev.c-1148-\t\t(flags \u0026 KFD_IOC_ALLOC_MEM_FLAGS_VRAM) \u0026\u0026\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c=2254=static int kfd_create_vcrat_image_gpu(void *pcrat_image,\n--\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c-2335-\t\tret = kfd_fill_gpu_memory_affinity(\u0026avail_size,\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c:2336:\t\t\t\tkdev, HSA_MEM_HEAP_TYPE_FB_PUBLIC,\ndrivers/gpu/drm/amd/amdkfd/kfd_crat.c-2337-\t\t\t\tlocal_mem_info.local_mem_size_public,\n--\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h=2219=enum spad_sections {\n--\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h-2221-\tSPAD_SECTION_NVM_CFG,\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h:2222:\tSPAD_SECTION_PUBLIC,\ndrivers/net/ethernet/qlogic/qed/qed_mfw_hsi.h-2223-\tSPAD_SECTION_PRIVATE,\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c=132=struct brcmf_p2p_scan_le {\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-143- *\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:144: * @category: WLAN_CATEGORY_PUBLIC\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-145- * @action: WLAN_PUB_ACTION_VENDOR_SPECIFIC\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c=218=static bool brcmf_p2p_is_pub_action(void *frame, u32 frame_len)\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-228-\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:229:\tif (pact_frm-\u003ecategory == WLAN_CATEGORY_PUBLIC \u0026\u0026\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-230-\t pact_frm-\u003eaction == WLAN_PUB_ACTION_VENDOR_SPECIFIC \u0026\u0026\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c=246=static bool brcmf_p2p_is_dpp_pub_action(void *frame, u32 frame_len)\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-256-\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c:257:\tif (pact_frm-\u003ecategory == WLAN_CATEGORY_PUBLIC \u0026\u0026\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c-258-\t pact_frm-\u003eaction == WLAN_PUB_ACTION_VENDOR_SPECIFIC \u0026\u0026\n--\ndrivers/net/wireless/marvell/mwifiex/tdls.c=729=mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/tdls.c-759-\t\tskb_put(skb, extra);\ndrivers/net/wireless/marvell/mwifiex/tdls.c:760:\t\tmgmt-\u003eu.action.category = WLAN_CATEGORY_PUBLIC;\ndrivers/net/wireless/marvell/mwifiex/tdls.c-761-\t\tmgmt-\u003eu.action.action_code = WLAN_PUB_ACTION_TDLS_DISCOVER_RES;\n--\ndrivers/net/wireless/marvell/mwifiex/util.c=309=mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,\n--\ndrivers/net/wireless/marvell/mwifiex/util.c-321-\t\tswitch (category) {\ndrivers/net/wireless/marvell/mwifiex/util.c:322:\t\tcase WLAN_CATEGORY_PUBLIC:\ndrivers/net/wireless/marvell/mwifiex/util.c-323-\t\t\taction_code = *(payload + sizeof(struct ieee80211_hdr)\n--\ndrivers/net/wireless/st/cw1200/txrx.c=1000=void cw1200_rx_cb(struct cw1200_common *priv,\n--\ndrivers/net/wireless/st/cw1200/txrx.c-1029-\t\t ieee80211_is_action(frame-\u003eframe_control) \u0026\u0026\ndrivers/net/wireless/st/cw1200/txrx.c:1030:\t\t (mgmt-\u003eu.action.category == WLAN_CATEGORY_PUBLIC)) {\ndrivers/net/wireless/st/cw1200/txrx.c-1031-\t\tpr_debug(\"[RX] Going to MAP\u0026RESET link ID\\n\");\n--\ndrivers/net/wireless/st/cw1200/txrx.c-1040-\t ieee80211_is_action(frame-\u003eframe_control) \u0026\u0026\ndrivers/net/wireless/st/cw1200/txrx.c:1041:\t (mgmt-\u003eu.action.category == WLAN_CATEGORY_PUBLIC)) {\ndrivers/net/wireless/st/cw1200/txrx.c-1042-\t\t/* Link ID already exists for the ACTION frame.\n--\ndrivers/net/wireless/ti/wlcore/cmd.c=624=int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif)\n--\ndrivers/net/wireless/ti/wlcore/cmd.c-680-\t\t/* take the SSID from the beacon for backward compatibility */\ndrivers/net/wireless/ti/wlcore/cmd.c:681:\t\tcmd-\u003eap.ssid_type = WL12XX_SSID_TYPE_PUBLIC;\ndrivers/net/wireless/ti/wlcore/cmd.c-682-\t\tcmd-\u003eap.ssid_len = wlvif-\u003essid_len;\n--\ndrivers/net/wireless/ti/wlcore/cmd.h=567=enum wl12xx_ssid_type {\ndrivers/net/wireless/ti/wlcore/cmd.h:568:\tWL12XX_SSID_TYPE_PUBLIC = 0,\ndrivers/net/wireless/ti/wlcore/cmd.h-569-\tWL12XX_SSID_TYPE_HIDDEN = 1,\n--\ndrivers/net/wireless/ti/wlcore/scan.c=368=wlcore_scan_sched_scan_ssid_list(struct wl1271 *wl,\n--\ndrivers/net/wireless/ti/wlcore/scan.c-404-\t\t\tcmd-\u003essids[cmd-\u003en_ssids].type = (ssids[i].ssid_len) ?\ndrivers/net/wireless/ti/wlcore/scan.c:405:\t\t\t\tSCAN_SSID_TYPE_HIDDEN : SCAN_SSID_TYPE_PUBLIC;\ndrivers/net/wireless/ti/wlcore/scan.c-406-\t\t\tcmd-\u003essids[cmd-\u003en_ssids].len = ssids[i].ssid_len;\n--\ndrivers/net/wireless/ti/wlcore/scan.c-419-\ndrivers/net/wireless/ti/wlcore/scan.c:420:\t\t\tcmd-\u003essids[cmd-\u003en_ssids].type = SCAN_SSID_TYPE_PUBLIC;\ndrivers/net/wireless/ti/wlcore/scan.c-421-\t\t\tcmd-\u003essids[cmd-\u003en_ssids].len = sets[i].ssid.ssid_len;\n--\ndrivers/net/wireless/ti/wlcore/scan.h=113=enum {\ndrivers/net/wireless/ti/wlcore/scan.h:114:\tSCAN_SSID_TYPE_PUBLIC = 0,\ndrivers/net/wireless/ti/wlcore/scan.h-115-\tSCAN_SSID_TYPE_HIDDEN = 1,\n--\ndrivers/platform/x86/amd/pmf/tee-if.c=442=static int amd_pmf_ta_open_session(struct tee_context *ctx, u32 *id, const uuid_t *uuid)\n--\ndrivers/platform/x86/amd/pmf/tee-if.c-447-\texport_uuid(sess_arg.uuid, uuid);\ndrivers/platform/x86/amd/pmf/tee-if.c:448:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/platform/x86/amd/pmf/tee-if.c-449-\tsess_arg.num_params = 0;\n--\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h=1562=struct mpi3_security1_key_record {\n--\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h-1577-#define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_ECDSA_PRIVATE (0x03)\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h:1578:#define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_ECDSA_PUBLIC (0x04)\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h-1579-#define MPI3_SECURITY1_KEY_RECORD_CONSUMER_NOT_VALID (0x00)\n--\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h=1623=struct mpi3_security_page3 {\n--\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h-1646-#define MPI3_SECURITY3_FLAGS_TYPE_MLDSA_PRIVATE (1)\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h:1647:#define MPI3_SECURITY3_FLAGS_TYPE_MLDSA_PUBLIC (2)\ndrivers/scsi/mpi3mr/mpi/mpi30_cnfg.h-1648-struct mpi3_security_page10 {\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c=34=static struct action_handler OnAction_tbl[] = {\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-38-\t{RTW_WLAN_CATEGORY_BACK, \"ACTION_BACK\", \u0026OnAction_back},\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c:39:\t{RTW_WLAN_CATEGORY_PUBLIC, \"ACTION_PUBLIC\", on_action_public},\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-40-\t{RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, \"ACTION_RADIO_MEASUREMENT\", \u0026DoReserved},\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c=1765=unsigned int on_action_public(struct adapter *padapter, union recv_frame *precv_frame)\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-1776-\tcategory = frame_body[0];\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c:1777:\tif (category != RTW_WLAN_CATEGORY_PUBLIC)\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-1778-\t\tgoto exit;\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c=3529=static void issue_action_BSSCoexistPacket(struct adapter *padapter)\n--\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-3552-\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c:3553:\tcategory = RTW_WLAN_CATEGORY_PUBLIC;\ndrivers/staging/rtl8723bs/core/rtw_mlme_ext.c-3554-\taction = ACT_PUBLIC_BSSCOEXIST;\n--\ndrivers/staging/rtl8723bs/core/rtw_recv.c=1367=static signed int validate_80211w_mgmt(struct adapter *adapter, union recv_frame *precv_frame)\n--\ndrivers/staging/rtl8723bs/core/rtw_recv.c-1421-\t\t\t\t/* according 802.11-2012 standard, these five types are not robust types */\ndrivers/staging/rtl8723bs/core/rtw_recv.c:1422:\t\t\t\tif (ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_PUBLIC \u0026\u0026\ndrivers/staging/rtl8723bs/core/rtw_recv.c-1423-\t\t\t\t\tptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_HT \u0026\u0026\n--\ndrivers/staging/rtl8723bs/core/rtw_xmit.c=1191=s32 rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct xmit_frame *pxmitframe)\n--\ndrivers/staging/rtl8723bs/core/rtw_xmit.c-1288-\t\t\tif (subtype == WIFI_ACTION \u0026\u0026\ndrivers/staging/rtl8723bs/core/rtw_xmit.c:1289:\t\t\t(pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_PUBLIC ||\ndrivers/staging/rtl8723bs/core/rtw_xmit.c-1290-\t\t\tpframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_HT ||\n--\ndrivers/staging/rtl8723bs/include/ieee80211.h=522=enum {\n--\ndrivers/staging/rtl8723bs/include/ieee80211.h-526-\tRTW_WLAN_CATEGORY_BACK = 3,\ndrivers/staging/rtl8723bs/include/ieee80211.h:527:\tRTW_WLAN_CATEGORY_PUBLIC = 4, /* IEEE 802.11 public action frames */\ndrivers/staging/rtl8723bs/include/ieee80211.h-528-\tRTW_WLAN_CATEGORY_RADIO_MEASUREMENT = 5,\n--\ndrivers/tee/amdtee/core.c=213=int amdtee_open_session(struct tee_context *ctx,\n--\ndrivers/tee/amdtee/core.c-223-\ndrivers/tee/amdtee/core.c:224:\tif (arg-\u003eclnt_login != TEE_IOCTL_LOGIN_PUBLIC) {\ndrivers/tee/amdtee/core.c-225-\t\tpr_err(\"unsupported client login method\\n\");\n--\ndrivers/tee/optee/device.c=107=static int __optee_enumerate_devices(u32 func)\n--\ndrivers/tee/optee/device.c-127-\texport_uuid(sess_arg.uuid, \u0026pta_uuid);\ndrivers/tee/optee/device.c:128:\tsess_arg.clnt_login = TEE_IOCTL_LOGIN_PUBLIC;\ndrivers/tee/optee/device.c-129-\tsess_arg.num_params = 0;\n--\ndrivers/tee/optee/optee_msg.h-89- */\ndrivers/tee/optee/optee_msg.h:90:#define OPTEE_MSG_LOGIN_PUBLIC\t\t\t0x00000000\ndrivers/tee/optee/optee_msg.h-91-#define OPTEE_MSG_LOGIN_USER\t\t\t0x00000001\n--\ndrivers/tee/tee_core.c=167=int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method,\n--\ndrivers/tee/tee_core.c-175-\ndrivers/tee/tee_core.c:176:\tif (connection_method == TEE_IOCTL_LOGIN_PUBLIC ||\ndrivers/tee/tee_core.c-177-\t connection_method == TEE_IOCTL_LOGIN_REE_KERNEL) {\n--\ninclude/dt-bindings/clock/mpc512x-clock.h-74-\ninclude/dt-bindings/clock/mpc512x-clock.h:75:#define MPC512x_CLK_LAST_PUBLIC\t\t64\ninclude/dt-bindings/clock/mpc512x-clock.h-76-\n--\ninclude/linux/ceph/rados.h=384=enum {\n--\ninclude/linux/ceph/rados.h-396-\tCEPH_OSD_FLAG_EXEC = 0x0800, /* op may exec */\ninclude/linux/ceph/rados.h:397:\tCEPH_OSD_FLAG_EXEC_PUBLIC = 0x1000, /* DEPRECATED op may exec (public) */\ninclude/linux/ceph/rados.h-398-\tCEPH_OSD_FLAG_LOCALIZE_READS = 0x2000, /* read from nearby replica, if any */\n--\ninclude/linux/ieee80211.h=1843=enum ieee80211_category {\n--\ninclude/linux/ieee80211.h-1847-\tWLAN_CATEGORY_BACK = 3,\ninclude/linux/ieee80211.h:1848:\tWLAN_CATEGORY_PUBLIC = 4,\ninclude/linux/ieee80211.h-1849-\tWLAN_CATEGORY_RADIO_MEASUREMENT = 5,\n--\ninclude/linux/ieee80211.h=2401=static inline bool ieee80211_is_bufferable_mmpdu(struct sk_buff *skb)\n--\ninclude/linux/ieee80211.h-2423-\ninclude/linux/ieee80211.h:2424:\tif (mgmt-\u003eu.action.category != WLAN_CATEGORY_PUBLIC \u0026\u0026\ninclude/linux/ieee80211.h-2425-\t mgmt-\u003eu.action.category != WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION)\n--\ninclude/linux/ieee80211.h=2440=static inline bool _ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)\n--\ninclude/linux/ieee80211.h-2458-\t\tcategory = ((u8 *) hdr) + 24;\ninclude/linux/ieee80211.h:2459:\t\treturn *category != WLAN_CATEGORY_PUBLIC \u0026\u0026\ninclude/linux/ieee80211.h-2460-\t\t\t*category != WLAN_CATEGORY_HT \u0026\u0026\n--\ninclude/linux/ieee80211.h=2490=static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,\n--\ninclude/linux/ieee80211.h-2498-\t\treturn false;\ninclude/linux/ieee80211.h:2499:\treturn mgmt-\u003eu.action.category == WLAN_CATEGORY_PUBLIC;\ninclude/linux/ieee80211.h-2500-}\n--\ninclude/linux/tpm_command.h=215=enum tpm2_command_codes {\n--\ninclude/linux/tpm_command.h-231-\tTPM2_CC_FLUSH_CONTEXT\t\t= 0x0165,\ninclude/linux/tpm_command.h:232:\tTPM2_CC_READ_PUBLIC\t\t= 0x0173,\ninclude/linux/tpm_command.h-233-\tTPM2_CC_START_AUTH_SESS\t\t= 0x0176,\n--\ninclude/linux/tpm_command.h=425=struct tpm2_context {\n--\ninclude/linux/tpm_command.h-445- * A TPM name digest i.e., TPMT_HA, is a concatenation of TPM_ALG_ID of the\ninclude/linux/tpm_command.h:446: * name algorithm and hash of TPMT_PUBLIC.\ninclude/linux/tpm_command.h-447- */\n--\ninclude/net/bluetooth/bluetooth.h=344=typedef struct {\n--\ninclude/net/bluetooth/bluetooth.h-349-#define BDADDR_BREDR\t\t0x00\ninclude/net/bluetooth/bluetooth.h:350:#define BDADDR_LE_PUBLIC\t0x01\ninclude/net/bluetooth/bluetooth.h-351-#define BDADDR_LE_RANDOM\t0x02\n--\ninclude/net/bluetooth/bluetooth.h=353=static inline bool bdaddr_type_is_valid(u8 type)\n--\ninclude/net/bluetooth/bluetooth.h-356-\tcase BDADDR_BREDR:\ninclude/net/bluetooth/bluetooth.h:357:\tcase BDADDR_LE_PUBLIC:\ninclude/net/bluetooth/bluetooth.h-358-\tcase BDADDR_LE_RANDOM:\n--\ninclude/net/bluetooth/bluetooth.h=365=static inline bool bdaddr_type_is_le(u8 type)\n--\ninclude/net/bluetooth/bluetooth.h-367-\tswitch (type) {\ninclude/net/bluetooth/bluetooth.h:368:\tcase BDADDR_LE_PUBLIC:\ninclude/net/bluetooth/bluetooth.h-369-\tcase BDADDR_LE_RANDOM:\n--\ninclude/net/bluetooth/hci.h=2921=struct hci_ev_le_conn_complete {\n--\ninclude/net/bluetooth/hci.h-2958-\ninclude/net/bluetooth/hci.h:2959:#define ADDR_LE_DEV_PUBLIC\t\t0x00\ninclude/net/bluetooth/hci.h-2960-#define ADDR_LE_DEV_RANDOM\t\t0x01\n--\ninclude/net/bluetooth/hci_core.h=2286=static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)\ninclude/net/bluetooth/hci_core.h-2287-{\ninclude/net/bluetooth/hci_core.h:2288:\tif (addr_type == ADDR_LE_DEV_PUBLIC)\ninclude/net/bluetooth/hci_core.h-2289-\t\treturn true;\n--\ninclude/net/bluetooth/hci_core.h=2407=void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);\n--\ninclude/net/bluetooth/hci_core.h-2410-#define DISCOV_TYPE_BREDR\t\t(BIT(BDADDR_BREDR))\ninclude/net/bluetooth/hci_core.h:2411:#define DISCOV_TYPE_LE\t\t\t(BIT(BDADDR_LE_PUBLIC) | \\\ninclude/net/bluetooth/hci_core.h-2412-\t\t\t\t\t BIT(BDADDR_LE_RANDOM))\ninclude/net/bluetooth/hci_core.h-2413-#define DISCOV_TYPE_INTERLEAVED\t\t(BIT(BDADDR_BREDR) | \\\ninclude/net/bluetooth/hci_core.h:2414:\t\t\t\t\t BIT(BDADDR_LE_PUBLIC) | \\\ninclude/net/bluetooth/hci_core.h-2415-\t\t\t\t\t BIT(BDADDR_LE_RANDOM))\n--\ninclude/net/ip6_route.h=15=struct route_info {\n--\ninclude/net/ip6_route.h-35-#define RT6_LOOKUP_F_SRCPREF_TMP\t0x00000008\ninclude/net/ip6_route.h:36:#define RT6_LOOKUP_F_SRCPREF_PUBLIC\t0x00000010\ninclude/net/ip6_route.h-37-#define RT6_LOOKUP_F_SRCPREF_COA\t0x00000020\n--\ninclude/net/ip6_route.h-49- *\tIPV6_PREFER_SRC_TMP = 0x1\ninclude/net/ip6_route.h:50: *\tIPV6_PREFER_SRC_PUBLIC = 0x2\ninclude/net/ip6_route.h-51- *\tIPV6_PREFER_SRC_COA = 0x4\n--\ninclude/net/ipv6.h=1250=static inline void ip6_sock_set_recverr(struct sock *sk)\n--\ninclude/net/ipv6.h-1254-\ninclude/net/ipv6.h:1255:#define IPV6_PREFER_SRC_MASK (IPV6_PREFER_SRC_TMP | IPV6_PREFER_SRC_PUBLIC | \\\ninclude/net/ipv6.h-1256-\t\t\t IPV6_PREFER_SRC_COA)\n--\ninclude/net/ipv6.h=1258=static inline int ip6_sock_set_addr_preferences(struct sock *sk, int val)\n--\ninclude/net/ipv6.h-1263-\t/* check PUBLIC/TMP/PUBTMP_DEFAULT conflicts */\ninclude/net/ipv6.h:1264:\tswitch (val \u0026 (IPV6_PREFER_SRC_PUBLIC |\ninclude/net/ipv6.h-1265-\t\t IPV6_PREFER_SRC_TMP |\ninclude/net/ipv6.h-1266-\t\t IPV6_PREFER_SRC_PUBTMP_DEFAULT)) {\ninclude/net/ipv6.h:1267:\tcase IPV6_PREFER_SRC_PUBLIC:\ninclude/net/ipv6.h:1268:\t\tpref |= IPV6_PREFER_SRC_PUBLIC;\ninclude/net/ipv6.h:1269:\t\tprefmask \u0026= ~(IPV6_PREFER_SRC_PUBLIC |\ninclude/net/ipv6.h-1270-\t\t\t IPV6_PREFER_SRC_TMP);\n--\ninclude/net/ipv6.h-1273-\t\tpref |= IPV6_PREFER_SRC_TMP;\ninclude/net/ipv6.h:1274:\t\tprefmask \u0026= ~(IPV6_PREFER_SRC_PUBLIC |\ninclude/net/ipv6.h-1275-\t\t\t IPV6_PREFER_SRC_TMP);\n--\ninclude/net/ipv6.h-1277-\tcase IPV6_PREFER_SRC_PUBTMP_DEFAULT:\ninclude/net/ipv6.h:1278:\t\tprefmask \u0026= ~(IPV6_PREFER_SRC_PUBLIC |\ninclude/net/ipv6.h-1279-\t\t\t IPV6_PREFER_SRC_TMP);\n--\ninclude/uapi/linux/in6.h=71=struct in6_flowlabel_req {\n--\ninclude/uapi/linux/in6.h-276-#define IPV6_PREFER_SRC_TMP\t\t0x0001\ninclude/uapi/linux/in6.h:277:#define IPV6_PREFER_SRC_PUBLIC\t\t0x0002\ninclude/uapi/linux/in6.h-278-#define IPV6_PREFER_SRC_PUBTMP_DEFAULT\t0x0100\n--\ninclude/uapi/linux/kfd_ioctl.h=408=struct kfd_ioctl_acquire_vm_args {\n--\ninclude/uapi/linux/kfd_ioctl.h-421-#define KFD_IOC_ALLOC_MEM_FLAGS_EXECUTABLE\t(1 \u003c\u003c 30)\ninclude/uapi/linux/kfd_ioctl.h:422:#define KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC\t\t(1 \u003c\u003c 29)\ninclude/uapi/linux/kfd_ioctl.h-423-#define KFD_IOC_ALLOC_MEM_FLAGS_NO_SUBSTITUTE\t(1 \u003c\u003c 28)\n--\ninclude/uapi/linux/kfd_sysfs.h-80-#define HSA_MEM_HEAP_TYPE_SYSTEM\t0\ninclude/uapi/linux/kfd_sysfs.h:81:#define HSA_MEM_HEAP_TYPE_FB_PUBLIC\t1\ninclude/uapi/linux/kfd_sysfs.h-82-#define HSA_MEM_HEAP_TYPE_FB_PRIVATE\t2\n--\ninclude/uapi/linux/tee.h=132=struct tee_ioctl_buf_data {\n--\ninclude/uapi/linux/tee.h-186- */\ninclude/uapi/linux/tee.h:187:#define TEE_IOCTL_LOGIN_PUBLIC\t\t\t0\ninclude/uapi/linux/tee.h-188-#define TEE_IOCTL_LOGIN_USER\t\t\t1\n--\ninclude/uapi/linux/virtio_crypto.h=217=struct virtio_crypto_akcipher_session_para {\n--\ninclude/uapi/linux/virtio_crypto.h-223-\ninclude/uapi/linux/virtio_crypto.h:224:#define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC 1\ninclude/uapi/linux/virtio_crypto.h-225-#define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PRIVATE 2\n--\nmm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1930-\tif (!list_empty(\u0026source)) {\nmm/memory_hotplug.c:1931:\t\tnodemask_t nmask = node_states[N_MEMORY_PUBLIC];\nmm/memory_hotplug.c-1932-\t\tstruct migration_target_control mtc = {\n--\nnet/bluetooth/6lowpan.c=931=static struct l2cap_chan *bt_6lowpan_listen(void)\n--\nnet/bluetooth/6lowpan.c-945-\tchan-\u003estate = BT_LISTEN;\nnet/bluetooth/6lowpan.c:946:\tchan-\u003esrc_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/6lowpan.c-947-\n--\nnet/bluetooth/6lowpan.c=962=static int get_l2cap_conn(char *buf, bdaddr_t *addr, u8 *addr_type,\n--\nnet/bluetooth/6lowpan.c-986-\tswitch (*addr_type) {\nnet/bluetooth/6lowpan.c:987:\tcase BDADDR_LE_PUBLIC:\nnet/bluetooth/6lowpan.c:988:\t\tle_addr_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/6lowpan.c-989-\t\tbreak;\n--\nnet/bluetooth/6lowpan.c-996-\nnet/bluetooth/6lowpan.c:997:\t/* The LE_PUBLIC address type is ignored because of BDADDR_ANY */\nnet/bluetooth/6lowpan.c:998:\thdev = hci_get_route(addr, BDADDR_ANY, BDADDR_LE_PUBLIC);\nnet/bluetooth/6lowpan.c-999-\tif (!hdev)\n--\nnet/bluetooth/hci_conn.c=1324=struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)\n--\nnet/bluetooth/hci_conn.c-1359-\t\t\t\t/* Convert from HCI to three-value type */\nnet/bluetooth/hci_conn.c:1360:\t\t\t\tif (id_addr_type == ADDR_LE_DEV_PUBLIC)\nnet/bluetooth/hci_conn.c:1361:\t\t\t\t\tid_addr_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/hci_conn.c-1362-\t\t\t\telse\n--\nnet/bluetooth/hci_core.c=1388=bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)\n--\nnet/bluetooth/hci_core.c-1400-\t/* Convert to HCI addr type which struct smp_ltk uses */\nnet/bluetooth/hci_core.c:1401:\tif (type == BDADDR_LE_PUBLIC)\nnet/bluetooth/hci_core.c:1402:\t\taddr_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/hci_core.c-1403-\telse\n--\nnet/bluetooth/hci_core.c=2341=void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,\n--\nnet/bluetooth/hci_core.c-2351-\t\tbacpy(bdaddr, \u0026hdev-\u003ebdaddr);\nnet/bluetooth/hci_core.c:2352:\t\t*bdaddr_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/hci_core.c-2353-\t}\n--\nnet/bluetooth/hci_event.c=2819=static u8 ev_bdaddr_type(struct hci_dev *hdev, u8 type, bool *resolved)\n--\nnet/bluetooth/hci_event.c-2828-\t\t\t*resolved = true;\nnet/bluetooth/hci_event.c:2829:\t\treturn ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/hci_event.c-2830-\tcase ADDR_LE_DEV_RANDOM_RESOLVED:\n--\nnet/bluetooth/hci_event.c=5751=static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,\n--\nnet/bluetooth/hci_event.c-5863-\nnet/bluetooth/hci_event.c:5864:\tif (conn-\u003edst_type == ADDR_LE_DEV_PUBLIC)\nnet/bluetooth/hci_event.c:5865:\t\taddr_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/hci_event.c-5866-\telse\n--\nnet/bluetooth/hci_sync.c=1063=int hci_update_random_address_sync(struct hci_dev *hdev, bool require_privacy,\n--\nnet/bluetooth/hci_sync.c-1147-\t */\nnet/bluetooth/hci_sync.c:1148:\t*own_addr_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/hci_sync.c-1149-\n--\nnet/bluetooth/hci_sync.c=6227=static int hci_active_scan_sync(struct hci_dev *hdev, uint16_t interval)\n--\nnet/bluetooth/hci_sync.c-6263-\tif (err \u003c 0)\nnet/bluetooth/hci_sync.c:6264:\t\town_addr_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/hci_sync.c-6265-\n--\nnet/bluetooth/iso.c=380=static inline u8 le_addr_type(u8 bdaddr_type)\nnet/bluetooth/iso.c-381-{\nnet/bluetooth/iso.c:382:\tif (bdaddr_type == BDADDR_LE_PUBLIC)\nnet/bluetooth/iso.c:383:\t\treturn ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/iso.c-384-\telse\n--\nnet/bluetooth/iso.c=1001=static struct sock *iso_sock_alloc(struct net *net, struct socket *sock,\n--\nnet/bluetooth/iso.c-1013-\t/* Set address type as public as default src address is BDADDR_ANY */\nnet/bluetooth/iso.c:1014:\tiso_pi(sk)-\u003esrc_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/iso.c-1015-\n--\nnet/bluetooth/iso.c=2173=static void iso_conn_ready(struct iso_conn *conn)\n--\nnet/bluetooth/iso.c-2299-\t\t/* Convert from HCI to three-value type */\nnet/bluetooth/iso.c:2300:\t\tif (hcon-\u003esrc_type == ADDR_LE_DEV_PUBLIC)\nnet/bluetooth/iso.c:2301:\t\t\tiso_pi(sk)-\u003esrc_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/iso.c-2302-\t\telse\n--\nnet/bluetooth/iso.c-2327-\t\t/* Convert from HCI to three-value type */\nnet/bluetooth/iso.c:2328:\t\tif (hcon-\u003edst_type == ADDR_LE_DEV_PUBLIC)\nnet/bluetooth/iso.c:2329:\t\t\tiso_pi(sk)-\u003edst_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/iso.c-2330-\t\telse\n--\nnet/bluetooth/l2cap_core.c=63=static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)\n--\nnet/bluetooth/l2cap_core.c-65-\tif (link_type == LE_LINK) {\nnet/bluetooth/l2cap_core.c:66:\t\tif (bdaddr_type == ADDR_LE_DEV_PUBLIC)\nnet/bluetooth/l2cap_core.c:67:\t\t\treturn BDADDR_LE_PUBLIC;\nnet/bluetooth/l2cap_core.c-68-\t\telse\n--\nnet/bluetooth/l2cap_core.c=7266=int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,\n--\nnet/bluetooth/l2cap_core.c-7352-\t\t */\nnet/bluetooth/l2cap_core.c:7353:\t\tif (dst_type == BDADDR_LE_PUBLIC)\nnet/bluetooth/l2cap_core.c:7354:\t\t\tdst_type = ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/l2cap_core.c-7355-\t\telse\n--\nnet/bluetooth/l2cap_sock.c=180=static int l2cap_sock_connect(struct socket *sock, struct sockaddr_unsized *addr,\n--\nnet/bluetooth/l2cap_sock.c-234-\t\t */\nnet/bluetooth/l2cap_sock.c:235:\t\tchan-\u003esrc_type = BDADDR_LE_PUBLIC;\nnet/bluetooth/l2cap_sock.c-236-\t}\n--\nnet/bluetooth/mgmt.c=347=static u8 le_addr_type(u8 mgmt_addr_type)\nnet/bluetooth/mgmt.c-348-{\nnet/bluetooth/mgmt.c:349:\tif (mgmt_addr_type == BDADDR_LE_PUBLIC)\nnet/bluetooth/mgmt.c:350:\t\treturn ADDR_LE_DEV_PUBLIC;\nnet/bluetooth/mgmt.c-351-\telse\n--\nnet/bluetooth/mgmt.c=3367=static u8 link_to_bdaddr(u8 link_type, u8 addr_type)\n--\nnet/bluetooth/mgmt.c-3374-\t\tswitch (addr_type) {\nnet/bluetooth/mgmt.c:3375:\t\tcase ADDR_LE_DEV_PUBLIC:\nnet/bluetooth/mgmt.c:3376:\t\t\treturn BDADDR_LE_PUBLIC;\nnet/bluetooth/mgmt.c-3377-\n--\nnet/bluetooth/mgmt.c=3864=static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,\n--\nnet/bluetooth/mgmt.c-3893-\nnet/bluetooth/mgmt.c:3894:\tif (addr-\u003etype == BDADDR_LE_PUBLIC || addr-\u003etype == BDADDR_LE_RANDOM) {\nnet/bluetooth/mgmt.c-3895-\t\tlockdep_assert_held(\u0026conn-\u003ehdev-\u003elock);\n--\nnet/bluetooth/mgmt.c=7254=static bool irk_is_valid(struct mgmt_irk_info *irk)\n\n"
} |
| 58/2 | 2026/09/14 08:03 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 50036 output: 17 thoughts: 3116 Thoughts: **Analysis of Code Reachability and Fuzzing Worthiness** Okay, here's the breakdown of my thought process. First, the immediate red flag: `N_MEMORY_PUBLIC` is undefined. It doesn't exist in the codebase. That's a compiler error, plain and simple. Let's verify this, no need to overthink, it does not exist. I've got to check git history, but that's not directly available right now. However, I can cross-reference the commit information provided. The diff clearly shows the change, and the comment reinforces that `N_MEMORY_PUBLIC` is being used, so this is very likely a deliberate, but flawed, change. This is the key. The code modification is in `mm/memory_hotplug.c` within `do_migrate_range()`, changing `N_MEMORY` to `N_MEMORY_PUBLIC`. This leads to a definite compile-time error when `CONFIG_MEMORY_HOTPLUG` is enabled. If `CONFIG_MEMORY_HOTPLUG` isn't enabled, the code simply isn't compiled. So, in either case, the code cannot execute. Now, I need to make a judgment call: is this structurally unreachable? The instructions highlight *reachability* as the primary factor. If the code can't even compile, it is, by definition, unreachable. I'm going to look at the prompt instructions carefully. I am re-reading the triage instructions. The most crucial part is this: the goal of patch fuzzing is to find crashes and bugs in code that is executable in standard virtualized environments. If the code is not executable then we will not fuzz it. I'm focused on Section 2: "WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)." I'm carefully reading the criteria for *not* fuzzing, to see if compilation failures are covered. The text says "Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories". The sections are: * Non-kernel and non-executable changes * Structurally unreachable hardware * Unreachable execution paths Compilation failure isn't explicitly listed. This is a point of concern: the instructions explicitly talk about *unreachable* code, and uncompilable code is definitely unreachable. However, Section 3 includes *memory management* modifications as a reason to return `WorthFuzzing=true`. Therefore, the instructions are pointing me to *explicitly* avoid anything that is not executable. And this is not executable. The code cannot execute because the code will not compile. The key phrasing is "strictly into one or more of these categories". It also says *all* modified code must fit. And in this case, all modified code fails. Also, section 1 is explicit: code that is structurally unreachable is not to be fuzzed. And this code is structurally unreachable because it does not compile. Therefore, because this code *cannot* execute under any circumstances due to the compilation error, I'm going with `WorthFuzzing=false`. |
| 59/2 | 2026/09/14 08:04 | tool | grepper |
0mArgs:{
"Expression": "offline_pages"
}Results: {
"Output": "arch/arm64/mm/mmu.c=2125=static bool can_unmap_without_split(unsigned long pfn, unsigned long nr_pages)\n--\narch/arm64/mm/mmu.c-2155- * inadvertently removed as it blocks pfn range offlining process in\narch/arm64/mm/mmu.c:2156: * __offline_pages(). Hence this prevents both offlining as well as\narch/arm64/mm/mmu.c-2157- * removal process for boot memory which is initially always online.\n--\ndrivers/base/memory.c=289=static int memory_block_offline(struct memory_block *mem)\n--\ndrivers/base/memory.c-300-\t * Unaccount before offlining, such that unpopulated zone and kthreads\ndrivers/base/memory.c:301:\t * can properly be torn down in offline_pages().\ndrivers/base/memory.c-302-\t */\n--\ndrivers/base/memory.c-310-\ndrivers/base/memory.c:311:\tret = offline_pages(start_pfn + nr_vmemmap_pages,\ndrivers/base/memory.c-312-\t\t\t nr_pages - nr_vmemmap_pages, mem-\u003ezone, mem-\u003egroup);\ndrivers/base/memory.c-313-\tif (ret) {\ndrivers/base/memory.c:314:\t\t/* offline_pages() failed. Account back. */\ndrivers/base/memory.c-315-\t\tif (nr_vmemmap_pages)\n--\ninclude/linux/memory_hotplug.h=265=extern void try_offline_node(int nid);\ninclude/linux/memory_hotplug.h:266:extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\ninclude/linux/memory_hotplug.h-267-\t\t\t struct zone *zone, struct memory_group *group);\n--\ninclude/linux/memory_hotplug.h=275=static inline void try_offline_node(int nid) {}\ninclude/linux/memory_hotplug.h-276-\ninclude/linux/memory_hotplug.h:277:static inline int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\ninclude/linux/memory_hotplug.h-278-\t\t\t\tstruct zone *zone, struct memory_group *group)\n--\nmm/memory_hotplug.c=543=void remove_pfn_range_from_zone(struct zone *zone,\n--\nmm/memory_hotplug.c-588- * sure that pages are marked reserved and zones are adjust properly by\nmm/memory_hotplug.c:589: * calling offline_pages().\nmm/memory_hotplug.c-590- */\n--\nmm/memory_hotplug.c=1976=static int count_system_ram_pages_cb(unsigned long start_pfn,\n--\nmm/memory_hotplug.c-1987- */\nmm/memory_hotplug.c:1988:int offline_pages(unsigned long start_pfn, unsigned long nr_pages,\nmm/memory_hotplug.c-1989-\t\t\tstruct zone *zone, struct memory_group *group)\n--\nmm/mm_init.c=1524=int __ref free_area_init_core_hotplug(struct pglist_data *pgdat)\n--\nmm/mm_init.c-1568-\t * clear all zones' present_pages and managed_pages because they will\nmm/mm_init.c:1569:\t * be updated in online_pages() and offline_pages().\nmm/mm_init.c-1570-\t */\n"
} |
| 60/2 | 2026/09/14 08:04 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 54765 output: 35 thoughts: 71 Thoughts: Here's my thought process, as it stands: **Tracing the Call Chain of `offline_pages()`** Okay, so I see that `offline_pages()` is exclusively called from `drivers/base/memory.c`, specifically within the function `memory_block_offline()`. That's a good starting point. Now, to understand the context, I need to figure out how `memory_block_offline()` itself is initiated. Based on the code, `memory_block_offline()` is called from `memory_block_action()`. Now I have to go to `drivers/base/memory.c` to see how `memory_block_action()` is triggered. Let's dig in and figure out how this function fits into the bigger picture. |
| 61/2 | 2026/09/14 08:04 | tool | read-file |
0mArgs:{
"File": "drivers/base/memory.c",
"FirstLine": 360,
"LineCount": 45
}Results: {
"Contents": " 360:\t\tif (mem-\u003estate != from_state_req)\n 361:\t\t\treturn -EINVAL;\n 362:\t\n 363:\t\tif (to_state == MEM_OFFLINE)\n 364:\t\t\tmem-\u003estate = MEM_GOING_OFFLINE;\n 365:\t\n 366:\t\tret = memory_block_action(mem, to_state);\n 367:\t\tmem-\u003estate = ret ? from_state_req : to_state;\n 368:\t\n 369:\t\treturn ret;\n 370:\t}\n 371:\t\n 372:\t/* The device lock serializes operations on memory_subsys_[online|offline] */\n 373:\tstatic int memory_subsys_online(struct device *dev)\n 374:\t{\n 375:\t\tstruct memory_block *mem = to_memory_block(dev);\n 376:\t\tint ret;\n 377:\t\n 378:\t\tif (mem-\u003estate == MEM_ONLINE)\n 379:\t\t\treturn 0;\n 380:\t\n 381:\t\t/*\n 382:\t\t * When called via device_online() without configuring the online_type,\n 383:\t\t * we want to default to MMOP_ONLINE.\n 384:\t\t */\n 385:\t\tif (mem-\u003eonline_type == MMOP_OFFLINE)\n 386:\t\t\tmem-\u003eonline_type = MMOP_ONLINE;\n 387:\t\n 388:\t\tret = memory_block_change_state(mem, MEM_ONLINE, MEM_OFFLINE);\n 389:\t\tmem-\u003eonline_type = MMOP_OFFLINE;\n 390:\t\n 391:\t\treturn ret;\n 392:\t}\n 393:\t\n 394:\tstatic int memory_subsys_offline(struct device *dev)\n 395:\t{\n 396:\t\tstruct memory_block *mem = to_memory_block(dev);\n 397:\t\n 398:\t\tif (mem-\u003estate == MEM_OFFLINE)\n 399:\t\t\treturn 0;\n 400:\t\n 401:\t\treturn memory_block_change_state(mem, MEM_OFFLINE, MEM_ONLINE);\n 402:\t}\n 403:\t\n 404:\tstatic ssize_t state_store(struct device *dev, struct device_attribute *attr,\n"
} |
| 62/2 | 2026/09/14 08:04 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 55675 output: 35 thoughts: 45 Thoughts: Here's my take on those lines of code, focusing on my expertise: **Diving into `state_store` in `drivers/base/memory.c`** Okay, so I'm looking at `state_store` within `drivers/base/memory.c`, specifically lines 404 to 460. Immediately, I'm thinking this is probably related to the power management aspect of memory devices, which is a common area for subtle bugs and performance bottlenecks. Given the function's name and location, my first assumption is this is handling the persistence or setting of some sort of memory device state, perhaps related to low-power modes or configuration registers. I’m expecting to see logic that deals with writing to device registers. I'm hoping to see a solid check to ensure any incoming state is valid, avoiding a potential corruption issue that could lead to crashes. I'll be looking to see how they handle error conditions; are they returning appropriate error codes to the calling layer, and are they logging enough information in case of a problem? Are they properly synchronizing this operation with other threads/processes that might be accessing the same memory region? This can get tricky, especially if interrupts are involved. If they're using spinlocks or mutexes, I want to make sure they're doing it correctly to prevent deadlocks or starvation. I'll also be searching for potential race conditions. Is there a clear separation between the *request* to change state and the *actual* change? Proper use of atomics is a must. I'll be paying close attention to any uses of `dev_attr_store` or similar helper functions. These are usually conveniences, but I'll want to see how they're used to see if they are doing everything correctly. Essentially, I'm expecting this to be a crucial piece of the power management puzzle for memory devices, and I'll be looking for solid error handling, robust synchronization, and clear state management. Hopefully, this section is well-written and maintainable. Let's see what they've done... |
| 63/2 | 2026/09/14 08:04 | tool | read-file |
0mArgs:{
"File": "drivers/base/memory.c",
"FirstLine": 404,
"LineCount": 50
}Results: {
"Contents": " 404:\tstatic ssize_t state_store(struct device *dev, struct device_attribute *attr,\n 405:\t\t\t\t const char *buf, size_t count)\n 406:\t{\n 407:\t\tconst int online_type = mhp_online_type_from_str(buf);\n 408:\t\tstruct memory_block *mem = to_memory_block(dev);\n 409:\t\tint ret;\n 410:\t\n 411:\t\tif (online_type \u003c 0)\n 412:\t\t\treturn -EINVAL;\n 413:\t\n 414:\t\tret = lock_device_hotplug_sysfs();\n 415:\t\tif (ret)\n 416:\t\t\treturn ret;\n 417:\t\n 418:\t\tswitch (online_type) {\n 419:\t\tcase MMOP_ONLINE_KERNEL:\n 420:\t\tcase MMOP_ONLINE_MOVABLE:\n 421:\t\tcase MMOP_ONLINE:\n 422:\t\t\t/* mem-\u003eonline_type is protected by device_hotplug_lock */\n 423:\t\t\tmem-\u003eonline_type = online_type;\n 424:\t\t\tret = device_online(\u0026mem-\u003edev);\n 425:\t\t\tbreak;\n 426:\t\tcase MMOP_OFFLINE:\n 427:\t\t\tret = device_offline(\u0026mem-\u003edev);\n 428:\t\t\tbreak;\n 429:\t\tdefault:\n 430:\t\t\tret = -EINVAL; /* should never happen */\n 431:\t\t}\n 432:\t\n 433:\t\tunlock_device_hotplug();\n 434:\t\n 435:\t\tif (ret \u003c 0)\n 436:\t\t\treturn ret;\n 437:\t\tif (ret)\n 438:\t\t\treturn -EINVAL;\n 439:\t\n 440:\t\treturn count;\n 441:\t}\n 442:\t\n 443:\t/*\n 444:\t * Legacy interface that we cannot remove: s390x exposes the storage increment\n 445:\t * covered by a memory block, allowing for identifying which memory blocks\n 446:\t * comprise a storage increment. Since a memory block spans complete\n 447:\t * storage increments nowadays, this interface is basically unused. Other\n 448:\t * archs never exposed != 0.\n 449:\t */\n 450:\tstatic ssize_t phys_device_show(struct device *dev,\n 451:\t\t\t\t\tstruct device_attribute *attr, char *buf)\n 452:\t{\n 453:\t\tstruct memory_block *mem = to_memory_block(dev);\n"
} |
| 64/2 | 2026/09/14 08:04 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 56896 output: 33 thoughts: 801 Thoughts: **Analyzing Potential Fuzzing Worthiness** Okay, let's break this down. First, I'm reviewing Section 2 of the instructions. Specifically, the "Unreachable execution paths" section. It highlights that driver teardown callbacks like `.remove`, `.shutdown`, and `pci_unregister_driver` are *only* executed during physical PCI hot-unplug or manual sysfs driver unbinding. This is important to understand when determining if a code change is worth fuzzing. Now, wait a minute... what about `state_store`? I'm thinking about how `state_store` is writing `offline` to `/sys/devices/system/memory/memoryX/state`. This raises a red flag. Does syzkaller actually use sysfs to perform memory offlining? If so, this could be a point of interest. Section 2 also defines when to return `WorthFuzzing=false`. It lists conditions like non-kernel changes, unreachable hardware (specific PCIe devices), and those unreachable execution paths mentioned above. Then, there's Section 3, which is the opposite side of the coin - when to return `WorthFuzzing=true`. This focuses on "reachable executable code," including core subsystems (memory management, locking, BPF, scheduler, networking, VFS, syscalls) and refactorings that affect data structures or algorithm flows. This all leads me to `mm/memory_hotplug.c` and why it has `N_MEMORY_PUBLIC`. This could be significant. I need to understand the history of this part of the code. How can I get that information? I need to search the git commits or commit log to see what the context is. I'm trying to figure out if there's a git command in grepper. But, no, grepper is just running git grep, which isn't the same. This tool can't search syzkaller syzlang descriptions. It runs `git grep` with specific flags: `--extended-regexp`, `--line-number`, `--show-function`, and `-C1`. It only searches the files in the repository. So, how can I find commit information? I need to see what's in the repository at HEAD. Is there a `git status`-like command? No. My tools are limited to grepper, read-file, codesearch-dir-index, and set-results. I can't execute commands. So, how do I get this data? Can I read any files that might contain commit information? Maybe a file in the `.git` directory? I'll test if `read-file` can access `.git/COMMIT_EDITMSG` or `.git/HEAD`. That's where I need to start. |
| 65/2 | 2026/09/14 08:05 | tool | read-file |
0mArgs:{
"File": ".git/COMMIT_EDITMSG",
"FirstLine": 1,
"LineCount": 50
}Results: {
"Contents": " 1:\tsyz-cluster: applied patch under review\n"
} |
| 66/2 | 2026/09/14 08:05 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 58342 output: 32 thoughts: 11 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Diving into the Git Logs** Okay, so I'm thinking, "Where's the history, the real nitty-gritty detail?" Naturally, my mind goes straight to the *`.git/logs/HEAD`* file. Not just the standard `git log` output, which is generally helpful, but sometimes limited; I want the raw, unadulterated truth. I need to get down into the commit graph and traverse it directly. I'm curious about the specific reflog entries, the actual data about *exactly* how the HEAD pointer has moved over time. What are all the commits that have been pointed at by the reflog, and how were they accessed? Going through the HEAD reflog file is the first step when I'm chasing down some gnarly git issues, figuring out a lost commit, or trying to understand *precisely* what someone did and when. Let's see what that file reveals. |
| 67/2 | 2026/09/14 08:05 | tool | read-file |
0mArgs:{
"File": ".git/logs/HEAD",
"FirstLine": 1,
"LineCount": 50
}Results: {
"Contents": " 1:\t0000000000000000000000000000000000000000 383fc05d4650b021f3c17e36a145106dcc61a294 syzkaller \u003csyzkaller@series-workflowq6cw6-triage-action-2437738502.(none)\u003e 1789372646 +0000\treset: moving to 383fc05d4650b021f3c17e36a145106dcc61a294\n 2:\t383fc05d4650b021f3c17e36a145106dcc61a294 383fc05d4650b021f3c17e36a145106dcc61a294 syzkaller \u003csyzkaller@series-workflowq6cw6-triage-action-2437738502.(none)\u003e 1789372649 +0000\treset: moving to HEAD\n 3:\t383fc05d4650b021f3c17e36a145106dcc61a294 383fc05d4650b021f3c17e36a145106dcc61a294 syzkaller \u003csyzkaller@series-workflowq6cw6-triage-action-2437738502.(none)\u003e 1789372651 +0000\treset: moving to HEAD\n 4:\t383fc05d4650b021f3c17e36a145106dcc61a294 383fc05d4650b021f3c17e36a145106dcc61a294 syzkaller \u003csyzkaller@series-workflowq6cw6-triage-action-2437738502.(none)\u003e 1789372653 +0000\treset: moving to 383fc05d4650b021f3c17e36a145106dcc61a294\n 5:\t383fc05d4650b021f3c17e36a145106dcc61a294 747c46842896f4c9e3cbc94c90b6ba49c660ad93 syz-cluster \u003ctriage@syzkaller.com\u003e 1789372657 +0000\tcommit: syz-cluster: applied patch under review\n"
} |
| 68/2 | 2026/09/14 08:05 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 59367 output: 20 thoughts: 27 Thoughts: Okay, here's my interpretation of those thoughts, summarized from a professional perspective: **Investigating Potential Code Modifications** Right, let's get down to it. I need to figure out if there's an undocumented change lurking somewhere. The most likely candidates for recent modifications are the established standard options. I'll need to rapidly determine if there's a patch or a mail file floating around that may point to code updates. I'll start with the obvious places: I'll immediately check the root directory's index and, for any temporary files, I'll need to check `/tmp`. Failing that, I will immediately check the `.git` directory – that's where the real history lies, and where I'm likely to find evidence of uncommitted or staged changes. My goal is to quickly pinpoint any potential modifications that could impact the codebase. I need to be thorough and efficient in my search. |
| 69/2 | 2026/09/14 08:05 | tool | codesearch-dir-index |
0mArgs:{
"Dir": ".git"
}Results: {
"Files": null,
"Subdirs": [
"hooks",
"info",
"logs",
"objects",
"refs"
]
} |
| 70/2 | 2026/09/14 08:05 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 59639 output: 27 thoughts: 107 Thoughts: **Investigating the Commit History** Okay, so I need to figure out the context of this commit. First, I'll quickly check the usual suspects under the `.git` directory for any active rebasing information or clues. Nah, nothing useful there. Just the standard hooks, info, logs, objects, and refs. Alright, the next logical step is to examine the parent commit, `383fc05d4650b021f3c17e36a145106dcc61a294`. Wait a minute, what's that equivalent commit ID in the upstream Linux kernel? I need to cross-reference that. I'll have to jump out of this repo and check upstream. Before I do that I need to quickly grab the Makefile version from the root. |
| 71/2 | 2026/09/14 08:05 | tool | read-file |
0mArgs:{
"File": "Makefile",
"FirstLine": 1,
"LineCount": 20
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0\n 2:\tVERSION = 7\n 3:\tPATCHLEVEL = 3\n 4:\tSUBLEVEL = 0\n 5:\tEXTRAVERSION = -rc1\n 6:\tNAME = Baby Opossum Posse\n 7:\t\n 8:\t# *DOCUMENTATION*\n 9:\t# To see a list of typical targets execute \"make help\"\n 10:\t# More info can be located in ./README\n 11:\t# Comments in this file are targeted only to the developer, do not\n 12:\t# expect to learn how to build the kernel reading this file.\n 13:\t\n 14:\tifeq ($(filter output-sync,$(.FEATURES)),)\n 15:\t$(error GNU Make \u003e= 4.0 is required. Your Make version is $(MAKE_VERSION))\n 16:\tendif\n 17:\t\n 18:\t$(if $(filter __%, $(MAKECMDGOALS)), \\\n 19:\t\t$(error targets prefixed with '__' are only for internal use))\n 20:\t\n"
} |
| 72/2 | 2026/09/14 08:05 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 60230 output: 21 thoughts: 1756 Thoughts: **Triage Dilemma: A Patch that Doesn't Compile** Okay, so I'm looking at kernel version 7.3.0-rc1 and immediately hit a snag. The code references `N_MEMORY_PUBLIC`, and that's the first red flag. Why is this identifier popping up? Is this some nascent CXL development, perhaps related to confidential computing or a public/private memory split? Or is it a simple typo? My initial thought is that someone's got a patch that introduces `N_MEMORY_PUBLIC`, replacing the existing `N_MEMORY`, but it's clearly for a custom tree. And if they just sent that patch series off to the mailing list without resolving the dependencies: syzkaller/syzbot is going to try and apply this on mainline (or whatever tree it is working on)! If it does that, it will **fail to compile**, because `N_MEMORY_PUBLIC` isn't defined. Can syzkaller fuzz a kernel that fails to compile? Nope. That's a non-starter. But what is syzkaller's triage process for these types of failures? Does it even evaluate whether a patch should be fuzzed if it doesn't compile? I've got to revisit the fuzzing documentation to ensure I understand the logic. Reading the instructions carefully, the core goal is to find crashes, regressions, exposed bugs, and new assertions introduced by the patch. They emphasize *reachability* as the primary gate. If code can't execute, it MUST NOT be fuzzed. They also warn against taking "no functional change" or "refactoring" claims at face value. Any modification of reachable code, including refactorings, assertions, and core subsystems, demands fuzzing. Section 2 provides the "negative criteria"—when to return `WorthFuzzing=false`. It's pretty specific: non-kernel changes, unreachable hardware, or unreachable execution paths. But does a compilation error fall into one of those? The text says fuzzing should only be skipped if ALL the modified code falls into one of those categories! The key is that the patch *doesn't* produce a compiled kernel image. However, the code modification is in `mm/memory_hotplug.c` and is potentially part of core memory management. So, here's my dilemma: * **Possibility A:** Is this a deliberately broken patch, designed to test if the AI notices a compilation error, and therefore structurally unreachable. It is *designed* not to compile. * **Possibility B:** Is this an actual patch, possibly from a real mailing list or commit, that's being tested. Could it be a legitimate patch that simply has dependencies not met in this test environment? To investigate, I need to check the git history. Let's see if `N_MEMORY_PUBLIC` is mentioned in any commits. Maybe it's a real patch. I have to check the `.git/logs/HEAD` file to get the previous commit. Now to check what that commit is: `383fc05d4650b021f3c17e36a145106dcc61a294`. Let's search the `.git/objects` to see where we can find this commit. |
| 73/2 | 2026/09/14 08:06 | tool | grepper |
0mError:no matches Args: {
"Expression": "383fc05d"
}Results: {
"error": "no matches"
} |
| 74/2 | 2026/09/14 08:06 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 62727 output: 16 thoughts: 816 Thoughts: **Diving into Node State Changes** Okay, first things first, I need to understand this `nodemask_t` change. My initial thought was, "Let's see what other node states are defined," and I immediately looked at `include/linux/nodemask.h`. There, I found the familiar `enum node_states`: `N_POSSIBLE`, `N_ONLINE`, `N_NORMAL_MEMORY`, `N_HIGH_MEMORY`, `N_MEMORY`, `N_CPU`, `N_GENERIC_INITIATOR`, and `NR_NODE_STATES`. Nothing jumping out there. Then, I went back to the diff and re-examined it. I noticed a subtle, but significant, change in `mm/memory_hotplug.c`. The code now uses `N_MEMORY_PUBLIC` instead of `N_MEMORY`. My immediate reaction was, "Hang on, what's `N_MEMORY_PUBLIC`? Where did that come from?" The comment change in the diff also caught my eye: it now says, "...if there are no other *public* nodes to be used..." This is the key. It's the change in terminology. Previously, it talked about "online nodes," now it specifies "public nodes". So, I want to understand what a "public node" is in this context. It seems like it's no longer about whether a node is simply "online". It has to be *publicly* available for memory allocation during a migration operation. Now, I'm going to start digging. Time to use grep to search for `"public node"`, `"public nodes"`, or something like `"N_PUBLIC"` to determine exactly what this new "public" designation entails and why it matters in memory hotplug. |
| 75/2 | 2026/09/14 08:06 | tool | grepper |
0mArgs:{
"Expression": "public node"
}Results: {
"Output": "mm/memory_hotplug.c=1879=static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)\n--\nmm/memory_hotplug.c-1946-\t\t * try to allocate from a different node but reuse this node\nmm/memory_hotplug.c:1947:\t\t * if there are no other public nodes to be used (e.g. we are\nmm/memory_hotplug.c:1948:\t\t * offlining a part of the only public node)\nmm/memory_hotplug.c-1949-\t\t */\n--\ntools/testing/selftests/dax/dax-kmem-hotplug.sh=281=fi\n--\ntools/testing/selftests/dax/dax-kmem-hotplug.sh-291-# last and only when explicitly requested. online_movable only: this test\ntools/testing/selftests/dax/dax-kmem-hotplug.sh:292:# never onlines a public node into a kernel zone.\ntools/testing/selftests/dax/dax-kmem-hotplug.sh-293-\n"
} |
| 76/2 | 2026/09/14 08:06 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 64235 output: 49 thoughts: 71 Thoughts: **Immediate Reaction to Diagnostic Output** Okay, *that* grep output really jumps out at me. Specifically, I'm seeing `tools/testing/selftests/dax/dax-kmem-hotplug.sh:292`. Right, right, that's the area to focus on. I need to take a look at the `dax-kmem-hotplug.sh` script, probably around line 292. Let's dig in and figure out what that's telling us. There's almost certainly a problem there, time to get to it. |
| 77/2 | 2026/09/14 08:06 | tool | read-file |
0mArgs:{
"File": "tools/testing/selftests/dax/dax-kmem-hotplug.sh",
"FirstLine": 270,
"LineCount": 40
}Results: {
"Contents": " 270:\t\t\tif [ \"$mt_after\" -le \"$mt_unplugged\" ] \u0026\u0026 [ \"$leaked\" = 0 ]; then\n 271:\t\t\t\tktap_test_pass \"unbind with stale online state hot-removes offlined blocks (no leak)\"\n 272:\t\t\telse\n 273:\t\t\t\tktap_test_fail \"desync unbind leaked: MemTotal=$mt_after baseline=$mt_unplugged iomem_left=$leaked\"\n 274:\t\t\tfi\n 275:\t\t\tset_state unplugged 2\u003e/dev/null\n 276:\t\telse\n 277:\t\t\tktap_test_skip \"could not offline all device blocks for desync-unbind test\"\n 278:\t\tfi\n 279:\telse\n 280:\t\tktap_test_skip \"driver bind/unbind not writable for desync-unbind test\"\n 281:\tfi\n 282:\t\n 283:\t[ -n \"$ORIG\" ] \u0026\u0026 set_state \"$ORIG\"\n 284:\t\n 285:\t# DESTRUCTIVE and opt-in only (DAX_KMEM_TEST_UNBIND=1):\n 286:\t#\n 287:\t# unbinding the driver while memory is online causes the resources to leak - but\n 288:\t# the unbind should not deadlock. Instead the driver leaks it with a warning.\n 289:\t\n 290:\t# This leaves the memory online and the device unbound until reboot, so it runs\n 291:\t# last and only when explicitly requested. online_movable only: this test\n 292:\t# never onlines a public node into a kernel zone.\n 293:\t\n 294:\tif [ \"${DAX_KMEM_TEST_UNBIND:-}\" = 1 ] \u0026\u0026 [ -w \"$DRV/unbind\" ]; then\n 295:\t\tset_state unplugged; set_state online_movable\n 296:\tfi\n 297:\tif [ \"${DAX_KMEM_TEST_UNBIND:-}\" = 1 ] \u0026\u0026 [ \"$(get_state)\" = online_movable ] \u0026\u0026\n 298:\t [ -w \"$DRV/unbind\" ]; then\n 299:\t\tmt_on=$(memtotal_kb)\n 300:\t\tdmesg -C 2\u003e/dev/null\n 301:\t\techo \"$DAX\" \u003e \"$DRV/unbind\" 2\u003e/dev/null\n 302:\t\tmt_after=$(memtotal_kb)\n 303:\t\t# The leaked \"System RAM (kmem)\" regions stay in the iomem tree; reading\n 304:\t\t# their names dereferences res_name, which a buggy unbind already freed.\n 305:\t\t# Walk /proc/iomem to provoke that use-after-free (caught by KASAN).\n 306:\t\tcat /proc/iomem \u003e /dev/null 2\u003e\u00261\n 307:\t\tsplat=$(dmesg 2\u003e/dev/null | grep -ciE \"KASAN|BUG:|use-after-free|general protection|Oops|refcount_t\")\n 308:\t\tif [ \"$splat\" = 0 ] \u0026\u0026 [ \"$mt_after\" -ge \"$mt_on\" ]; then\n 309:\t\t\tktap_test_pass \"unbind while online: memory left online, no UAF/oops (MemTotal $mt_on -\u003e $mt_after kB)\"\n"
} |
| 78/2 | 2026/09/14 08:06 | llm | patch-evaluator-compressor |
8mModel:gemini-3.8-flash Args: null Results: null Reply: ### 1. Approaches Tried and Results
- **Patch Inspection**:
- Inspected commit `747c46842896f4c9e3cbc94c90b6ba49c660ad93` targeting `amd64`.
- Patch modifies `mm/memory_hotplug.c` in `do_migrate_range()`, replacing `nodemask_t nmask = node_states[N_MEMORY];` with `nodemask_t nmask = node_states[N_MEMORY_PUBLIC];`, and updates an adjacent comment.
- **Symbol & Identifier Verification (`N_MEMORY_PUBLIC`)**:
- Grepped the entire repository for `N_MEMORY_PUBLIC`, `MEMORY_PUBLIC`, and `_PUBLIC\b`.
- Grepped for macro token concatenations (`N_##`).
- Read `include/linux/nodemask.h` (lines 390–405) defining `enum node_states`:
Contains `N_POSSIBLE`, `N_ONLINE`, `N_NORMAL_MEMORY`, `N_HIGH_MEMORY`, `N_MEMORY`, `N_CPU`, `N_GENERIC_INITIATOR`, `NR_NODE_STATES`. No `N_MEMORY_PUBLIC` exists.
- Read `Documentation/mm/physical_memory.rst` (lines 150–189): documents all valid node states (`N_POSSIBLE`, `N_ONLINE`, `N_NORMAL_MEMORY`, `N_HIGH_MEMORY`, `N_MEMORY`, `N_CPU`, `N_GENERIC_INITIATOR`).
- Result: `N_MEMORY_PUBLIC` exists nowhere in the kernel tree except in the single modified line in `mm/memory_hotplug.c:1931`.
- **Build System & Compilation Analysis**:
- Read `mm/Makefile` (lines 60–79): `memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o`, included via `obj-y += $(memory-hotplug-y)`.
- Analyzed headers in `mm/memory_hotplug.c` (lines 1–45): no header defines `N_MEMORY_PUBLIC`.
- Conclusion: If `CONFIG_MEMORY_HOTPLUG=y`, compilation of `mm/memory_hotplug.c` fails immediately with an undeclared identifier error (`'N_MEMORY_PUBLIC' undeclared`). If `CONFIG_MEMORY_HOTPLUG` is not set, `mm/memory_hotplug.c` is not compiled into the kernel image at all.
- **Reachability Analysis of Target Function**:
- Traced callers of `do_migrate_range()` in `mm/memory_hotplug.c`: called by `offline_pages()`.
- Traced callers of `offline_pages()`: called by `memory_block_offline()` in `drivers/base/memory.c`.
- Traced `memory_block_offline()`: called via `memory_block_action()` / `memory_block_change_state()` via sysfs (`/sys/devices/system/memory/memoryX/state`).
### 2. Current Hypotheses and Lines of Investigation
- **Broken / Incomplete Patch Series**:
- The patch relies on an undeclared symbol `N_MEMORY_PUBLIC` that was intended to be introduced by a precursor patch (likely differentiating public vs. private memory nodes, e.g. for CXL, GPU VRAM, or confidential computing) that was not applied.
- As applied, the patch renders `mm/memory_hotplug.c` completely uncompilable under any configuration that enables it (`CONFIG_MEMORY_HOTPLUG`).
- Under configurations where `CONFIG_MEMORY_HOTPLUG` is disabled, the file is not compiled, making the code structurally unexecutable / absent from `vmlinux`.
- **Fuzzing Eligibility Verdict**:
- Per Section 1 of system instructions: "REACHABILITY IS THE PRIMARY GATE: Fuzzing can only discover bugs in code that can actually execute in standard virtualized environments... If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed".
- Code that fails compilation cannot generate an executable kernel image to run or fuzz; if disabled, the modified object is excluded from the build.
- Final verdict needed: `WorthFuzzing=false` due to build failure / structural unreachability.
### 3. Critical File Paths and Code Snippets
- **`mm/memory_hotplug.c`** (lines 1928–1955):
```c
if (!list_empty(&source)) {
nodemask_t nmask = node_states[N_MEMORY_PUBLIC];
struct migration_target_control mtc = {
.nmask = &nmask,
.gfp_mask = GFP_KERNEL | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
.reason = MR_MEMORY_HOTPLUG,
};
int ret;
/*
* We have checked that migration range is on a single zone so
* we can use the nid of the first page to all the others.
*/
mtc.nid = folio_nid(list_first_entry(&source, struct folio, lru));
/*
* try to allocate from a different node but reuse this node
* if there are no other public nodes to be used (e.g. we are
* offlining a part of the only public node)
*/
node_clear(mtc.nid, nmask);
if (nodes_empty(nmask))
node_set(mtc.nid, nmask);
ret = migrate_pages(&source, alloc_migration_target, NULL,
(unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_HOTPLUG, NULL);
```
- **`include/linux/nodemask.h`** (lines 392–405):
```c
enum node_states {
N_POSSIBLE,
N_ONLINE,
N_NORMAL_MEMORY,
#ifdef CONFIG_HIGHMEM
N_HIGH_MEMORY,
#else
N_HIGH_MEMORY = N_NORMAL_MEMORY,
#endif
N_MEMORY,
N_CPU,
N_GENERIC_INITIATOR,
NR_NODE_STATES
};
```
- **`mm/Makefile`** (lines 66, 72):
```make
memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
...
obj-y += $(memory-hotplug-y)
```
- **Key Configs involved**:
- `CONFIG_MEMORY_HOTPLUG` / `MEMORY_HOTPLUG`
- `CONFIG_NUMA` / `NUMA`
- `CONFIG_MIGRATION` / `MIGRATION`
### 4. Watch Out for Reasoning Loops / Redundant Calls
- No further searching for `N_MEMORY_PUBLIC` or variants is needed; absence from the entire kernel source tree is exhaustively confirmed.
- All needed context regarding callers (`offline_pages`, `memory_block_offline`, sysfs hooks) and build logic is established.
- Next action: execute `set-results` tool once and generate the final answer.Tokens: input: 53431 output: 1677 thoughts: 0 |
| 79/2 | 2026/09/14 08:15 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 13242 output: 193 thoughts: 1106 Thoughts: **Analysis of the Provided Patch** Okay, let's break this down. First, this patch targets the amd64 architecture, which is good to know for context. The core of the patch involves a change in `mm/memory_hotplug.c`. Specifically, it appears to be modifying how memory migration targets are selected during hotplug operations. The original code uses `node_states[N_MEMORY]`, and the patch aims to replace that with `node_states[N_MEMORY_PUBLIC]`. My immediate concern is that I've never encountered `N_MEMORY_PUBLIC` before, and I have a pretty thorough understanding of the kernel's memory management subsystems. So, I need to verify its definition and usage within the kernel tree. I've already scanned `include/linux/nodemask.h` (the usual place for these things), along with a broader search through all header files and relevant `mm` files. And, as suspected, `N_MEMORY_PUBLIC` is nowhere to be found. It’s not declared, it's not defined via any macro, it's just…absent. Now, considering the build process, if `CONFIG_MEMORY_HOTPLUG` is enabled (and thus `mm/memory_hotplug.o` is being compiled), this patch *will* cause a compilation error. The compiler will choke on the undefined identifier `N_MEMORY_PUBLIC`. If `CONFIG_MEMORY_HOTPLUG` is disabled, then `mm/memory_hotplug.c` isn't even included in the build process, so the patched code is never even considered. Given the strict criteria for determining if code is worth fuzzing, this is a clear-cut case. The modified code is structurally unreachable. It is never compiled, or the compilation is actively blocked by the presence of an undefined symbol, depending on whether a configuration option is enabled. The modified code is never executed, and cannot be executed, regardless of the configuration. Per the guidelines, this is a negative criterion. Therefore, this patch isn't worth fuzzing. I can confidently assert that the patch's changes are uncompilable or unreachable under any circumstances. |
| 80/2 | 2026/09/14 08:16 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies mm/memory_hotplug.c to use 'N_MEMORY_PUBLIC', an identifier that is not defined anywhere in the kernel source tree (enum node_states in include/linux/nodemask.h only defines N_POSSIBLE, N_ONLINE, N_NORMAL_MEMORY, N_HIGH_MEMORY, N_MEMORY, N_CPU, N_GENERIC_INITIATOR, and NR_NODE_STATES). Consequently, any kernel build with CONFIG_MEMORY_HOTPLUG enabled fails to compile due to an undeclared identifier error, and when CONFIG_MEMORY_HOTPLUG is disabled, mm/memory_hotplug.c is excluded from the build. The modified code is structurally uncompilable and cannot execute in any running kernel.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies mm/memory_hotplug.c to use 'N_MEMORY_PUBLIC', an identifier that is not defined anywhere in the kernel source tree (enum node_states in include/linux/nodemask.h only defines N_POSSIBLE, N_ONLINE, N_NORMAL_MEMORY, N_HIGH_MEMORY, N_MEMORY, N_CPU, N_GENERIC_INITIATOR, and NR_NODE_STATES). Consequently, any kernel build with CONFIG_MEMORY_HOTPLUG enabled fails to compile due to an undeclared identifier error, and when CONFIG_MEMORY_HOTPLUG is disabled, mm/memory_hotplug.c is excluded from the build. The modified code is structurally uncompilable and cannot execute in any running kernel.",
"WorthFuzzing": false
} |
| 81/1 | 2026/09/14 08:16 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|