From nobody Wed Aug 9 07:28:39 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RLM9g63cPz4mL6m; Wed, 9 Aug 2023 07:28:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RLM9g5G83z4S6w; Wed, 9 Aug 2023 07:28:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691566119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=i+avjXaD5lcgpdXqfiGORKu5l2xsLlOnWSQpUKOvSyo=; b=QI+YmAXj6qgmfC9nunlyfNLa087Di7j8lbr0zyH2A/hroh/3Kk3hDsFyMPUuCCDdpooPyF tzbUTeYhXkEx0llKpysaOVjmzLTW30y88RI6cd8nITCE5Ycoi8vB9Ik0hM2761e9HH8Ngk XgOJDut6vtfvQB9rCBi11HXGskYlqVugLmJcErO0Z0wrsAEL4QgZXA4Y4X3euvcNb83KpH WHMce+ETZeVcr2kVgQjdXdIv+5QqPPemGv75kF4RqaORY/cKP0Fv1fcO8X94QQveGKcypw ViTsx7SWWwYHZOFI0D9d8oN+OpFuhb+bCTqZPLUFws7wdcRfAiTG2k4QJEKYww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691566119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=i+avjXaD5lcgpdXqfiGORKu5l2xsLlOnWSQpUKOvSyo=; b=DjWkch0VSCnWSF9R4QYmUWNk4aREqw8yMvQcI95WUDnuPxMbMe4ly/06fzXyfGQ24+/kwA nyFPWsaF32HCMADnj+9xYPHV7zD7Q/H5dSXmX/i55eSUDwH8rS52aX+mTly8Io54UT6hbc 07gX4dwe4Q84HXh0s0N0RPeOtRRBc2pqZVP7bI8to5b0ZpMF8z9qUUE9Nu5HjjmLSOOz6T JICc64QWbJkgf4fgq9o45pbiy40SyozmU7n9n3UMT1bWCgeYoxObyscevh4B6UI9flKE06 VhIIGUJRdcGR99p8pxjLOBFBHVLMj+f5toXdgPpQxW//x3OSS9CDx5eLH139lw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1691566119; a=rsa-sha256; cv=none; b=GtBw88xnw+gKTwlN/xcCLc9rXQk1UV2tiVrYlHaLJ96/MT3NpzFHsJVrgqY9WHF0qebMUh dBBmuXewzsvngzwWLMA2SZVW42XKemkoacsTpeNiiSx+zOedt2peE+PjhNT4vnaaEjDHRp RcoBJoNM3r+8D/O2Mh1IFiAmol/eGLIhiDabMMyVT1Q45+k/x7Wk4Ux9SBogB9bBSu+W6w aWhVAXogDBi7cYeVQdtLwJBFQdUZYBMvRwi+Kial35DcahWT1InrvCq8QOUE2rw4OZp8Ai EzElN+gUx3wjcuXqTShfHrYlANIIxPEYYUDcq4IxBOb8zavTAU0ZVTJJ666Ygg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RLM9g4HQ4z16Rq; Wed, 9 Aug 2023 07:28:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3797Sd7I023956; Wed, 9 Aug 2023 07:28:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3797SdPd023953; Wed, 9 Aug 2023 07:28:39 GMT (envelope-from git) Date: Wed, 9 Aug 2023 07:28:39 GMT Message-Id: <202308090728.3797SdPd023953@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Doug Moore Subject: git: 15047a65099f - main - rangesets: use PCTRIE_DEFINE List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dougm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 15047a65099f3d26b1d3ced5037dd950e4a6fc46 Auto-Submitted: auto-generated The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=15047a65099f3d26b1d3ced5037dd950e4a6fc46 commit 15047a65099f3d26b1d3ced5037dd950e4a6fc46 Author: Doug Moore AuthorDate: 2023-08-09 07:26:25 +0000 Commit: Doug Moore CommitDate: 2023-08-09 07:26:25 +0000 rangesets: use PCTRIE_DEFINE subr_rangeset.c is the only source file that calls functions like pctrie_insert and pctrie_remove directly; other users of pctries use the PCTRIE_DEFINE macro to define interfaces to pctrie that let them ignore issues of offsets within structs and uint64_t return values. Change subr_rangeset.c to use PCTRIE_DEFINE too. And change pctrie.h to mark the lookup function as unused, to avoid warnings when compiling files, like subr_rangeset.c, that don't invoke lookup(). Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D41391 --- sys/kern/subr_rangeset.c | 72 +++++++++++++++++++----------------------------- sys/sys/pctrie.h | 2 +- 2 files changed, 29 insertions(+), 45 deletions(-) diff --git a/sys/kern/subr_rangeset.c b/sys/kern/subr_rangeset.c index c8af58c6f84f..a27126ab127b 100644 --- a/sys/kern/subr_rangeset.c +++ b/sys/kern/subr_rangeset.c @@ -72,6 +72,8 @@ rs_node_free(struct pctrie *ptree __unused, void *node) uma_zfree(rs_node_zone, node); } +PCTRIE_DEFINE(RANGESET, rs_el, re_start, rs_node_alloc, rs_node_free); + void rangeset_init(struct rangeset *rs, rs_dup_data_t dup_data, rs_free_data_t free_data, void *data_ctx, u_int alloc_flags) @@ -96,16 +98,10 @@ bool rangeset_check_empty(struct rangeset *rs, uint64_t start, uint64_t end) { struct rs_el *r; - uint64_t *r1; rangeset_check(rs); - r1 = pctrie_lookup_le(&rs->rs_trie, end); - if (r1 != NULL) { - r = __containerof(r1, struct rs_el, re_start); - if (r->re_end > start) - return (false); - } - return (true); + r = RANGESET_PCTRIE_LOOKUP_LE(&rs->rs_trie, end); + return (r == NULL || r->re_end <= start); } int @@ -122,7 +118,7 @@ rangeset_insert(struct rangeset *rs, uint64_t start, uint64_t end, r = data; r->re_start = start; r->re_end = end; - error = pctrie_insert(&rs->rs_trie, &r->re_start, rs_node_alloc); + error = RANGESET_PCTRIE_INSERT(&rs->rs_trie, r); rangeset_check(rs); return (error); } @@ -132,16 +128,14 @@ rangeset_remove_pred(struct rangeset *rs, uint64_t start, uint64_t end, rs_pred_t pred) { struct rs_el *r, *rn; - uint64_t *r1; int error; rangeset_check(rs); error = 0; for (; end > 0 && start < end;) { - r1 = pctrie_lookup_le(&rs->rs_trie, end - 1); - if (r1 == NULL) + r = RANGESET_PCTRIE_LOOKUP_LE(&rs->rs_trie, end - 1); + if (r == NULL) break; - r = __containerof(r1, struct rs_el, re_start); /* * ------============================--|-------|---- @@ -167,8 +161,8 @@ rangeset_remove_pred(struct rangeset *rs, uint64_t start, uint64_t end, */ end = r->re_start; if (pred(rs->rs_data_ctx, r)) { - pctrie_remove(&rs->rs_trie, r->re_start, - rs_node_free); + RANGESET_PCTRIE_REMOVE(&rs->rs_trie, + r->re_start); rs->rs_free_data(rs->rs_data_ctx, r); } continue; @@ -180,11 +174,10 @@ rangeset_remove_pred(struct rangeset *rs, uint64_t start, uint64_t end, */ if (r->re_start >= start) { if (pred(rs->rs_data_ctx, r)) { - pctrie_remove(&rs->rs_trie, r->re_start, - rs_node_free); + RANGESET_PCTRIE_REMOVE(&rs->rs_trie, + r->re_start); r->re_start = end; - error = pctrie_insert(&rs->rs_trie, - &r->re_start, rs_node_alloc); + error = RANGESET_PCTRIE_INSERT(&rs->rs_trie, r); /* * The insert above must succeed * because rs_node zone is marked @@ -215,8 +208,7 @@ rangeset_remove_pred(struct rangeset *rs, uint64_t start, uint64_t end, } rn->re_start = end; rn->re_end = r->re_end; - error = pctrie_insert(&rs->rs_trie, &rn->re_start, - rs_node_alloc); + error = RANGESET_PCTRIE_INSERT(&rs->rs_trie, rn); if (error != 0) { rs->rs_free_data(rs->rs_data_ctx, rn); break; @@ -247,14 +239,12 @@ void rangeset_remove_all(struct rangeset *rs) { struct rs_el *r; - uint64_t *r1; for (;;) { - r1 = pctrie_lookup_ge(&rs->rs_trie, 0); - if (r1 == NULL) + r = RANGESET_PCTRIE_LOOKUP_GE(&rs->rs_trie, 0); + if (r == NULL) break; - r = __containerof(r1, struct rs_el, re_start); - pctrie_remove(&rs->rs_trie, r->re_start, rs_node_free); + RANGESET_PCTRIE_REMOVE(&rs->rs_trie, r->re_start); rs->rs_free_data(rs->rs_data_ctx, r); } } @@ -263,13 +253,11 @@ void * rangeset_lookup(struct rangeset *rs, uint64_t place) { struct rs_el *r; - uint64_t *r1; rangeset_check(rs); - r1 = pctrie_lookup_le(&rs->rs_trie, place); - if (r1 == NULL) + r = RANGESET_PCTRIE_LOOKUP_LE(&rs->rs_trie, place); + if (r == NULL) return (NULL); - r = __containerof(r1, struct rs_el, re_start); if (r->re_end <= place) return (NULL); return (r); @@ -279,7 +267,7 @@ int rangeset_copy(struct rangeset *dst_rs, struct rangeset *src_rs) { struct rs_el *src_r, *dst_r; - uint64_t cursor, *r1; + uint64_t cursor; int error; MPASS(pctrie_is_empty(&dst_rs->rs_trie)); @@ -288,17 +276,15 @@ rangeset_copy(struct rangeset *dst_rs, struct rangeset *src_rs) error = 0; for (cursor = 0;; cursor = src_r->re_start + 1) { - r1 = pctrie_lookup_ge(&src_rs->rs_trie, cursor); - if (r1 == NULL) + src_r = RANGESET_PCTRIE_LOOKUP_GE(&src_rs->rs_trie, cursor); + if (src_r == NULL) break; - src_r = __containerof(r1, struct rs_el, re_start); dst_r = dst_rs->rs_dup_data(dst_rs->rs_data_ctx, src_r); if (dst_r == NULL) { error = ENOMEM; break; } - error = pctrie_insert(&dst_rs->rs_trie, &dst_r->re_start, - rs_node_alloc); + error = RANGESET_PCTRIE_INSERT(&dst_rs->rs_trie, dst_r); if (error != 0) break; } @@ -312,13 +298,12 @@ static void rangeset_check(struct rangeset *rs) { struct rs_el *r, *rp; - uint64_t cursor, *r1; + uint64_t cursor; for (cursor = 0, rp = NULL;; cursor = r->re_start + 1, rp = r) { - r1 = pctrie_lookup_ge(&rs->rs_trie, cursor); - if (r1 == NULL) + r = RANGESET_PCTRIE_LOOKUP_GE(&rs->rs_trie, cursor); + if (r == NULL) break; - r = __containerof(r1, struct rs_el, re_start); KASSERT(r->re_start < r->re_end, ("invalid interval rs %p elem %p (%#jx, %#jx)", rs, r, (uintmax_t)r->re_start, (uintmax_t)r->re_end)); @@ -343,7 +328,7 @@ DB_SHOW_COMMAND(rangeset, rangeset_show_fn) { struct rangeset *rs; struct rs_el *r; - uint64_t cursor, *r1; + uint64_t cursor; if (!have_addr) { db_printf("show rangeset addr\n"); @@ -353,10 +338,9 @@ DB_SHOW_COMMAND(rangeset, rangeset_show_fn) rs = (struct rangeset *)addr; db_printf("rangeset %p\n", rs); for (cursor = 0;; cursor = r->re_start + 1) { - r1 = pctrie_lookup_ge(&rs->rs_trie, cursor); - if (r1 == NULL) + r = RANGESET_PCTRIE_LOOKUP_GE(&rs->rs_trie, cursor); + if (r == NULL) break; - r = __containerof(r1, struct rs_el, re_start); db_printf(" el %p start %#jx end %#jx\n", r, r->re_start, r->re_end); } diff --git a/sys/sys/pctrie.h b/sys/sys/pctrie.h index 687236cdd872..62af29d3f754 100644 --- a/sys/sys/pctrie.h +++ b/sys/sys/pctrie.h @@ -83,7 +83,7 @@ name##_PCTRIE_INSERT(struct pctrie *ptree, struct type *ptr) \ allocfn); \ } \ \ -static __inline struct type * \ +static __inline __unused struct type * \ name##_PCTRIE_LOOKUP(struct pctrie *ptree, uint64_t key) \ { \ \