vnic nicvf: Program the common RSS key in network word order
Replace the repeated hardware-reset key with rss_getkey(). Decode each
eight-byte chunk with be64dec() into the register-word array before
programming the five key registers.
This matches the key serialization in DPDK's nicvf_rss_set_key(), added
by commit 7694fab264ac666d62a4cae04f2979991ce64259
("net/thunderx/base: add RSS and RETA configuration"). A raw copy into
the word array on little-endian hosts would reverse bytes within each
register relative to that convention.
Preserve the CPI-algorithm gate, enabled hash fields, and round-robin
indirection table.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59806
[scudo] Fix AllocatorCacheMaxResidentBytesDisabled test (#224698)
The test made an implicit assumption about how the maps were created. On
a device where the page size is much greater than 4096, the test fails
because of the hard-coded limits. Make the limits and values depend on
page size to avoid this problem.
enetc: Use the common RSS key
Replace the random register words with rss_getkey() and decode each
four-byte chunk with le32dec() before writing the port's key registers.
Keep the RSS capability check and existing queue-count and indirection
table programming unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59805
al_eth: Use the common RSS key
Fetch the common Toeplitz key instead of filling it with random bytes
during receive-forwarding setup. Check the key size at compile time and
retain the existing host-to-network conversion for each hardware word.
Leave forwarding, hash selection, and queue mapping unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59804
qlxgb: Derive the firmware RSS key from the common key
Replace the embedded key with rss_getkey(). Retain the reversed 64-bit
word-pair order and low-word-first layout used by the existing firmware
request, matching the qlxgbe conversion.
The common default produces the same five firmware words as the old
constants. Leave hash selections, RSS enablement, and the indirection
mask unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59803
qlxge: Derive both RSS keys from the common key
Replace the embedded default with rss_getkey(). Preserve the ICB's
little-endian representation of each big-endian key word, then copy
the initial 16 bytes of the serialized IPv6 key into the IPv4 key.
This retains the old default-key bytes and allows a configured common
key to take effect. Leave RSS flags and queue mapping unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59802
qlxgbe: Derive the mailbox RSS key from the common key
Replace the embedded key with rss_getkey(), retaining the firmware's
reversed 64-bit word-pair order and low-word-first layout within each
pair. The common default produces the same mailbox key as the existing
constants, while configured common keys no longer get ignored.
Leave the RSS enable flags, hash types, and indirection policy unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59801
qlnx: Derive the hardware RSS key from the common key
Replace the embedded default key with rss_getkey(). Decode each group
of four key bytes as a big-endian word; the shared code then serializes
those host-order words as little-endian firmware fields. This preserves
the existing hardware representation for the common default and allows
a configured common key to take effect.
Keep the existing multi-queue gate, RSS hash selections, and indirection
policy unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59800
mana: Initialize ports with the common RSS key
Use rss_getkey() for each port's initial key instead of a lazily generated
driver-global random key. Remove the obsolete helper and its unsynchronized
initialization flag. Make the common-key declaration available without
options RSS.
The port still retains the key used for hardware programming and the
existing SIOCGIFRSSKEY response. Leave hash types and queue placement
unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59799
mlx4en: Use the common RSS key for programming and queries
Replace the private fixed key with rss_getkey(). Copy the common byte
stream directly into the RSS queue-pair context and use the same helper
for SIOCGIFRSSKEY, so hardware programming and hn's query agree.
Change the helper to fill caller-owned storage instead of returning a
pointer to a static key. Check the fixed hardware and ioctl buffer sizes
at compile time. Leave RSS masks and queue steering unchanged.
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59798
oce: Use the common RSS key
Fill the RSS configuration request with the common 40-byte key instead
of fresh random bytes. Preserve the mailbox representation, hash
selection, and indirection table.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59797
[SPIRV] Rename pass to SPIRVLegalizeResourceBinding (#224747)
Rename `SPIRVLegalizeImplicitBinding` pass to
`SPIRVLegalizeResourceBinding` since it will soon be extended to handle
heap resource bindings as well. Renaming is as a separate PR will make
the upcoming change easier to review.
Related to #208054
bxe: Program the common RSS key in searcher byte order
Use the common RSS key instead of generating private random words.
Reverse the bytes before passing the key to the shared code, which copies
the supplied bytes directly into the firmware request. The searcher
consumes this array in reverse order; a raw copy of the common key would
not produce matching Toeplitz hashes.
The hardware ordering is documented by Linux commit
d682d2bdc30650a5c7ce9908ab83ab674b658744 ("bnx2x: byte swap rss_key to
comply to Toeplitz specs"). Keep the conversion in the FreeBSD caller
rather than changing the shared-code interface.
Preserve the config_hash gate, including the PMF-only key programming
on 57710/57711, and leave hash types and indirection policy unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59796
axgbe: Use the common RSS key without options RSS
Fetch the common key in the PCI iflib frontend regardless of options RSS
and make the key API declaration available in both configurations.
Retain the existing hash-field selection and queue-placement branches.
The independent ARM frontend is unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59794
aq: Use the common RSS key without options RSS
Fetch the common RSS key independently of options RSS instead of
generating a private key in non-RSS kernels. Keep the existing
software-RSS or round-robin indirection policy and hardware key
serialization unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59793
e1000: Use the common RSS key for 82574
Use rss_getkey() in the older em multi-queue RSS path, which is reached
by 82574 with two receive queues. This replaces a private key generated
on each initialization and matches the common-key policy already used
by the igb path.
Decode each register word with le32dec() and remove the private assembly
macro, avoiding signed integer shifts while preserving the register byte
order. Leave the redirection table and hash fields unchanged. This does
not change single-queue em devices or PF-owned igb VF RSS settings.
Reviewed by: erj, gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59792
ipfw: cleanup !FreeBSD and !_KERNEL code
These are leftovers from last import from Luigi Rizzo in 2013, that were
never compiled checked since and lots of changes have had happened since
and more changes to come. Let's not pretend ipfw is buildable on
something else than FreeBSD nor it can be compiled for userland.
Reviewed by: lytboris_gmail.com
Differential Revision: https://reviews.freebsd.org/D59427
ipfw: use typed pointers to access network protocols headers where possible
The 'void *ulp' is still in action, but where possible prefer a typed
pointer. Get rid of associated pre-processor macros.
Differential Revision: https://reviews.freebsd.org/D59435
ipfw: refactor macros around m_pullup()
In the prologue, where we check if the argument is a memory or an mbuf
chain, do not set 'struct ip *ip' pointer. However, set the 'struct
ether_header *eh' pointer there and set Etherner header length in 'ehlen'.
Side effect of this refactor is that now Layer 2 hooks may send mbufs with
ETHERTYPE_VLAN frames. However, current network stack doesn't do that.
Write a new PULLUP() macro that would take type of the argument to
determine how much to pull. Unlike PULLUP_TO() this macro can take typed
pointer. This will allow to get rid of 'void *ulp' and bunch of casting
macros in the next change. Use local bool variable to see if we need to
unlock upon jump to pullup_failed. Embed pointer update into the branch
of the macro, where pointers indeed need an update.
Use new PULLUP() macro to pullup initial 'struct ip *ip' and 'struct
ip6_hdr *ip6'. This removes max_protohdr sized pullup, that previously
tried to pull more than an unmapped mbuf could yield, fixing a bug covered
by the testcase sys/netpfil/ipfw/unmapped.
[3 lines not shown]
ixl: Initialize the extended RSS key
Zero the complete 52-byte RSS key buffer before fetching the common
40-byte key. Both the X722 AdminQ path and the register path consume all
52 bytes; the trailing extended-key bytes must not come from uninitialized
stack storage. This matches the zero padding already used by iavf and ice.
Remove the unused driver-default key helper and its declaration. Keep
the standard key, hash selections, and indirection policy unchanged.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59791
[mlir][VectorToXeGPU] Lower out-of-bounds 1-D transfers (#220490)
A vector.transfer_read / vector.transfer_write whose vector is 1-D and
whose access is out of bounds was not lowered.
This PR now builds a real in-bounds mask instead of handing
xegpu.load/xegpu.store an all-ones one. An element is in bounds when its
index is still inside the memref dimension it reads, i.e. i < dim(d) -
indices[d], and dimensions the transfer already declares in-bounds are
left alone. Since masked-off lanes of an xegpu.load hold unspecified
values rather than zeros, a read adds an arith.select to fill them with
the transfer's padding.
It also lowers a transfer_read of a single-element vector (any rank) to
a scalar xegpu.load, when that vector is only ever extracted to a
scalar. The load takes a scalar offset and a scalar mask, and the mask
is what keeps an out-of-bounds transfer from touching memory; because a
masked-off load is unspecified, the padding is applied with an
arith.select, as the scattered path already does. This avoids
[6 lines not shown]
iavf: Use the common RSS key without options RSS
Use rss_getkey() when programming the RSS key through virtchnl regardless
of options RSS, matching the register-programming path. The common key
is available independently of RSS queue placement; the driver-specific
default otherwise makes the chosen key depend on the PF's configuration
interface.
Remove the unused default-key helper and its declarations. Preserve the
negotiated key length, zero padding, hash selections, and indirection-table
policy.
Reviewed by: gallatin
MFC after: 2 weeks
Sponsored by: BBOX.io
Differential Revision: https://reviews.freebsd.org/D59790
netinet6?: move struct ip6?_moptions definition to in6?_var.h
Rest of multicast related kernel structures live in in6?_var.h and this
piece of ip6?_var.h was anyway requiring in6?_var.h to be included before.
Differential Revision: https://reviews.freebsd.org/D55963
ixv: Report the programmed VF RSS configuration
Provide the iflib RSS query methods for X550 and newer VFs, whose RSS key
and hash types are programmed by the VF. Cache those values and answer
queries under the context lock, without register reads or mailbox
transactions. Invalidate the snapshot at init, stop, and when an admin
check requests recovery after losing the PF mailbox or detecting reset.
Reject queries while the snapshot or mailbox is unavailable.
Program the common RSS key and cache the values written to the registers.
The key remains stable across resets, including live MTU and capability
changes for which hn(4) can retain its copy without another VF handoff.
Serialize the key in register byte order and report the six supported
IPv4/IPv6 TCP/UDP hash selections from the programmed MRQC, rather than
claiming that every globally requested hash type is enabled. A single
receive queue still performs Toeplitz hashing. Older VFs retain
EOPNOTSUPP because their PF-owned RSS settings are not available here.
This allows hn(4) to synchronize synthetic RSS with the actual VF
[6 lines not shown]