Module Name: src Committed By: christos Date: Mon Jan 27 02:16:05 UTC 2025
Modified Files: src/external/mpl/bind/dist/lib/dns: qp.c xfrin.c zone.c src/external/mpl/bind/dist/lib/isc: histo.c src/external/mpl/bind/dist/lib/isc/include/isc: types.h src/external/mpl/bind/dist/lib/ns: client.c src/external/mpl/bind/dist/lib/ns/include/ns: client.h Log Message: Fix the _ILP32 build. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/mpl/bind/dist/lib/dns/qp.c cvs rdiff -u -r1.16 -r1.17 src/external/mpl/bind/dist/lib/dns/xfrin.c cvs rdiff -u -r1.21 -r1.22 src/external/mpl/bind/dist/lib/dns/zone.c cvs rdiff -u -r1.2 -r1.3 src/external/mpl/bind/dist/lib/isc/histo.c cvs rdiff -u -r1.13 -r1.14 \ src/external/mpl/bind/dist/lib/isc/include/isc/types.h cvs rdiff -u -r1.22 -r1.23 src/external/mpl/bind/dist/lib/ns/client.c cvs rdiff -u -r1.18 -r1.19 \ src/external/mpl/bind/dist/lib/ns/include/ns/client.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/mpl/bind/dist/lib/dns/qp.c diff -u src/external/mpl/bind/dist/lib/dns/qp.c:1.2 src/external/mpl/bind/dist/lib/dns/qp.c:1.3 --- src/external/mpl/bind/dist/lib/dns/qp.c:1.2 Sun Jan 26 11:25:24 2025 +++ src/external/mpl/bind/dist/lib/dns/qp.c Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: qp.c,v 1.2 2025/01/26 16:25:24 christos Exp $ */ +/* $NetBSD: qp.c,v 1.3 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -63,9 +63,33 @@ * XXXFANF for now we're logging GC times, but ideally we should * accumulate stats more quietly and report via the statschannel */ +#ifdef _LP64 static atomic_uint_fast64_t compact_time; static atomic_uint_fast64_t recycle_time; static atomic_uint_fast64_t rollback_time; +#define ISC_QP_ADD(v, a) atomic_fetch_add_relaxed(&(v), (a)) +#define ISC_QP_GET(v) atomic_load_relaxed(v) +#else +static uint64_t compact_time; +static uint64_t recycle_time; +static uint64_t rollback_time; +static isc_mutex_t qp_mutex = PTHREAD_MUTEX_INITIALIZER; +#define ISC_QP_ADD(v, a) \ + ({ \ + isc_mutex_lock(&qp_mutex); \ + uint64_t x = (v) + (a); \ + isc_mutex_unlock(&qp_mutex); \ + x; \ + }) +#define ISC_QP_GET(v) \ + ({ \ + isc_mutex_lock(&qp_mutex); \ + uint64_t x = (v); \ + isc_mutex_unlock(&qp_mutex); \ + x; \ + }) +#endif + /* for LOG_STATS() format strings */ #define PRItime " %" PRIu64 " ns " @@ -680,7 +704,7 @@ recycle(dns_qp_t *qp) { } isc_nanosecs_t time = isc_time_monotonic() - start; - atomic_fetch_add_relaxed(&recycle_time, time); + ISC_QP_ADD(recycle_time, time); if (free > 0) { LOG_STATS("qp recycle" PRItime "free %u chunks", time, free); @@ -723,7 +747,7 @@ reclaim_chunks_cb(struct rcu_head *arg) STRUCT_FLEX_SIZE(rcuctx, chunk, rcuctx->count)); isc_nanosecs_t time = isc_time_monotonic() - start; - recycle_time += time; + ISC_QP_ADD(recycle_time, time); if (free > 0) { LOG_STATS("qp reclaim" PRItime "free %u chunks", time, free); @@ -816,7 +840,7 @@ marksweep_chunks(dns_qpmulti_t *multi) { } isc_nanosecs_t time = isc_time_monotonic() - start; - recycle_time += time; + ISC_QP_ADD(recycle_time, time); if (free > 0) { LOG_STATS("qp marksweep" PRItime "free %u chunks", time, free); @@ -945,7 +969,7 @@ compact(dns_qp_t *qp) { qp->compact_all = false; isc_nanosecs_t time = isc_time_monotonic() - start; - atomic_fetch_add_relaxed(&compact_time, time); + ISC_QP_ADD(compact_time, time); LOG_STATS("qp compact" PRItime "leaf %u live %u used %u free %u hold %u", @@ -1073,9 +1097,9 @@ dns_qpmulti_memusage(dns_qpmulti_t *mult void dns_qp_gctime(isc_nanosecs_t *compact_p, isc_nanosecs_t *recycle_p, isc_nanosecs_t *rollback_p) { - *compact_p = atomic_load_relaxed(&compact_time); - *recycle_p = atomic_load_relaxed(&recycle_time); - *rollback_p = atomic_load_relaxed(&rollback_time); + *compact_p = ISC_QP_GET(compact_time); + *recycle_p = ISC_QP_GET(recycle_time); + *rollback_p = ISC_QP_GET(rollback_time); } /*********************************************************************** @@ -1300,7 +1324,7 @@ dns_qpmulti_rollback(dns_qpmulti_t *mult INSIST(multi->rollback == NULL); isc_nanosecs_t time = isc_time_monotonic() - start; - atomic_fetch_add_relaxed(&rollback_time, time); + ISC_QP_ADD(rollback_time, time); LOG_STATS("qp rollback" PRItime "free %u chunks", time, free); Index: src/external/mpl/bind/dist/lib/dns/xfrin.c diff -u src/external/mpl/bind/dist/lib/dns/xfrin.c:1.16 src/external/mpl/bind/dist/lib/dns/xfrin.c:1.17 --- src/external/mpl/bind/dist/lib/dns/xfrin.c:1.16 Sun Jan 26 11:25:26 2025 +++ src/external/mpl/bind/dist/lib/dns/xfrin.c Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: xfrin.c,v 1.16 2025/01/26 16:25:26 christos Exp $ */ +/* $NetBSD: xfrin.c,v 1.17 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -84,6 +84,34 @@ typedef enum { XFRST_AXFR_END } xfrin_state_t; +#ifdef _LP64 +#define ISC_XFRIN_LOAD(a, t) atomic_load_relaxed(a) +#define ISC_XFRIN_STORE(a, b) atomic_store_relaxed(a, b) +#define ISC_XFRIN_ADD(a, b) atomic_fetch_add_relaxed(a, b) +#else +static isc_mutex_t xfrin_lock = PTHREAD_MUTEX_INITIALIZER; +#define ISC_XFRIN_LOAD(a, t) \ + ({ \ + isc_mutex_lock(&xfrin_lock); \ + t x = *(a); \ + isc_mutex_unlock(&xfrin_lock); \ + x; \ + }) +#define ISC_XFRIN_STORE(a, b) \ + ({ \ + isc_mutex_lock(&xfrin_lock); \ + *(a) = (b); \ + isc_mutex_unlock(&xfrin_lock); \ + }) +#define ISC_XFRIN_ADD(a, b) \ + ({ \ + isc_mutex_lock(&xfrin_lock); \ + *(a) += (b); \ + isc_mutex_unlock(&xfrin_lock); \ + }) +#endif + + /*% * Incoming zone transfer context. */ @@ -153,8 +181,13 @@ struct dns_xfrin { */ atomic_uint nmsg; /*%< Number of messages recvd */ atomic_uint nrecs; /*%< Number of records recvd */ +#ifdef _LP64 atomic_uint_fast64_t nbytes; /*%< Number of bytes received */ _Atomic(isc_time_t) start; /*%< Start time of the transfer */ +#else + atomic_uint_fast32_t nbytes; /*%< Number of bytes received */ + isc_time_t start; /*%< Start time of the transfer */ +#endif _Atomic(dns_transport_type_t) soa_transport_type; atomic_uint_fast32_t end_serial; @@ -967,7 +1000,7 @@ isc_time_t dns_xfrin_getstarttime(dns_xfrin_t *xfr) { REQUIRE(VALID_XFRIN(xfr)); - return atomic_load_relaxed(&xfr->start); + return ISC_XFRIN_LOAD(&xfr->start, isc_time_t); } void @@ -1030,7 +1063,7 @@ dns_xfrin_getstats(dns_xfrin_t *xfr, uns SET_IF_NOT_NULL(nmsgp, atomic_load_relaxed(&xfr->nmsg)); SET_IF_NOT_NULL(nrecsp, atomic_load_relaxed(&xfr->nrecs)); - SET_IF_NOT_NULL(nbytesp, atomic_load_relaxed(&xfr->nbytes)); + SET_IF_NOT_NULL(nbytesp, ISC_XFRIN_LOAD(&xfr->nbytes, uint64_t)); } const isc_sockaddr_t * @@ -1218,7 +1251,7 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t atomic_init(&xfr->state, XFRST_ZONEXFRREQUEST); } - atomic_init(&xfr->start, isc_time_now()); + ISC_XFRIN_STORE(&xfr->start, isc_time_now()); if (tsigkey != NULL) { dns_tsigkey_attach(tsigkey, &xfr->tsigkey); @@ -1588,8 +1621,8 @@ xfrin_send_request(dns_xfrin_t *xfr) { atomic_store_relaxed(&xfr->nmsg, 0); atomic_store_relaxed(&xfr->nrecs, 0); - atomic_store_relaxed(&xfr->nbytes, 0); - atomic_store_relaxed(&xfr->start, isc_time_now()); + ISC_XFRIN_STORE(&xfr->nbytes, 0); + ISC_XFRIN_STORE(&xfr->start, isc_time_now()); msg->id = xfr->id; if (xfr->tsigctx != NULL) { @@ -1967,7 +2000,7 @@ xfrin_recv_done(isc_result_t result, isc * Update the number of messages and bytes received. */ atomic_fetch_add_relaxed(&xfr->nmsg, 1); - atomic_fetch_add_relaxed(&xfr->nbytes, buffer.used); + ISC_XFRIN_ADD(&xfr->nbytes, buffer.used); /* * Take the context back. @@ -2050,12 +2083,12 @@ xfrin_destroy(dns_xfrin_t *xfr) { * Calculate the length of time the transfer took, * and print a log message with the bytes and rate. */ - isc_time_t start = atomic_load_relaxed(&xfr->start); + isc_time_t start = ISC_XFRIN_LOAD(&xfr->start, isc_time_t); msecs = isc_time_microdiff(&now, &start) / 1000; if (msecs == 0) { msecs = 1; } - persec = (atomic_load_relaxed(&xfr->nbytes) * 1000) / msecs; + persec = (ISC_XFRIN_LOAD(&xfr->nbytes, uint64_t) * 1000) / msecs; if (xfr->expireoptset) { sep = ", expire option "; @@ -2068,7 +2101,7 @@ xfrin_destroy(dns_xfrin_t *xfr) { "%u.%03u secs (%u bytes/sec) (serial %" PRIuFAST32 "%s%s)", atomic_load_relaxed(&xfr->nmsg), atomic_load_relaxed(&xfr->nrecs), - atomic_load_relaxed(&xfr->nbytes), + ISC_XFRIN_LOAD(&xfr->nbytes, uint64_t), (unsigned int)(msecs / 1000), (unsigned int)(msecs % 1000), (unsigned int)persec, atomic_load_relaxed(&xfr->end_serial), sep, expireopt); Index: src/external/mpl/bind/dist/lib/dns/zone.c diff -u src/external/mpl/bind/dist/lib/dns/zone.c:1.21 src/external/mpl/bind/dist/lib/dns/zone.c:1.22 --- src/external/mpl/bind/dist/lib/dns/zone.c:1.21 Sun Jan 26 11:25:26 2025 +++ src/external/mpl/bind/dist/lib/dns/zone.c Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: zone.c,v 1.21 2025/01/26 16:25:26 christos Exp $ */ +/* $NetBSD: zone.c,v 1.22 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -260,6 +260,9 @@ struct dns_zone { /* Unlocked */ unsigned int magic; isc_mutex_t lock; +#ifndef _LP64 + isc_mutex_t atomic_lock; +#endif #ifdef DNS_ZONE_CHECKLOCK bool locked; #endif /* ifdef DNS_ZONE_CHECKLOCK */ @@ -289,8 +292,13 @@ struct dns_zone { int32_t journalsize; dns_rdataclass_t rdclass; dns_zonetype_t type; +#ifdef _LP64 atomic_uint_fast64_t flags; atomic_uint_fast64_t options; +#else + uint64_t flags; + uint64_t options; +#endif unsigned int db_argc; char **db_argv; isc_time_t expiretime; @@ -431,7 +439,11 @@ struct dns_zone { /*% * Autosigning/key-maintenance options */ +#ifdef _LP64 atomic_uint_fast64_t keyopts; +#else + uint64_t keyopts; +#endif /*% * True if added by "rndc addzone" @@ -518,10 +530,38 @@ struct dns_zone { (_z)->diff = (d); \ (_z)->offline = false; \ } while (0) +#ifdef _LP64 +#define ISC_ZONE_GET(z, f) atomic_load_relaxed(&(z)->f) +#define ISC_ZONE_SET(z, f, o) atomic_fetch_or(&(z)->f, (o)) +#define DNS_ZONE_CLR(z, f, o) atomic_fetch_and(&(z)->f, ~(o)) +#else +#define ISC_ZONE_GET(z, f) \ + ({ \ + isc_mutex_lock(&(z)->atomic_lock); \ + uint64_t x = (z)->f; \ + isc_mutex_unlock(&(z)->atomic_lock); \ + x; \ + }) +#define ISC_ZONE_SET(z, f, o) \ + ({ \ + isc_mutex_lock(&(z)->atomic_lock); \ + uint64_t x = ((z)->f | (o)); \ + isc_mutex_unlock(&(z)->atomic_lock); \ + x; \ + }) +#define ISC_ZONE_CLR(z, f, o) \ + ({ \ + isc_mutex_lock(&(z)->atomic_lock); \ + uint64_t x = ((z)->f & ~(o)); \ + isc_mutex_unlock(&(z)->atomic_lock); \ + x; \ + }) +#endif +#define ISC_ZONE_TEST(z, f, o) ((ISC_ZONE_GET(z, f) & (o)) != 0) -#define DNS_ZONE_FLAG(z, f) ((atomic_load_relaxed(&(z)->flags) & (f)) != 0) -#define DNS_ZONE_SETFLAG(z, f) atomic_fetch_or(&(z)->flags, (f)) -#define DNS_ZONE_CLRFLAG(z, f) atomic_fetch_and(&(z)->flags, ~(f)) +#define DNS_ZONE_FLAG(z, f) ISC_ZONE_TEST(z, flags, f) +#define DNS_ZONE_SETFLAG(z, f) ISC_ZONE_SET(z, flags, f) +#define DNS_ZONE_CLRFLAG(z, f) ISC_ZONE_CLR(z, flags, f) typedef enum { DNS_ZONEFLG_REFRESH = 0x00000001U, /*%< refresh check in progress */ DNS_ZONEFLG_NEEDDUMP = 0x00000002U, /*%< zone need consolidation */ @@ -571,14 +611,14 @@ typedef enum { DNS_ZONEFLG___MAX = UINT64_MAX, /* trick to make the ENUM 64-bit wide */ } dns_zoneflg_t; -#define DNS_ZONE_OPTION(z, o) ((atomic_load_relaxed(&(z)->options) & (o)) != 0) -#define DNS_ZONE_SETOPTION(z, o) atomic_fetch_or(&(z)->options, (o)) -#define DNS_ZONE_CLROPTION(z, o) atomic_fetch_and(&(z)->options, ~(o)) - -#define DNS_ZONEKEY_OPTION(z, o) \ - ((atomic_load_relaxed(&(z)->keyopts) & (o)) != 0) -#define DNS_ZONEKEY_SETOPTION(z, o) atomic_fetch_or(&(z)->keyopts, (o)) -#define DNS_ZONEKEY_CLROPTION(z, o) atomic_fetch_and(&(z)->keyopts, ~(o)) + +#define DNS_ZONE_OPTION(z, o) ISC_ZONE_TEST(z, options, o) +#define DNS_ZONE_SETOPTION(z, o) ISC_ZONE_SET(z, options, o) +#define DNS_ZONE_CLROPTION(z, o) ISC_ZONE_CLR(z, options, o) +#define DNS_ZONEKEY_OPTION(z, o) ISC_ZONE_TEST(z, keyopts, o) +#define DNS_ZONEKEY_SETOPTION(z, o) ISC_ZONE_SET(z, keyopts, o) +#define DNS_ZONEKEY_CLROPTION(z, o) ISC_ZONE_CLR(z, keyopts, o) + /* Flags for zone_load() */ typedef enum { @@ -1166,6 +1206,9 @@ dns_zone_create(dns_zone_t **zonep, isc_ isc_mem_attach(mctx, &zone->mctx); isc_mutex_init(&zone->lock); +#ifndef _LP64 + isc_mutex_init(&zone->atomic_lock); +#endif ZONEDB_INITLOCK(&zone->dblock); isc_refcount_init(&zone->references, 1); @@ -1374,6 +1417,9 @@ zone_free(dns_zone_t *zone) { /* last stuff */ ZONEDB_DESTROYLOCK(&zone->dblock); isc_mutex_destroy(&zone->lock); +#ifndef _LP64 + isc_mutex_destroy(&zone->atomic_lock); +#endif zone->magic = 0; isc_mem_putanddetach(&zone->mctx, zone, sizeof(*zone)); } @@ -5803,7 +5849,7 @@ dns_zoneopt_t dns_zone_getoptions(dns_zone_t *zone) { REQUIRE(DNS_ZONE_VALID(zone)); - return atomic_load_relaxed(&zone->options); + return ISC_ZONE_GET(zone, options); } void @@ -5821,7 +5867,7 @@ unsigned int dns_zone_getkeyopts(dns_zone_t *zone) { REQUIRE(DNS_ZONE_VALID(zone)); - return atomic_load_relaxed(&zone->keyopts); + return ISC_ZONE_GET(zone, keyopts); } isc_result_t @@ -11431,7 +11477,7 @@ zone_refresh(dns_zone_t *zone) { * in progress at a time. */ - oldflags = atomic_load(&zone->flags); + oldflags = ISC_ZONE_GET(zone, flags); if (dns_remote_addresses(&zone->primaries) == NULL) { DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOPRIMARIES); if ((oldflags & DNS_ZONEFLG_NOPRIMARIES) == 0) { Index: src/external/mpl/bind/dist/lib/isc/histo.c diff -u src/external/mpl/bind/dist/lib/isc/histo.c:1.2 src/external/mpl/bind/dist/lib/isc/histo.c:1.3 --- src/external/mpl/bind/dist/lib/isc/histo.c:1.2 Sun Jan 26 11:25:37 2025 +++ src/external/mpl/bind/dist/lib/isc/histo.c Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: histo.c,v 1.2 2025/01/26 16:25:37 christos Exp $ */ +/* $NetBSD: histo.c,v 1.3 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -62,7 +62,11 @@ #define MAXCHUNK(hg) EXPONENTS(hg) #define CHUNKSIZE(hg) MANTISSAS(hg) +#ifdef _LP64 typedef atomic_uint_fast64_t hg_bucket_t; +#else +typedef atomic_uint_fast32_t hg_bucket_t; +#endif typedef atomic_ptr(hg_bucket_t) hg_chunk_t; struct isc_histo { Index: src/external/mpl/bind/dist/lib/isc/include/isc/types.h diff -u src/external/mpl/bind/dist/lib/isc/include/isc/types.h:1.13 src/external/mpl/bind/dist/lib/isc/include/isc/types.h:1.14 --- src/external/mpl/bind/dist/lib/isc/include/isc/types.h:1.13 Sun Jan 26 11:25:43 2025 +++ src/external/mpl/bind/dist/lib/isc/include/isc/types.h Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.13 2025/01/26 16:25:43 christos Exp $ */ +/* $NetBSD: types.h,v 1.14 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -74,8 +74,13 @@ typedef struct isc_sockaddr isc_sockadd typedef ISC_LIST(isc_sockaddr_t) isc_sockaddrlist_t; /*%< Socket Address List * */ typedef struct isc_stats isc_stats_t; /*%< Statistics */ +#ifdef _LP64 typedef int_fast64_t isc_statscounter_t; typedef atomic_int_fast64_t isc_atomic_statscounter_t; +#else +typedef int_fast32_t isc_statscounter_t; +typedef atomic_int_fast32_t isc_atomic_statscounter_t; +#endif typedef struct isc_symtab isc_symtab_t; /*%< Symbol Table */ typedef struct isc_textregion isc_textregion_t; /*%< Text Region */ typedef struct isc_time isc_time_t; /*%< Time */ Index: src/external/mpl/bind/dist/lib/ns/client.c diff -u src/external/mpl/bind/dist/lib/ns/client.c:1.22 src/external/mpl/bind/dist/lib/ns/client.c:1.23 --- src/external/mpl/bind/dist/lib/ns/client.c:1.22 Sun Jan 26 11:25:45 2025 +++ src/external/mpl/bind/dist/lib/ns/client.c Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: client.c,v 1.22 2025/01/26 16:25:45 christos Exp $ */ +/* $NetBSD: client.c,v 1.23 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -118,7 +118,11 @@ #define NS_CLIENT_DROPPORT 1 #endif /* ifndef NS_CLIENT_DROPPORT */ +#ifdef _LP64 atomic_uint_fast64_t ns_client_requests = 0; +#else +atomic_uint_fast32_t ns_client_requests = 0; +#endif static atomic_uint_fast32_t last_sigchecks_quota_log = 0; Index: src/external/mpl/bind/dist/lib/ns/include/ns/client.h diff -u src/external/mpl/bind/dist/lib/ns/include/ns/client.h:1.18 src/external/mpl/bind/dist/lib/ns/include/ns/client.h:1.19 --- src/external/mpl/bind/dist/lib/ns/include/ns/client.h:1.18 Sun Jan 26 11:25:46 2025 +++ src/external/mpl/bind/dist/lib/ns/include/ns/client.h Sun Jan 26 21:16:05 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: client.h,v 1.18 2025/01/26 16:25:46 christos Exp $ */ +/* $NetBSD: client.h,v 1.19 2025/01/27 02:16:05 christos Exp $ */ /* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") @@ -268,7 +268,11 @@ struct ns_client { */ #define NS_FAILCACHE_CD 0x01 +#ifdef _LP64 extern atomic_uint_fast64_t ns_client_requests; +#else +extern atomic_uint_fast32_t ns_client_requests; +#endif /*** *** Functions