Add NFSv4 multi-client race tests
Add 18 multi-client NFSv4 race tests under
tests/sharing_protocols/nfs/test_nfs_mt_races.py. Each test spawns
N=8 worker threads, each driving its own PynfsClient (distinct
clientid + session), with a barrier-synchronised start so the
server sees concurrent requests. Status distributions are
aggregated and asserted to match RFC 8881 expectations exactly.
Coverage:
- OPEN/CLOSE share-state: DENY_WRITE / DENY_READ mutex; compatible
OPEN(READ) coexistence (RFC 8881 §9.7).
- Byte-range LOCK: shared READ_LT coexistence; disjoint WRITE_LT
coexistence; conflicting WRITE_LT on the same range; readers
blocked by a held WRITE_LT; writers blocked by a held READ_LT
(§9.1). The conflict tests use a sequential holder client +
racer pool; an internal grace-retry helper handles
NFS4ERR_GRACE so the holder's LOCK is reliably acquired across
server-side grace transitions.
[30 lines not shown]
sdhci.4: Mention all tunables and sysctls, and other updates.
- Mention sdhci_acpi attaching controllers via ACPI.
- Be more technically correct on what kinds of cards it can support.
- Add some definitely working chips to list of actually tested devices.
- Mention fastest supported speeds: 50MHz HighSpeed, and DDR52 only on eMMC.
[AMDGPU][True16] Add test for various s16 G_LOAD/G_STORE cases (#197245)
This test will be updated by
https://github.com/llvm/llvm-project/pull/176963 and should show
differences between True and Fake 16 in all cases. Currently it does not
for some cases
---------
Signed-off-by: Domenic Nutile <domenic.nutile at gmail.com>
[llvm-split] Generalize split-by-category to accept an arbitrary attribute name (#197338)
Rename the `module-id` split-by-category mode to `attribute` and add a
`--category-attribute=<name>` flag that specifies which function
attribute to group by. This decouples `llvm-split` from the hardcoded
"module-id" attribute name, making the tool reusable for any
attribute-based splitting.
Also fix the error reporting path to properly consume the llvm::Error
(use `toString(std::move(E))`) instead of streaming it and letting the
unchecked Error destructor abort.
Co-Authored-By: Claude
Integrate DDT and BRT tests
Don't disable block cloning during dedup tests. Just don't use
cp to not trigger it. Add a new test, explicitly mixing dedup
and cloning on the same file, that should be handled by DDT.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Rob Norris <rob.norris at truenas.com>
Signed-off-by: Alexander Motin <alexander.motin at TrueNAS.com>
Closes #18520
Fix double free for blocks cloned after DDT prune
Before this change, for blocks marked with D flag but absent in DDT
(pruned from it), zio_ddt_free() fell back to ZIO_STAGE_DVA_FREE
without trying ZIO_STAGE_BRT_FREE first. Same time such blocks
might be present in BRT, and not handling that would result in
double/multiple free.
This change makes ZIO_DDT_FREE_PIPELINE include ZIO_FREE_PIPELINE,
just adding required ZIO_STAGE_ISSUE_ASYNC and ZIO_STAGE_DDT_FREE,
and moves DDT stages before BRT. This way, if the block is found
in DDT by zio_ddt_free(), the pipeline is short-circuited to
ZIO_INTERLOCK_PIPELINE, similar to what zio_brt_free() does. If
not, then BRT is checked, and if also no match, the block is freed.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Rob Norris <rob.norris at truenas.com>
Signed-off-by: Alexander Motin <alexander.motin at TrueNAS.com>
Closes #18520
[CodeGen] Fold load into LZCNT/TZCNT/POPCNT after compare elimination in peephole optimizer (#194662)
When a loaded value feeds both a bit-count instruction
(LZCNT/TZCNT/POPCNT) and an `icmp eq zero` / `select` sequence, ISel
emits the register form (`rr`) because the loaded value has two uses at
that point. The peephole optimizer later eliminates the redundant
compare (recognizing that LZCNT/TZCNT/POPCNT already set the necessary
EFLAGS), but failed to retry folding the load into the now single-use
bit-count instruction — because that instruction had already been
scanned.
The fix pre-saves the compared register before `optimizeCmpInstr` erases
the compare. After successful elimination, if the EFLAGS producer and
its defining load are both already-scanned and now have a single use,
fold immediately via `TII->optimizeLoadInstr`.
Before:
```
movq (%rdi), %rax
[10 lines not shown]
[DebugInfo] Enforce DISubprogram type as required in LLParser (#196299)
Add a parse-time check so that LLParser treats the `type:` field of
`DISubprogram` as required and non-null. Attempting to assemble IR with
a missing or null `type:` now produces a clear parse-time error
("missing required field 'type'" or "'type' cannot be null") rather
than relying solely on the verifier warning added in #194556.
Update existing hand-written LLVM IR tests to supply a minimal valid
`DISubroutineType` where they are not intentionally testing malformed
debug info.
**Scope.** This patch covers the LLParser path only. Two entry points
are intentionally deferred:
- *MetadataLoader*: pre-LLVM-5 bitcode legitimately stores null
`DISubprogram.type`; auto-upgrading that field requires more careful
backward-compatibility handling (see
`llvm/test/Bitcode/dityperefs-3.8.ll`).
- *BitcodeWriter*: IR written to bitcode has already passed the
verifier, which guarantees a non-null type; no additional check is
needed in the writer.
Follow-up to #194556.
[CIR] Lower materialize-global-temporaries that self-reference (#197314)
This showed up in a test suite, but cases where a materialized global
temporary references itself, we emitted an NYI. This patch implements it
by creating a 'throw-away' global op that can be referenced by name,
then erased/thrown away. Since it is referenced by name in global-view,
all of the uses I could reproduce didn't require a 'replaceAllUsesWith',
but the call is left in case some sort of initialization causes a
reference directly to the global.
Also, as a drive-by, `createGlobalOp` was a static member function that
took the CIRGenModule as an argument for some reason, so this patch just
makes it a member function.
linux/zpl_super: handle 'source' option directly
vfs_parse_fs_param_source() didn't appear until 5.14, and was not
backported to kernel.org LTS kernels. It's simple enough that it's
easier to just handle it ourselves rather than use a configure check.
Sponsored-by: TrueNAS
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <rob.norris at truenas.com>
Closes #18529
bootgrid: clean up converter compatibility code
Only other consumer is Nginx in plugins, but worst case scenario
these timestamps will render as... timestamps, which in that form
are sortable anyway. It's likely this was throwing an error anyway
The "sorters" weren't actually accounted for in the compat
translation, so this wasn't overridable. Fix this here.
[DirectX][ObjectYAML] Add ILDB program part support (#189685)
Add support for DXContainer ILDB parts in the ObjectYAML pipeline so
they can be represented in structured YAML and round-tripped through
yaml2obj/obj2yaml.
ILDB payloads use the same layout as DXIL, but contain debug IR. This
change treats ILDB as a DXIL-shaped program part.
FileSize and DXIL ProgramHeader Size values in DXILPart.yaml were
modified to make output binary correct/parseable by dxa utility.