LLVM/project 80a1e21llvm/include/llvm/IR PassManager.h

[PM] Move PassInfoMixin to detail namespace

To follow up on the TODO and to prevent backslide (which we have had
quite a bit of).

Reviewers: arsenm, nikic, aengelke, aeubanks

Pull Request: https://github.com/llvm/llvm-project/pull/218198
DeltaFile
+9-10llvm/include/llvm/IR/PassManager.h
+9-101 files

LLVM/project 3b48c69clang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations CppBoundedBuffers.cpp, clang/unittests/ScalableStaticAnalysis/SourceTransformation CppBoundedBuffersTest.cpp

[𝘀𝗽𝗿] changes introduced through rebase

Created using spr 1.3.7

[skip ci]
DeltaFile
+1,629-90llvm/test/CodeGen/AArch64/early-ifcvt-load-to-cond-br.mir
+672-0clang/unittests/ScalableStaticAnalysis/SourceTransformation/CppBoundedBuffersTest.cpp
+611-0clang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations/CppBoundedBuffers.cpp
+96-285llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
+46-333llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
+359-0llvm/test/Transforms/SLPVectorizer/X86/interchangeable-cmp-predicates.ll
+3,413-708270 files not shown
+9,021-3,991276 files

LLVM/project d652da3llvm/include/llvm/Transforms/Instrumentation CopyProf.h

[CopyProf] Prefer RequirePassInfoMixin

PassInfoMixin will be removed soon. Given these passes are sanitizer
passes, we also probably want them to run regardless of the presence of
optnone.

Reviewers: aeubanks, snehasish

Pull Request: https://github.com/llvm/llvm-project/pull/218197
DeltaFile
+3-3llvm/include/llvm/Transforms/Instrumentation/CopyProf.h
+3-31 files

OpenBSD/src UBw67d2sys/dev/pci/drm/include/linux pci.h

   add pci_name() for 6.18.46 drm
VersionDeltaFile
1.26+7-1sys/dev/pci/drm/include/linux/pci.h
+7-11 files

OpenBSD/src LQErtSssys/dev/pci/drm/include/linux pci.h

   add pci_pcie_type() for 6.18.46 drm
VersionDeltaFile
1.25+13-1sys/dev/pci/drm/include/linux/pci.h
+13-11 files

FreeBSD/src aefd61asys/dev/dpaa qman.c if_memac.c

dpaa: Add LRO and receive callback batching

Reduce the code executed in the DQRR dequeue loop, and move the
heavy-weight operations to post-dequeue loop.

* Batch if_input() after DQRR dispatch loop completes.  Only do the
  DQRR_CI_CINH write at the end of the loop, so only up to 16 entries
  will be processed.
* Add software LRO per FQ.  Each per-CPU RX FQ gets its own LRO tracking
  structure.

Since LRO is configured at FQ initialization time, allocate the ifnet
earlier in attach to prevent a panic.
DeltaFile
+57-1sys/dev/dpaa/dpaa_eth.c
+30-8sys/dev/dpaa/qman_portals.c
+20-0sys/dev/dpaa/qman.h
+13-0sys/dev/dpaa/dpaa_eth.h
+7-3sys/dev/dpaa/if_memac.c
+7-0sys/dev/dpaa/qman.c
+134-122 files not shown
+142-158 files

FreeBSD/src d7397e9sys/dev/dpaa qman.c dpaa_eth.h

dpaa/eth: distribute RX across per-CPU FQs via FMan KeyGen

Grow sc_nrxfqs from 1 to the CPU total, and hash the RX
5-tuple across the range with the KG driver from the prior commit.
Each FQ lands on its own per-CPU QMan channel, so a given core
drains only its own share of RX work and gets frame annotation +
data-head stashed into its cache.

* Add alignment parameter to qman_alloc_fqid_range() to meet KeyGen
  requirements.
* Initialize 1 frame queue (FQ) per CPU in dpaa_eth_fm_port_rx_init(),
  using a 5-tuple to spread the load across CPUs.
* Channel ownership for TX confirms moved from rx_init/free to
  tx_init/free -- sc_rx_channel is now a TX-confirm-only per-port
  pool channel.

Fallbacks/degradation:
* If any per-CPU channel is -1 (no portal attached)
  the port fails to attach with a clear message.

    [4 lines not shown]
DeltaFile
+221-47sys/dev/dpaa/dpaa_eth.c
+23-0sys/dev/dpaa/fman_port.c
+12-0sys/dev/dpaa/fman_port.h
+5-3sys/dev/dpaa/qman.h
+6-0sys/dev/dpaa/dpaa_eth.h
+3-2sys/dev/dpaa/qman.c
+270-526 files

FreeBSD/src 4dccd3asys/conf files.powerpc, sys/dev/dpaa fman.c fman_port.c

dpaa/fman: KeyGen (Parse-Classify-Distribute) driver

Add sys/dev/dpaa/fman_keygen.[ch].  Public API is four functions:

* fman_kg_init(sc) -- Initialize KeyGen subsystem, clear out any stale
                      config.
* fman_kg_fini(sc) -- Teardown KeyGen
* fman_kg_alloc_hash_scheme(sc, port, base_fqid, nfqs)
                   -- Allocate a scheme, program it for
                      RSS-over-IP-5-tuple hashing to nfqs FQs
                      starting at base_fqid, bind it to port.
* fman_kg_free_hash_scheme(sc, port)
                   -- Remove a scheme added by
                   fman_kg_alloc_hash_scheme().

KeyGen state (bitmap + port->scheme table) is added to the fman softc.

Future work may allow configuring the KG hash inputs, but what we have
now (5-tuple of src/src-port/dst/dst-port/IPSec SPI field) is
sufficient.
DeltaFile
+371-0sys/dev/dpaa/fman_keygen.c
+39-0sys/dev/dpaa/fman_keygen.h
+22-0sys/dev/dpaa/fman.h
+0-12sys/dev/dpaa/fman_port.c
+2-8sys/dev/dpaa/fman.c
+1-0sys/conf/files.powerpc
+435-206 files

FreeBSD/src dcd99desys/dev/dpaa dpaa_eth.h dpaa_eth.c

dpaa_eth: refactor RX FQ state into an array (N=1)

Preparation for FMan KeyGen-driven multi-queue RX.  Replace the
single sc_rx_fq / sc_rx_fqid pair with a sc_rx_fqs[] array (currently
one entry) and sc_rx_fqid_base.  Each entry carries a back-pointer
to the softc for use by the RX callback.
DeltaFile
+26-10sys/dev/dpaa/dpaa_eth.c
+19-3sys/dev/dpaa/dpaa_eth.h
+45-132 files

FreeBSD/src 7733521sys/dev/dpaa qman_var.h qman.h

dpaa/qman: per-CPU pool channel service + FQID range allocator

Add plumbing for future FMan KeyGen-driven multi-queue RX.  Pure
infrastructure; no behavioural change for existing single-FQ
consumers.

qman:
* New qman_percpu_channel(cpu) to get the per-CPU channel, needed for
  receive-side scaling.
* New qman_alloc_fqid_range(count, *basep) / qman_free_fqid_range()
  reserve a contiguous FQID range so a later KeyGen-distribution
  caller can compute FQID = base + (hash & mask) and create each FQ
  individually with force_fqid=true (each landing on its own
  per-CPU channel).

qman_fq_create:
* Honor the force_fqid / fqid_or_align parameters: when force_fqid is
  set, use the caller-supplied FQID and skip the internal vmem_alloc.
  The fqids_num != 1 restriction is lifted; qman_fq_list[] now records

    [4 lines not shown]
DeltaFile
+80-16sys/dev/dpaa/qman.c
+15-0sys/dev/dpaa/qman.h
+3-1sys/dev/dpaa/qman_var.h
+98-173 files

OpenBSD/src zmtMV1lsys/dev/pci/drm/include/linux pci.h

   add PCI_VENDOR_ID_AMD for 6.18.46 drm
VersionDeltaFile
1.24+2-1sys/dev/pci/drm/include/linux/pci.h
+2-11 files

LLVM/project 642630aclang/lib/Sema SemaDecl.cpp, clang/test/Modules pr212170.cppm

[C++20] [Modules] Preserve the initializer for unused static variable in modules (#218304)

Close https://github.com/llvm/llvm-project/issues/212170

See the discussion above for the details.
DeltaFile
+54-0clang/test/Modules/pr212170.cppm
+11-6clang/lib/Sema/SemaDecl.cpp
+65-62 files

FreeNAS/freenas ea1b4b3src/middlewared/middlewared/plugins/apps schema_validation.py schema_normalization.py, src/middlewared/middlewared/plugins/apps/ix_apps path.py

Force ACL application on app-owned ix-volume paths

## Problem
The served schema hides `force` for ix-volumes and defaults it to true, but clients submit an explicit false and middleware honours it, so applying an ACL fails with `path contains existing data` as soon as the app has written to its own volume. Once that false is persisted, validation rejects the config before normalization can correct it.

The bad value comes from the UI, which honours `hidden` only on the field carrying it: for an ix-volume the whole `options` block is hidden, so the form still builds a `force` control, seeds it with its own boolean default of false rather than the schema's true, and submits that for a system managed dataset.

## Solution
ix-volumes are system managed, so anything in them is ours - confirmed with Stavros that `force` should always be true for them when an ACL is wanted.

`normalize_ix_volume` stamps `force` to true in place once it has computed the volume's host path, gated on a containment check since `dataset_name` is not validated as a path anywhere. `validate_acl_entries` skips its existing-data probe for anything under `/mnt/.ix-apps/app_mounts` - that tree is ours, and `filesystem.add_to_acl` still refuses an unforced apply over a populated path.

Host path ACLs keep their guard and their false default. The cost is that a host path typed under `app_mounts` now fails from `add_to_acl` rather than validation, so it fails later, after `update_volumes` has created datasets and any sibling ACLs have been applied.
DeltaFile
+113-0src/middlewared/middlewared/pytest/unit/plugins/apps/test_validate_acl_entries.py
+79-1src/middlewared/middlewared/pytest/unit/plugins/apps/test_normalize_ix_volumes.py
+59-0src/middlewared/middlewared/pytest/unit/plugins/apps/test_app_volume_path.py
+19-0src/middlewared/middlewared/plugins/apps/ix_apps/path.py
+13-2src/middlewared/middlewared/plugins/apps/schema_normalization.py
+10-0src/middlewared/middlewared/plugins/apps/schema_validation.py
+293-36 files

Linux/linux 0a0d1d5kernel scftorture.c

Merge tag 'scftorture.2026.08.18a' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux

Pull smp_call_function() torture-test updates from Paul McKenney:

 - Count single_rpc offline failures in statistics output

 - Make invoker threads actually wait for all threads to start

* tag 'scftorture.2026.08.18a' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux:
  scftorture: Make invoker threads actually wait for all threads to start
  scftorture: Count single_rpc offline failures in statistics output
DeltaFile
+2-1kernel/scftorture.c
+2-11 files

FreeNAS/freenas 047562esrc/middlewared/middlewared/plugins/apps schema_validation.py schema_normalization.py, src/middlewared/middlewared/plugins/apps/ix_apps path.py

Force ACL application on app-owned ix-volume paths

## Problem
Enabling an ACL on an ix-volume of an installed app fails with `path contains existing data and 'force' was not specified`. The served schema hides the `force` flag for ix-volumes and defaults it to true, but clients can still submit an explicit false, and middleware then faithfully applies it - so the guard trips as soon as the app has written anything into its own volume, which is almost immediately after install. A false which has already been persisted is worse: on the next update validation rejects the config before normalization ever gets a chance to correct it.

## Solution
**Normalization** - `normalize_ix_volume` stamps `force` to true right after it computes the volume's host path, in place, so the dict which gets written back to the app config agrees with the ACL which was actually applied and a stored false heals itself. Doing it there rather than in `normalize_acl` matters twice over: `normalize_acl` is also reached by `host_path_config.acl`, which must keep its data-loss guard, and for volumes whose `acl_entries` carries its own `normalize/acl` ref the child is normalized while descending, before the parent has re-pointed the path - a decision taken then would outlive the re-point. `dataset_name` is not validated as a path anywhere, so the new `is_app_volume_path` containment check is what stops an absolute or `..`-laden one from steering the clamp onto somebody else's data.

**Validation** - `validate_acl_entries` runs before normalization, so a persisted false is rejected before the clamp can heal it. It now skips the existing-data probe for any path under `/mnt/.ix-apps/app_mounts`. That whole tree is created and owned by middleware, so whether it holds data is not middleware's call to refuse a save over, and skipping only drops a pre-flight message - `filesystem.add_to_acl` still refuses an unforced apply over a populated path, and `force` is written in exactly one place, the clamp above, which only ever sets it for the requesting app's own volume. Keying the skip on the shared root rather than on the requesting app keeps it to four lines with no plumbing: no flag threaded through `validate_question`, and no app name threaded into three validators two of which would ignore it.

The exemption is deliberately broader than the requesting app, and it costs one degraded error path plus a widening of an existing partial-apply hazard. A user who sets a storage entry to host path, types a path under `/mnt/.ix-apps/app_mounts`, enables the ACL and leaves force unchecked now gets a late unscoped `Failed to apply ACLs to the following paths` instead of a field-scoped validation error. Failing at `add_to_acl` rather than at validation also means `update_volumes` has already created the ix-volume datasets, and in a multi-ACL config `core.bulk` applies the other ACLs before collecting the failure - so some ACLs land while the config edit rolls back. Both routes still reject, and no ACL is ever applied outside the requesting app's own volume, because the clamp stays app-scoped.
DeltaFile
+113-0src/middlewared/middlewared/pytest/unit/plugins/apps/test_validate_acl_entries.py
+79-1src/middlewared/middlewared/pytest/unit/plugins/apps/test_normalize_ix_volumes.py
+59-0src/middlewared/middlewared/pytest/unit/plugins/apps/test_app_volume_path.py
+19-0src/middlewared/middlewared/plugins/apps/ix_apps/path.py
+13-2src/middlewared/middlewared/plugins/apps/schema_normalization.py
+10-0src/middlewared/middlewared/plugins/apps/schema_validation.py
+293-36 files

FreeBSD/ports 4d61443www/phalcon Makefile distinfo

www/phalcon: update to 5.20.0.
DeltaFile
+3-3www/phalcon/distinfo
+1-1www/phalcon/Makefile
+4-42 files

LLVM/project 4639fa2llvm/lib/Target/Mips MipsInstrInfo.td, llvm/test/MC/Mips macro-bcc-imm-delay-slot.s

[Mips] Mark immediate branch macros as having delay slots (#217565)

Immediate conditional branch macros expand to real branches with delay
slots, but their pseudo-instruction definitions did not carry
`hasDelaySlot`. Mark them consistently with the register forms so IAS
inserts a delay-slot `nop` under `.set reorder`.

Adds `llvm/test/MC/Mips/macro-bcc-imm-delay-slot.s` covering reordered
and non-reordered expansion.

Fixes #217368
DeltaFile
+33-0llvm/test/MC/Mips/macro-bcc-imm-delay-slot.s
+1-1llvm/lib/Target/Mips/MipsInstrInfo.td
+34-12 files

FreeBSD/ports de1aad0www/qt5-webengine Makefile

www/qt5-webengine: Fix build on -CURRENT

clang on CURRENT invokes ld.lld, which does not search LOCALBASE.
GN host tools such as character_data_generator then fail with
"unable to find library -levent".

Add USES=localbase:ldflags and LIBRARY_PATH so the host linker
can find ports libraries without relying on GNU ld following the
chromium and qt6-webengine patterns.

Approved by:    blanket
DeltaFile
+3-2www/qt5-webengine/Makefile
+3-21 files

FreeBSD/src 1c2263blib/libusb libusb10_hotplug.c

libusb: Validate arguments before dereferencing the hotplug context

libusb_hotplug_register_callback() resolves its context with
GET_CONTEXT() and then immediately reads ctx->no_discovery and
ctx->usb_event_mode, but only checks "ctx == NULL" afterwards.

GET_CONTEXT() falls back to usbi_default_context, which is NULL before
libusb_init() and is reset to NULL by libusb_exit().  An application
that calls libusb_hotplug_register_callback(NULL, ...) without an
initialised default context therefore crashes on the ctx->no_discovery
read, instead of getting the LIBUSB_ERROR_INVALID_PARAM the existing
guard was clearly written to return.

Move the argument validation ahead of the first dereference.  None of
the validated arguments depend on the context, so no other ordering
constraint is affected.

Signed-off-by: yuvrajnode <yuvrajsinghrock1221 at gmail.com>
Reviewed by:    aokblast

    [3 lines not shown]
DeltaFile
+6-6lib/libusb/libusb10_hotplug.c
+6-61 files

FreeBSD/src fc3e843lib/libusb libusb10_hotplug.c

libusb: Fix NULL dereference when a hotplug callback deregisters itself

libusb_hotplug_register_callback() runs the newly registered callback
over the already-enumerated device list when LIBUSB_HOTPLUG_ENUMERATE
is set.  A hotplug callback returning non-zero means "deregister me",
and the enumerate loop honours that by freeing the handle and setting
it to NULL.

Since commit 6bda9f26d2ed changed libusb_hotplug_callback_handle from a
pointer to an int, the tail of the function unconditionally dereferences
that handle, so any caller that passes LIBUSB_HOTPLUG_ENUMERATE, a
non-NULL handle pointer, and a callback that returns non-zero on a
matching device crashes inside libusb.  This is a normal usage pattern
and it was safe before the conversion, when the equivalent line simply
stored NULL.

Report the reserved id 0 instead.  The allocator hands out ids starting
at 1, and libusb_hotplug_deregister_callback() already ignores 0, so
this restores the pre-conversion behaviour.

    [6 lines not shown]
DeltaFile
+8-1lib/libusb/libusb10_hotplug.c
+8-11 files

LLVM/project 904188ellvm/include/llvm/Analysis AssumptionCache.h, llvm/lib/Analysis AssumptionCache.cpp

[AssumptionCache] Limit the number of assumptions inspected per value (#217525)

Example:
```llvm
loop.5:
  %iv.5 = phi i64 [ %next.5, %body.5 ], [ 0, %body.4 ]
  %value.5 = phi i32 [ %arg, %body.5 ], [ 0, %body.4 ]
  %cmp.5 = icmp slt i64 %iv.5, 10
  br i1 %cmp.5, label %body.5, label %loop.4.latch

body.5:
  %negative = icmp slt i32 %value.5, 0
  call void @llvm.assume(i1 %negative)
  %next.5 = add i64 %iv.5, 1
  br label %loop.5
```

In this code, fully unrolling the enclosing nest clones the assumption
once per iteration, and every clone constrains `%arg`, leaving 10,009

    [157 lines not shown]
DeltaFile
+51-18llvm/lib/Analysis/AssumptionCache.cpp
+37-0llvm/test/Analysis/AssumptionCache/max-assumes-per-value.ll
+15-0llvm/include/llvm/Analysis/AssumptionCache.h
+1-1llvm/lib/Transforms/Utils/CodeExtractor.cpp
+104-194 files

LLVM/project 8c6b849llvm/include/llvm/IR VPIntrinsics.def, llvm/lib/CodeGen/SelectionDAG MatchContext.h LegalizeVectorOps.cpp

[DAG] Remove trivial VP SDNodes. NFC (#217866)

This removes the codegen parts of the trivial VP intrinsics. It's quite
far reaching, but the general categories of code removed are:

- Removing definitions from VPIntrinsics.def
- Legalization and expansion code
- MatchContext used to match over both VP and non-VP nodes
- Some dead DAGCombines and folds in SelectionDAGBuilder

There are still more things to be cleaned up after this, e.g. removing
more of the VPIntrinsic class hierarchy, removing
ExpandVectorPredication/moving expansion into other places, removing
MatchContext from SDPatternMatch
DeltaFile
+80-283llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
+3-340llvm/include/llvm/IR/VPIntrinsics.def
+6-336llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+47-282llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
+7-217llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+0-182llvm/lib/CodeGen/SelectionDAG/MatchContext.h
+143-1,64011 files not shown
+194-2,02217 files

Linux/linux 83684c4kernel/rcu tree_plugin.h tree_nocb.h, rust/kernel/sync srcu.rs

Merge tag 'rcu.2026.08.18a' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux

Pull RCU updates from Paul McKenney:
 "Make expedited grace periods expedite normal RCU callbacks

  Miscellaneous fixes:
   - Improve diagnostic output with character task states
   - Mark accesses to inform KCSAN of concurrency design
   - Move from kmalloc() to kmalloc_obj()
   - Documentation updates
   - Improve handling of RCU deferred quiescent states
   - Clean up unused function arguments and structure fields
   - Reduce show_rcu_gp_kthreads() stack space

  Tasks RCU updates:
   - Clean up after SRCU re-implementation of Tasks Trace RCU
   - Mark accesses to inform KCSAN of concurrency design
   - Add ->lazy_timer status to diagnostic output
   - Remove an unnecessary memory barrier

    [44 lines not shown]
DeltaFile
+253-121kernel/rcu/rcutorture.c
+121-74kernel/rcu/tree.c
+171-0rust/kernel/sync/srcu.rs
+98-41kernel/rcu/rcu_segcblist.c
+98-28kernel/rcu/tree_nocb.h
+77-16kernel/rcu/tree_plugin.h
+818-28033 files not shown
+1,251-48139 files

FreeBSD/src 8bee781sys/dev/ixl ixl_pf_iflib.c ixl_pf_iov.c

ixl: Make VF reset resource reconstruction fallible

Treat each stage of VF reset and VSI reconstruction as fallible.  Keep
the VF out of VFACTIVE when PCIe drain, reset completion, VSI
release, or VSI allocation fails, following the DPDK PF reset model.
Propagate initial reset failures back through pci_iov_vf_add and unwind
the VF queue allocation.

Free the old software filter list before initializing a replacement VSI.
ixl_init_filters() previously replaced the list head without freeing its
entries, so every VF FLR leaked all MAC and VLAN filter objects.  Reset
the associated counters and VLAN bitmap with the list.

Avoid allocating an initial VSI only to destroy it during the required
initial VF reset, and remove redundant broadcast/filter programming from
VSI setup.  Also delete a partially created VSI when later Admin Queue
setup fails.

(cherry picked from commit ee52b925fa08158e510d5dddfd1c8fa26f120575)
DeltaFile
+118-55sys/dev/ixl/ixl_pf_iov.c
+11-4sys/dev/ixl/ixl_pf_iflib.c
+129-592 files

FreeBSD/ports 69c0910www/osrm-backend Makefile

www/osrm-backend: Fix build: 'deadline_timer' is deprecated: Use system_timer

In file included from /wrkdirs/usr/ports/www/osrm-backend/work/osrm-backend-0ae940c31566df2aec0ecd679c84c11ede9831ef/src/tools/r
outed.cpp:1:
In file included from /wrkdirs/usr/ports/www/osrm-backend/work/osrm-backend-0ae940c31566df2aec0ecd679c84c11ede9831ef/include/ser
ver/server.hpp:4:
/wrkdirs/usr/ports/www/osrm-backend/work/osrm-backend-0ae940c31566df2aec0ecd679c84c11ede9831ef/include/server/connection.hpp:53:
18: error: 'deadline_timer' is deprecated: Use system_timer [-Werror,-Wdeprecated-declarations]
   53 |     boost::asio::deadline_timer timer;
      |                  ^
/usr/local/include/boost/asio/deadline_timer.hpp:36:1: note: 'deadline_timer' has been explicitly marked deprecated here
   36 | BOOST_ASIO_DEPRECATED_MSG("Use system_timer")
      | ^
/usr/local/include/boost/asio/detail/config.hpp:1484:47: note: expanded from macro 'BOOST_ASIO_DEPRECATED_MSG'
 1484 | #     define BOOST_ASIO_DEPRECATED_MSG(msg) [[deprecated(msg)]]
      |                                               ^
1 error generated.

- Add -Wno-deprecated-declarations to the CXXFLAGS.

    [7 lines not shown]
DeltaFile
+5-4www/osrm-backend/Makefile
+5-41 files

FreeBSD/src d4f1764sys/dev/ixl virtchnl.h ixl_pf_iov.c

ixl: Validate VF virtchnl configuration

Bound variable-length virtchnl messages before computing their expected
length, following the newer Intel virtchnl implementation.

Validate VF ring sizes and alignments before programming HMC contexts.
DPDK uses 128-byte ring alignment and 64 through 8160 descriptors;
the virtchnl ABI further specifies TX multiples of 8 and RX multiples
of 32.  Preserve the 4096-descriptor limit on X722.

Validate queue bitmaps before changing any rings, validate all queue
and interrupt contexts before applying a request, and reject invalid
RSS table entries.  Also avoid sending an ACK after VLAN-strip setup
fails and reply to delete-VLAN errors with the correct opcode.

These checks prevent malformed or oversized requests from an untrusted
VF from partially programming resources outside its allocation.

(cherry picked from commit e779914354db5cb3a20f4ec894d08b0f81d05ba2)
DeltaFile
+108-48sys/dev/ixl/ixl_pf_iov.c
+57-13sys/dev/ixl/virtchnl.h
+165-612 files

FreeBSD/src 7afc16esys/dev/ixl ixl_pf_iov.c

ixl: Initialize VF sysctl contexts before use

The VF array is zeroed at allocation, but its sysctl contexts were
only populated after each VF was successfully added.  If VF setup
failed, IOV teardown still passed every requested VF context to
sysctl_ctx_free().  An untouched context is not an initialized empty
TAILQ and caused a page fault during teardown.

Initialize every VF context with the array so both successful setup
and partial-failure cleanup have a valid lifetime.

(cherry picked from commit ae122c5443882ae4d3d19aacfcfd16a2c8d7b688)
DeltaFile
+3-1sys/dev/ixl/ixl_pf_iov.c
+3-11 files

FreeBSD/src 78f5c8esys/dev/iavf iavf_txrx_iflib.c

iavf: Honor iflib transmit completion batching

iavf uses descriptor writeback by default.  Hardware writes completion
status into a transmit descriptor only when it completes a descriptor
marked RS.  iavf marked every packet RS even though its report-status
queue recorded and inspected only descriptors selected by iflib.  The
other completion writes could not help reclaim descriptors.

iflib marks selected packets with IPI_TX_INTR as completion
checkpoints.  It forces a checkpoint as deferred work or ring pressure
grows.  Retain EOP on every packet, but set RS only at those
checkpoints.

The deprecated head-writeback option on 700-series VFs gets the same
batching: each RS checkpoint permits hardware to publish the completed
ring head.

DPDK uses the same sparse RS design.  Let iflib choose the adaptive
interval for FreeBSD.  This is a PCIe/memory bandwidth savings.

    [2 lines not shown]
DeltaFile
+5-4sys/dev/iavf/iavf_txrx_iflib.c
+5-41 files

FreeBSD/src a721f72sys/dev/ixl ixl_txrx.c

ixl: Honor iflib transmit completion batching

ixl uses head writeback by default.  Hardware publishes the transmit
ring head through DMA only after completing a descriptor marked RS.
Marking every packet requested much more frequent head updates than
iflib needs to reclaim descriptors.

iflib marks selected packets with IPI_TX_INTR as completion
checkpoints.  It forces a checkpoint as deferred work or ring pressure
grows.  Retain EOP on every packet, but set RS only at those
checkpoints.  This batches head writebacks while preserving bounded
descriptor reclamation.

The optional descriptor writeback mode benefits as well.  ixl already
recorded only IPI_TX_INTR descriptors in its report-status queue, so
status written for every other packet was not inspected.

DPDK uses the same sparse RS design.  Let iflib choose the adaptive
interval for FreeBSD.  This is a PCIe/memory bandwidth savings.

    [2 lines not shown]
DeltaFile
+5-4sys/dev/ixl/ixl_txrx.c
+5-41 files

FreeBSD/src b902b27sys/dev/iavf iavf_vc_common.h iavf_lib.h

iavf: Recover when PF communication is unavailable

A PF reset or loss of virtchnl service can make visible interface
initialization wait up to ten seconds and then return from the void
ifdi_init callback.  Iflib consequently marks the interface running even
though its queues were not initialized, and no retry is scheduled when
the PF returns.

Check reset readiness without polling during reinitialization, propagate
queue-message submission errors, and bound a silent enable or disable to
one mailbox timeout.  Report unsuccessful initialization to iflib and
publish link-down state without polling the stopped mailbox.

A VFLR also discards the Admin Queue and permits the PF to replace the
VF VSI.  Track when full virtchnl rediscovery is required, renegotiate the
API version, refresh and validate the VF resources before using a cached
VSI ID, and replay the MAC and VLAN filters cleared by reset.  Bound each
runtime discovery attempt while preserving the existing attach-time wait.


    [5 lines not shown]
DeltaFile
+365-38sys/dev/iavf/if_iavf_iflib.c
+53-20sys/dev/iavf/iavf_vc_common.c
+36-12sys/dev/iavf/iavf_lib.c
+8-0sys/dev/iavf/iavf_iflib.h
+3-1sys/dev/iavf/iavf_lib.h
+2-0sys/dev/iavf/iavf_vc_common.h
+467-716 files