NAS-141692 / 26.0.0-RC.1 / Fix UPS Input Load graph showing Watts on a percentage axis (by Qubad786) (#19312)
## Problem
The "UPS Input Load" report has `vertical_label = 'Percentage'` but
pointed `get_chart_name()` at Netdata's `upsd_<id>.load_usage` chart,
whose units are Watts (`ups.realpower`, or `ups.load/100 ×
ups.realpower.nominal`). So the graph rendered absolute power draw (e.g.
~117W for a ~30% load on a 390W UPS) under a "Percentage" axis. This
regressed in the python.d→go.d Netdata migration, which renamed the
chart from `nut_<id>.load` to `load_usage` without updating the label —
the migration picked the wrong sibling chart.
## Solution
Point the chart at `upsd_<id>.load_percentage` (units: percentage),
which maps to the raw NUT `ups.load` variable and matches both the
existing label and title. This chart is gated on the same `ups.load`
variable as `load_usage`, so it's available under identical conditions,
and it populates even on UPSes that don't report realpower — where
`load_usage` would be empty.
[3 lines not shown]
NAS-141692 / 27.0.0-BETA.1 / Fix UPS Input Load graph showing Watts on a percentage axis (#19294)
## Problem
The "UPS Input Load" report has `vertical_label = 'Percentage'` but
pointed `get_chart_name()` at Netdata's `upsd_<id>.load_usage` chart,
whose units are Watts (`ups.realpower`, or `ups.load/100 ×
ups.realpower.nominal`). So the graph rendered absolute power draw (e.g.
~117W for a ~30% load on a 390W UPS) under a "Percentage" axis. This
regressed in the python.d→go.d Netdata migration, which renamed the
chart from `nut_<id>.load` to `load_usage` without updating the label —
the migration picked the wrong sibling chart.
## Solution
Point the chart at `upsd_<id>.load_percentage` (units: percentage),
which maps to the raw NUT `ups.load` variable and matches both the
existing label and title. This chart is gated on the same `ups.load`
variable as `load_usage`, so it's available under identical conditions,
and it populates even on UPSes that don't report realpower — where
`load_usage` would be empty.
NAS-141765 / 26.0.0-RC.1 / Add /s suffix to per-second ARC/L2ARC chart units (by Qubad786) (#19311)
## Problem
Eight ARC/L2ARC charts in truenas_arcstats.chart.py (dmhit, dmioh,
dmmis, l2hits, l2miss, l2read, l2bytes, l2wbytes) use netdata's
incremental algorithm, which plots the counter delta divided by the
collection interval, i.e. a per-second rate. Their units strings were
bare names (e.g. l2bytes) with no /s, so the label read like a raw total
even though the value is a rate. This was inconsistent with the sibling
incremental charts (dread, ddread, dmread, ddhit, ddioh, ddmis) that
already use /s, and with the chart context strings that already say "per
second".
## Solution
Appended /s to the units string of those eight charts so every
incremental chart's units label reflects the per-second rate it actually
plots. Label-only change; the plotted values are unaffected, and there
is no user-facing regression since the TrueNAS UI sources its axis
labels from the reporting graphs' vertical_label, not from this netdata
[4 lines not shown]
[SLP] Fix ScatterVectorize reorder desyncing scalars from operands
Record the reorder in ReorderIndices instead of permuting the scatter node's
Scalars, keeping them aligned with the per-lane operand list the scheduler
reads.
Fixes #209444
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/209594
[flang][cuda] Size managed globals with descriptor components via LLVM Type (#209577)
When we do `-cuda -gpu=unified` (or `managed`) on a derived type with an
allocatable/pointer component, recent change
https://github.com/llvm/llvm-project/pull/209292 implicitly
attributed the component making lowering place the enclosing
derived-type global
in CUF managed memory. `CUFAddConstructor` then sizes that global via
`getTypeSizeAndAlignmentOrCrash`, which has no case for the descriptor
component
(`!fir.box<...>`) and aborts.
With this change, instead of aborting, we fall back to converting the
global to its LLVM type which
inlines the fixed-size descriptors, and query the data layout.
NAS-141765 / 27.0.0-BETA.1 / Add /s suffix to per-second ARC/L2ARC chart units (#19295)
## Problem
Eight ARC/L2ARC charts in truenas_arcstats.chart.py (dmhit, dmioh,
dmmis, l2hits, l2miss, l2read, l2bytes, l2wbytes) use netdata's
incremental algorithm, which plots the counter delta divided by the
collection interval, i.e. a per-second rate. Their units strings were
bare names (e.g. l2bytes) with no /s, so the label read like a raw total
even though the value is a rate. This was inconsistent with the sibling
incremental charts (dread, ddread, dmread, ddhit, ddioh, ddmis) that
already use /s, and with the chart context strings that already say "per
second".
## Solution
Appended /s to the units string of those eight charts so every
incremental chart's units label reflects the per-second rate it actually
plots. Label-only change; the plotted values are unaffected, and there
is no user-facing regression since the TrueNAS UI sources its axis
labels from the reporting graphs' vertical_label, not from this netdata
units field.
[mlir][bufferization] Handle arith.select-based deallocs in static memory planner
Allocs freed indirectly via arith.select chains were previously skipped.
This adds forward select-chain traversal so patterns like:
%2 = arith.select %c, %0, %1
memref.dealloc %2
are now handled correctly.
A group constraint ensures that all allocs sharing a select-based
dealloc are either all placed in the arena or all skipped — putting
one alloc in while leaving its peer out would break the dealloc.
Also fixes the O(n*m) block scan in buildAllocInfos by doing a single
upfront pass with a DenseMap index.
Tests added for single-alloc select, shared select-dealloc, and the
two-select two-dealloc pattern.
AMDGPU: Migrate CodeGen tests to amdgpu subarch triple (30) (#209559)
Mechanically migrate the command-line target spelling on llc/opt RUN
lines in llvm/test/CodeGen/AMDGPU from -mtriple=amdgcn ... -mcpu=<gfx> to the
folded subarch triple form (e.g. -mtriple=amdgpu9.00-amd-amdhsa), dropping the
redundant -mcpu.
Co-Authored-By: Claude <noreply at anthropic.com> (Claude-Opus-4.8)
AMDGPU: Migrate CodeGen tests to amdgpu subarch triple (29) (#209558)
Mechanically migrate the command-line target spelling on llc/opt RUN
lines in llvm/test/CodeGen/AMDGPU from -mtriple=amdgcn ... -mcpu=<gfx> to the
folded subarch triple form (e.g. -mtriple=amdgpu9.00-amd-amdhsa), dropping the
redundant -mcpu.
Co-Authored-By: Claude <noreply at anthropic.com> (Claude-Opus-4.8)
NAS-141755 / 26.0.0-RC.1 / Redact app.image.pull registry credentials in job history and logs (by Qubad786) (#19305)
## Problem
The `auth_config` username/password accepted by `app.image.pull` were
typed as plain `str`, so the secret scrubber never masked them. Any
registry credentials supplied for a private image pull landed in
cleartext in `core.get_jobs` arguments (which get bundled into support
debugs) and in `middlewared.log`.
## Solution
Wrapped `username`/`password` in `Secret[str]` in the current and 26.0
API models, matching what `app.registry` already does, and unwrapped
them with `.get_secret_value()` in the pull plugin so the real values
still reach the registry. Job arguments and logs now show `********`.
Original PR: https://github.com/truenas/middleware/pull/19293
Co-authored-by: M. Rehan <mrehanlm93 at gmail.com>
[VPlan] Introduce VPIRFlags::getNWFlagsOrNone (NFC) (#207176)
Similar to getFMFOrNone. Also introduce a default WrapFlagsTy
constructor to go along with it.
[AMDGPU] Fix CFI emission when scratch instructions are used to spill
4b1cfc5d7c606e "[NFCI][AMDGPU] Final touch before moving to
`GET_SUBTARGETINFO_MACRO` (#177401)" (or more generally the move to
hasFlatScratchEnabled over just enableFlatScratch) was missed during the
CFI upstreaming for AMDGPU, and so we currently define the CFA
incorrectly for the architected flat scratch case.
This incorrect CFI is generated for e.g. gfx942. For such architecture,
the stack pointer (s32) holds a swizzled address (per-lane offset) but
the CFA needs to be an unswizzled address (per-wave).
In the incorrect program, we have a prologue looking like:
s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
s_mov_b32 s0, s33
s_mov_b32 s33, s32
[...]
s_add_i32 s32, s32, 16
[24 lines not shown]
[AMDGPU] Add stackPtrOffsetReg to llvm/test/CodeGen/AMDGPU/misaligned-vgpr-regsequence.mir
Prepare for this being observable to the CFA generation code.
Change-Id: I56d00133148fd2c8f0e0ed41edca446553c664bc
[AMDGPU] Fix type for DWARF register number in SIFrameLowering (#209535)
It so happened that using MCRegister here happened to work, but
the encoded dwarf number is definitely not an MCRegister.
Convert boot plugin to typesafe pattern
## Problem
The boot service was old-style dict-based code spread across three files (boot.py, boot_/format.py, boot_/boot_loader.py) that all declared the same BootService, so the framework silently merged them into a CompoundService. None of it was type-checked end to end, and every in-process consumer reached it through untyped string middleware.call('boot.*').
## Solution
- Consolidate everything into a single plugins/boot/ package using the port pattern: a lean BootService in __init__.py that delegates to plain, fully type-annotated module functions in disks.py/format.py/pool_ops.py, with @api_method(check_annotations=True) public methods and @private stubs. boot.get_state now returns a BootGetState model; internal callers use a dict state helper so nothing breaks on attribute-vs-key access.
- Register boot in main.py's ServiceContainer and have it own boot.environment as a sub-service, replacing BootServicesContainer.
- Expose the boot-pool name/disks cache through accessor functions instead of a module global. This also fixes a latent bug where libvirt/cdrom.py imported the global at module load (before setup runs), bound it to None, and so never filtered the boot pool out of CDROM path validation.
- Convert every same-process boot.* string call to typed call2/call_sync2 across sysdataset, zfs_events, disk, failover, and the zpool/audit/tunable/update/system_advanced plugins, the alert sources, and the cron/fstab makos, keeping each site's sync/async flavour.
- Keep the private update_initramfs/format models in the plugin (check_model_module requires private-method models to live there, not in the api package) and import them lazily from consumers, otherwise pulling boot/__init__ into the early service-init chain deadlocks on a partially-initialised middlewared.service.
- Add plugins/boot/ to mypy.yml.