aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2021-12-30 11:20:32 +0000
committerStefan Eßer <se@FreeBSD.org>2021-12-30 11:20:32 +0000
commite2650af157bc7489deaf2c9054995f0f88a6e5da (patch)
tree21f452bd8fa6cfb4196cd06bab318092c9ea157b /sys/net
parent133180557479cd9676758e6f3f93a9d3e1c6b532 (diff)
downloadsrc-e2650af157bc7489deaf2c9054995f0f88a6e5da.tar.gz
src-e2650af157bc7489deaf2c9054995f0f88a6e5da.zip
Make CPU_SET macros compliant with other implementations
The introduction of <sched.h> improved compatibility with some 3rd party software, but caused the configure scripts of some ports to assume that they were run in a GLIBC compatible environment. Parts of sched.h were made conditional on -D_WITH_CPU_SET_T being added to ports, but there still were compatibility issues due to invalid assumptions made in autoconfigure scripts. The differences between the FreeBSD version of macros like CPU_AND, CPU_OR, etc. and the GLIBC versions was in the number of arguments: FreeBSD used a 2-address scheme (one source argument is also used as the destination of the operation), while GLIBC uses a 3-adderess scheme (2 source operands and a separately passed destination). The GLIBC scheme provides a super-set of the functionality of the FreeBSD macros, since it does not prevent passing the same variable as source and destination arguments. In code that wanted to preserve both source arguments, the FreeBSD macros required a temporary copy of one of the source arguments. This patch set allows to unconditionally provide functions and macros expected by 3rd party software written for GLIBC based systems, but breaks builds of externally maintained sources that use any of the following macros: CPU_AND, CPU_ANDNOT, CPU_OR, CPU_XOR. One contributed driver (contrib/ofed/libmlx5) has been patched to support both the old and the new CPU_OR signatures. If this commit is merged to -STABLE, the version test will have to be extended to cover more ranges. Ports that have added -D_WITH_CPU_SET_T to build on -CURRENT do no longer require that option. The FreeBSD version has been bumped to 1400046 to reflect this incompatible change. Reviewed by: kib MFC after: 2 weeks Relnotes: yes Differential Revision: https://reviews.freebsd.org/D33451
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/iflib.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 599d9f93bcbc..3fcab699f9e0 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -4970,7 +4970,7 @@ get_ctx_core_offset(if_ctx_t ctx)
for (i = 0; i < scctx->isc_nrxqsets; i++)
CPU_SET(get_cpuid_for_queue(ctx, first_valid, i, false),
&assigned_cpus);
- CPU_AND(&assigned_cpus, &ctx->ifc_cpus);
+ CPU_AND(&assigned_cpus, &assigned_cpus, &ctx->ifc_cpus);
cores_consumed = CPU_COUNT(&assigned_cpus);
mtx_lock(&cpu_offset_mtx);