B4/lru map spin#12134
Draft
mykyta5 wants to merge 4 commits into
Draft
Conversation
# Describe the purpose of this series. The information you put here
# will be used by the project maintainer to make a decision whether
# your patches should be reviewed, and in what priority order. Please be
# very detailed and link to any relevant discussions or sites that the
# maintainer can review to better understand your proposed changes. If you
# only have a single patch in your series, the contents of the cover
# letter will be appended to the "under-the-cut" portion of the patch.
# Lines starting with # will be removed from the cover letter. You can
# use them to add notes or reminders to yourself. If you want to use
# markdown headers in your cover letter, start the line with ">#".
# You can add trailers to the cover letter. Any email addresses found in
# these trailers will be added to the addresses specified/generated
# during the b4 send stage. You can also run "b4 prep --auto-to-cc" to
# auto-populate the To: and Cc: trailers based on the code being
# modified.
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
--- b4-submit-tracking ---
# This section is used internally by b4 prep for tracking purposes.
{
"series": {
"revision": 1,
"change-id": "20260519-lru_map_spin-8e20dabbf460",
"prefixes": []
}
}
Perf-event BPF programs running in NMI can re-enter the per-CPU
loc_l->lock (and the global lru_list lock) that bpf_lru_pop_free()
already holds in syscall context on the same CPU. Lockdep reports
"inconsistent {INITIAL USE} -> {IN-NMI} usage" at bpf_lru_pop_free,
and a real AA deadlock is possible.
Mirror hashtab's fix: switch both locks to rqspinlock_t so the NMI
acquirer sees -EDEADLK from the slow-path AA check and bails. Pop
paths return NULL (same as OOM); push paths skip the move (the node
stays in the preallocated pool until map destroy).
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
Reproduces the loc_l->lock NMI re-entry that lockdep flagged on the
LRU hash map. Pins to CPU 0, attaches a perf_event BPF prog that
updates an LRU map from NMI, and hammers the same map from
userspace. On an unpatched kernel with PROVE_LOCKING this fires the
"inconsistent {INITIAL USE} -> {IN-NMI}" splat within a second.
Marked serial_ because CPU pinning plus a high-rate HW perf event
would perturb parallel tests.
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
AI reviewed your patch. Please fix the bug or email reply why it's not a bug. In-Reply-To-Subject: |
ec31e3e to
b3beebb
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.