[DTrace-devel] [PATCH v2 09/20] Use str2hval() instead of dt_strtab_hash() in non-strtab code
Eugene Loh
eugene.loh at oracle.com
Thu Jun 3 15:45:31 PDT 2021
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
One difference is that dt_strtab_hash() is 64-bit while str2hval() is
32-bit, but I don't think that causes any problems. For extra style
points, I suppose the "h" variables in dt_ident.c and dt_strtab.c can be
converted from ulong_t to uint_t, but it's okay (though vestigial) to
leave it as it is.
On 6/3/21 11:16 AM, Kris Van Hees wrote:
> An earlier patch ensured that str2hval() and dt_strtab_hash() provide
> the same hash function implementation. All code that used to call
> dt_strtab_hash() to get a hash value for a string should and will now
> use the generic str2hval() function.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_ident.c | 12 +++++-------
> libdtrace/dt_kernel_module.c | 8 ++++----
> libdtrace/dt_module.c | 11 +++++------
> libdtrace/dt_printf.c | 6 +++---
> libdtrace/dt_provider.c | 8 ++++----
> libdtrace/dt_symtab.c | 19 ++++++++++---------
> 6 files changed, 31 insertions(+), 33 deletions(-)
>
> diff --git a/libdtrace/dt_ident.c b/libdtrace/dt_ident.c
> index 48a97954..2cc5450f 100644
> --- a/libdtrace/dt_ident.c
> +++ b/libdtrace/dt_ident.c
> @@ -17,7 +17,7 @@
> #include <dt_parser.h>
> #include <dt_provider.h>
> #include <dt_probe.h>
> -#include <dt_strtab.h>
> +#include <dt_string.h>
> #include <dt_impl.h>
>
> static void
> @@ -723,8 +723,7 @@ dt_idhash_update(dt_idhash_t *dhp)
> dt_ident_t *
> dt_idhash_lookup(dt_idhash_t *dhp, const char *name)
> {
> - size_t len;
> - ulong_t h = dt_strtab_hash(name, &len) % dhp->dh_hashsz;
> + ulong_t h = str2hval(name, 0) % dhp->dh_hashsz;
> dt_ident_t *idp;
>
> if (dhp->dh_tmpl != NULL)
> @@ -788,7 +787,7 @@ dt_idhash_insert(dt_idhash_t *dhp, const char *name, ushort_t kind,
> if (idp == NULL)
> return NULL;
>
> - h = dt_strtab_hash(name, NULL) % dhp->dh_hashsz;
> + h = str2hval(name, 0) % dhp->dh_hashsz;
> idp->di_next = dhp->dh_hash[h];
> idp->di_hash = dhp;
>
> @@ -809,7 +808,7 @@ dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
> if (dhp->dh_tmpl != NULL)
> dt_idhash_populate(dhp); /* fill hash w/ initial population */
>
> - h = dt_strtab_hash(idp->di_name, NULL) % dhp->dh_hashsz;
> + h = str2hval(idp->di_name, 0) % dhp->dh_hashsz;
> idp->di_next = dhp->dh_hash[h];
> idp->di_hash = dhp;
> idp->di_flags &= ~DT_IDFLG_ORPHAN;
> @@ -824,8 +823,7 @@ dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
> void
> dt_idhash_delete(dt_idhash_t *dhp, dt_ident_t *key)
> {
> - size_t len;
> - ulong_t h = dt_strtab_hash(key->di_name, &len) % dhp->dh_hashsz;
> + ulong_t h = str2hval(key->di_name, 0) % dhp->dh_hashsz;
> dt_ident_t **pp = &dhp->dh_hash[h];
> dt_ident_t *idp;
>
> diff --git a/libdtrace/dt_kernel_module.c b/libdtrace/dt_kernel_module.c
> index 4bf44532..bdd15986 100644
> --- a/libdtrace/dt_kernel_module.c
> +++ b/libdtrace/dt_kernel_module.c
> @@ -1,6 +1,6 @@
> /*
> * Oracle Linux DTrace.
> - * Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2009, 2021, Oracle and/or its affiliates. All rights reserved.
> * Licensed under the Universal Permissive License v 1.0 as shown at
> * http://oss.oracle.com/licenses/upl.
> */
> @@ -39,7 +39,7 @@ static pthread_mutex_t kern_path_update_lock = PTHREAD_MUTEX_INITIALIZER;
> dt_kern_path_t *
> dt_kern_path_create(dtrace_hdl_t *dtp, char *name, char *path)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_kernpathbuckets;
> + uint_t h = str2hval(name, 0) % dtp->dt_kernpathbuckets;
> dt_kern_path_t *dkpp;
>
> for (dkpp = dtp->dt_kernpaths[h]; dkpp != NULL; dkpp = dkpp->dkp_next) {
> @@ -69,7 +69,7 @@ dt_kern_path_create(dtrace_hdl_t *dtp, char *name, char *path)
> void
> dt_kern_path_destroy(dtrace_hdl_t *dtp, dt_kern_path_t *dkpp)
> {
> - uint_t h = dt_strtab_hash(dkpp->dkp_name, NULL) % dtp->dt_kernpathbuckets;
> + uint_t h = str2hval(dkpp->dkp_name, 0) % dtp->dt_kernpathbuckets;
> dt_kern_path_t *scan_dkpp;
> dt_kern_path_t *prev_dkpp = NULL;
>
> @@ -178,7 +178,7 @@ dt_kern_path_update(dtrace_hdl_t *dtp)
> dt_kern_path_t *
> dt_kern_path_lookup_by_name(dtrace_hdl_t *dtp, const char *name)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_kernpathbuckets;
> + uint_t h = str2hval(name, 0) % dtp->dt_kernpathbuckets;
> dt_kern_path_t *dkpp;
>
> if (dtp->dt_nkernpaths == 0) {
> diff --git a/libdtrace/dt_module.c b/libdtrace/dt_module.c
> index 80c5ac48..aaf125b8 100644
> --- a/libdtrace/dt_module.c
> +++ b/libdtrace/dt_module.c
> @@ -1,6 +1,6 @@
> /*
> * Oracle Linux DTrace.
> - * Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2009, 2021, Oracle and/or its affiliates. All rights reserved.
> * Licensed under the Universal Permissive License v 1.0 as shown at
> * http://oss.oracle.com/licenses/upl.
> */
> @@ -23,7 +23,6 @@
>
> #include <zlib.h>
>
> -#include <dt_strtab.h>
> #include <dt_kernel_module.h>
> #include <dt_module.h>
> #include <dt_impl.h>
> @@ -54,7 +53,7 @@ dt_module_symhash_insert(dt_module_t *dmp, const char *name, uint_t id)
> assert(dmp->dm_symfree < dmp->dm_nsymelems + 1);
>
> dsp->dms_symid = id;
> - h = dt_strtab_hash(name, NULL) % dmp->dm_nsymbuckets;
> + h = str2hval(name, 0) % dmp->dm_nsymbuckets;
> dsp->dms_next = dmp->dm_symbuckets[h];
> dmp->dm_symbuckets[h] = dmp->dm_symfree++;
> }
> @@ -97,7 +96,7 @@ dt_module_symgelf64(const Elf64_Sym *src, GElf_Sym *dst)
> dt_module_t *
> dt_module_create(dtrace_hdl_t *dtp, const char *name)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_modbuckets;
> + uint_t h = str2hval(name, 0) % dtp->dt_modbuckets;
> dt_module_t *dmp;
>
> for (dmp = dtp->dt_mods[h]; dmp != NULL; dmp = dmp->dm_next)
> @@ -125,7 +124,7 @@ dt_module_create(dtrace_hdl_t *dtp, const char *name)
> dt_module_t *
> dt_module_lookup_by_name(dtrace_hdl_t *dtp, const char *name)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_modbuckets;
> + uint_t h = str2hval(name, 0) % dtp->dt_modbuckets;
> dt_module_t *dmp;
>
> /* 'genunix' is an alias for 'vmlinux'. */
> @@ -672,7 +671,7 @@ dt_module_unload(dtrace_hdl_t *dtp, dt_module_t *dmp)
> void
> dt_module_destroy(dtrace_hdl_t *dtp, dt_module_t *dmp)
> {
> - uint_t h = dt_strtab_hash(dmp->dm_name, NULL) % dtp->dt_modbuckets;
> + uint_t h = str2hval(dmp->dm_name, 0) % dtp->dt_modbuckets;
> dt_module_t *scan_dmp;
> dt_module_t *prev_dmp = NULL;
>
> diff --git a/libdtrace/dt_printf.c b/libdtrace/dt_printf.c
> index ce6d495f..a93044a6 100644
> --- a/libdtrace/dt_printf.c
> +++ b/libdtrace/dt_printf.c
> @@ -1,6 +1,6 @@
> /*
> * Oracle Linux DTrace.
> - * Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2009, 2021, Oracle and/or its affiliates. All rights reserved.
> * Licensed under the Universal Permissive License v 1.0 as shown at
> * http://oss.oracle.com/licenses/upl.
> */
> @@ -652,7 +652,7 @@ dt_pfdict_create(dtrace_hdl_t *dtp)
> }
>
> memcpy(pfc, pfd, sizeof(dt_pfconv_t));
> - h = dt_strtab_hash(pfc->pfc_name, NULL) % n;
> + h = str2hval(pfc->pfc_name, 0) % n;
> pfc->pfc_next = pdi->pdi_buckets[h];
> pdi->pdi_buckets[h] = pfc;
>
> @@ -725,7 +725,7 @@ static const dt_pfconv_t *
> dt_pfdict_lookup(dtrace_hdl_t *dtp, const char *name)
> {
> dt_pfdict_t *pdi = dtp->dt_pfdict;
> - uint_t h = dt_strtab_hash(name, NULL) % pdi->pdi_nbuckets;
> + uint_t h = str2hval(name, 0) % pdi->pdi_nbuckets;
> const dt_pfconv_t *pfc;
>
> for (pfc = pdi->pdi_buckets[h]; pfc != NULL; pfc = pfc->pfc_next) {
> diff --git a/libdtrace/dt_provider.c b/libdtrace/dt_provider.c
> index 6821ac6e..3d083671 100644
> --- a/libdtrace/dt_provider.c
> +++ b/libdtrace/dt_provider.c
> @@ -1,6 +1,6 @@
> /*
> * Oracle Linux DTrace.
> - * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2006, 2021, Oracle and/or its affiliates. All rights reserved.
> * Licensed under the Universal Permissive License v 1.0 as shown at
> * http://oss.oracle.com/licenses/upl.
> */
> @@ -37,7 +37,7 @@ dt_provider_insert(dtrace_hdl_t *dtp, dt_provider_t *pvp, uint_t h)
> dt_provider_t *
> dt_provider_lookup(dtrace_hdl_t *dtp, const char *name)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_provbuckets;
> + uint_t h = str2hval(name, 0) % dtp->dt_provbuckets;
> dt_provider_t *pvp;
>
> for (pvp = dtp->dt_provs[h]; pvp != NULL; pvp = pvp->pv_next) {
> @@ -72,7 +72,7 @@ dt_provider_create(dtrace_hdl_t *dtp, const char *name,
> memcpy(&pvp->desc.dtvd_attr, pattr, sizeof(dtrace_pattr_t));
>
> return dt_provider_insert(dtp, pvp,
> - dt_strtab_hash(name, NULL) % dtp->dt_provbuckets);
> + str2hval(name, 0) % dtp->dt_provbuckets);
> }
>
> void
> @@ -83,7 +83,7 @@ dt_provider_destroy(dtrace_hdl_t *dtp, dt_provider_t *pvp)
>
> assert(pvp->pv_hdl == dtp);
>
> - h = dt_strtab_hash(pvp->desc.dtvd_name, NULL) % dtp->dt_provbuckets;
> + h = str2hval(pvp->desc.dtvd_name, 0) % dtp->dt_provbuckets;
> pp = &dtp->dt_provs[h];
>
> while (*pp != NULL && *pp != pvp)
> diff --git a/libdtrace/dt_symtab.c b/libdtrace/dt_symtab.c
> index aa511169..4b7f8b9d 100644
> --- a/libdtrace/dt_symtab.c
> +++ b/libdtrace/dt_symtab.c
> @@ -1,3 +1,10 @@
> +/*
> + * Oracle Linux DTrace.
> + * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
> + * Licensed under the Universal Permissive License v 1.0 as shown at
> + * http://oss.oracle.com/licenses/upl.
> + */
> +
> /*
> * Symbol table support for DTrace.
> *
> @@ -8,18 +15,12 @@
> * TODO: increase efficiency (perhaps Huffman-coding symbol names?)
> */
>
> -/*
> - * Oracle Linux DTrace.
> - * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
> - * Licensed under the Universal Permissive License v 1.0 as shown at
> - * http://oss.oracle.com/licenses/upl.
> - */
> -
> #include <stdlib.h>
> #include <string.h>
> #include <dt_symtab.h>
> #include <dt_impl.h>
> #include <dt_list.h>
> +#include <dt_string.h>
> #include <unistd.h>
>
> #define DT_ST_SORTED 0x01 /* Sorted, ready for searching. */
> @@ -245,7 +246,7 @@ dt_symbol_insert(dt_symtab_t *symtab, const char *name,
> /*
> * Add to lookup-by-name hash table.
> */
> - h = dt_strtab_hash(name, NULL) % symtab->dtst_symbuckets;
> + h = str2hval(name, 0) % symtab->dtst_symbuckets;
> dtsp->dts_next = symtab->dtst_syms_by_name[h];
> symtab->dtst_syms_by_name[h] = dtsp;
>
> @@ -257,7 +258,7 @@ dt_symbol_insert(dt_symtab_t *symtab, const char *name,
> dt_symbol_t *
> dt_symbol_by_name(dt_symtab_t *symtab, const char *name)
> {
> - uint_t h = dt_strtab_hash(name, NULL) % symtab->dtst_symbuckets;
> + uint_t h = str2hval(name, 0) % symtab->dtst_symbuckets;
> dt_symbol_t *dtsp;
> int packed = symtab->dtst_flags & DT_ST_PACKED;
>
More information about the DTrace-devel
mailing list