diff --git a/usr/src/lib/fm/topo/libtopo/common/libtopo.h b/usr/src/lib/fm/topo/libtopo/common/libtopo.h index a5d9e66e06a5..62ad109808bd 100644 --- a/usr/src/lib/fm/topo/libtopo/common/libtopo.h +++ b/usr/src/lib/fm/topo/libtopo/common/libtopo.h @@ -23,7 +23,7 @@ * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. */ /* - * Copyright (c) 2019, Joyent, Inc. All rights reserved. + * Copyright 2019 Joyent, Inc. */ #ifndef _LIBTOPO_H @@ -293,6 +293,7 @@ typedef enum topo_hdl_errno { extern const char *topo_strerror(int); extern void topo_hdl_strfree(topo_hdl_t *, char *); +extern void topo_hdl_strfreev(topo_hdl_t *, char **, uint_t); extern void topo_debug_set(topo_hdl_t *, const char *, const char *); /* diff --git a/usr/src/lib/fm/topo/libtopo/common/mapfile-vers b/usr/src/lib/fm/topo/libtopo/common/mapfile-vers index ccb0d894942d..2a21c403b2d7 100644 --- a/usr/src/lib/fm/topo/libtopo/common/mapfile-vers +++ b/usr/src/lib/fm/topo/libtopo/common/mapfile-vers @@ -20,7 +20,7 @@ # # # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. -# Copyright (c) 2019, Joyent, Inc. +# Copyright 2019 Joyent, Inc. # # @@ -77,6 +77,7 @@ SYMBOL_VERSION SUNWprivate { topo_hdl_prominfo; topo_hdl_strdup; topo_hdl_strfree; + topo_hdl_strfreev; topo_hdl_zalloc; topo_led_state_name; topo_led_type_name; @@ -125,6 +126,7 @@ SYMBOL_VERSION SUNWprivate { topo_mod_str2nvl; topo_mod_strdup; topo_mod_strfree; + topo_mod_strfreev; topo_mod_unload; topo_mod_unregister; topo_mod_walk_init; diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_2xml.c b/usr/src/lib/fm/topo/libtopo/common/topo_2xml.c index 768d47d18295..853a373f2b5d 100644 --- a/usr/src/lib/fm/topo/libtopo/common/topo_2xml.c +++ b/usr/src/lib/fm/topo/libtopo/common/topo_2xml.c @@ -318,10 +318,7 @@ txml_print_prop(topo_hdl_t *thp, FILE *fp, tnode_t *node, const char *pgname, begin_end_element(fp, Propitem, Value, val[i], NULL); } - for (uint_t i = 0; i < nelem; i++) { - topo_hdl_strfree(thp, val[i]); - } - topo_hdl_free(thp, val, nelem * sizeof (char *)); + topo_hdl_strfreev(thp, val, nelem); end_element(fp, Propval); break; diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_mod.h b/usr/src/lib/fm/topo/libtopo/common/topo_mod.h index 5ef516cd094d..22e1907e9304 100644 --- a/usr/src/lib/fm/topo/libtopo/common/topo_mod.h +++ b/usr/src/lib/fm/topo/libtopo/common/topo_mod.h @@ -23,7 +23,7 @@ * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. */ /* - * Copyright (c) 2019, Joyent, Inc. All rights reserved. + * Copyright 2019 Joyent, Inc. */ #ifndef _TOPO_MOD_H @@ -220,6 +220,7 @@ extern void *topo_mod_zalloc(topo_mod_t *, size_t); extern void topo_mod_free(topo_mod_t *, void *, size_t); extern char *topo_mod_strdup(topo_mod_t *, const char *); extern void topo_mod_strfree(topo_mod_t *, char *); +extern void topo_mod_strfreev(topo_mod_t *, char **, uint_t); extern int topo_mod_nvalloc(topo_mod_t *, nvlist_t **, uint_t); extern int topo_mod_nvdup(topo_mod_t *, nvlist_t *, nvlist_t **); diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_mod.map b/usr/src/lib/fm/topo/libtopo/common/topo_mod.map index 0e9179746164..91ed5e460657 100644 --- a/usr/src/lib/fm/topo/libtopo/common/topo_mod.map +++ b/usr/src/lib/fm/topo/libtopo/common/topo_mod.map @@ -1,6 +1,6 @@ # # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. -# Copyright (c) 2019, Joyent, Inc. +# Copyright 2019 Joyent, Inc. # # CDDL HEADER START # @@ -40,6 +40,7 @@ SYMBOL_SCOPE { topo_mod_nvalloc { TYPE = FUNCTION; FLAGS = extern }; topo_mod_nvdup { TYPE = FUNCTION; FLAGS = extern }; topo_mod_strfree { TYPE = FUNCTION; FLAGS = extern }; + topo_mod_strfreev { TYPE = FUNCTION; FLAGS = extern }; topo_mod_strdup { TYPE = FUNCTION; FLAGS = extern }; topo_mod_clrdebug { TYPE = FUNCTION; FLAGS = extern }; diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_string.c b/usr/src/lib/fm/topo/libtopo/common/topo_string.c index 2c1f4517709e..53a628064761 100644 --- a/usr/src/lib/fm/topo/libtopo/common/topo_string.c +++ b/usr/src/lib/fm/topo/libtopo/common/topo_string.c @@ -23,8 +23,9 @@ * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ - -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright 2019 Joyent, Inc. + */ #include #include @@ -55,6 +56,15 @@ topo_hdl_strfree(topo_hdl_t *thp, char *s) topo_hdl_free(thp, s, strlen(s) + 1); } +void +topo_hdl_strfreev(topo_hdl_t *thp, char **strarr, uint_t nelem) +{ + for (uint_t i = 0; i < nelem; i++) + topo_hdl_strfree(thp, strarr[i]); + + topo_hdl_free(thp, strarr, (nelem * sizeof (char *))); +} + char * topo_mod_strdup(topo_mod_t *mod, const char *s) { @@ -67,6 +77,12 @@ topo_mod_strfree(topo_mod_t *mod, char *s) topo_hdl_strfree(mod->tm_hdl, s); } +void +topo_mod_strfreev(topo_mod_t *mod, char **strarr, uint_t nelem) +{ + topo_hdl_strfreev(mod->tm_hdl, strarr, nelem); +} + const char * topo_strbasename(const char *s) { diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_xml.c b/usr/src/lib/fm/topo/libtopo/common/topo_xml.c index 3e3241c8f317..58743077bd32 100644 --- a/usr/src/lib/fm/topo/libtopo/common/topo_xml.c +++ b/usr/src/lib/fm/topo/libtopo/common/topo_xml.c @@ -21,7 +21,7 @@ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2019, Joyent, Inc. + * Copyright 2019 Joyent, Inc. */ #include @@ -55,16 +55,6 @@ static int decorate_nodes(topo_mod_t *, tf_rdata_t *, xmlNodePtr, tnode_t *, tf_pad_t **); -static void -strarr_free(topo_mod_t *mod, char **arr, uint_t nelems) -{ - int i; - - for (i = 0; i < nelems; i++) - topo_mod_strfree(mod, arr[i]); - topo_mod_free(mod, arr, (nelems * sizeof (char *))); -} - int xmlattr_to_stab(topo_mod_t *mp, xmlNodePtr n, const char *stabname, topo_stability_t *rs) @@ -388,7 +378,7 @@ xlate_common(topo_mod_t *mp, xmlNodePtr xn, topo_type_t ptype, nvlist_t *nvl, } rv = nvlist_add_string_array(nvl, name, strarrbuf, nelems); - strarr_free(mp, strarrbuf, nelems); + topo_mod_strfreev(mp, strarrbuf, nelems); break; case TOPO_TYPE_FMRI_ARRAY: if ((nvlarrbuf = topo_mod_alloc(mp, (nelems * diff --git a/usr/src/lib/fm/topo/modules/common/fac_prov_ipmi/fac_prov_ipmi.c b/usr/src/lib/fm/topo/modules/common/fac_prov_ipmi/fac_prov_ipmi.c index b85395990abe..b3a81fdb51a1 100644 --- a/usr/src/lib/fm/topo/modules/common/fac_prov_ipmi/fac_prov_ipmi.c +++ b/usr/src/lib/fm/topo/modules/common/fac_prov_ipmi/fac_prov_ipmi.c @@ -23,7 +23,7 @@ * Use is subject to license terms. */ /* - * Copyright (c) 2019, Joyent, Inc. + * Copyright 2019 Joyent, Inc. * Copyright 2019 by Western Digital Corporation */ #include @@ -194,14 +194,6 @@ _topo_fini(topo_mod_t *mod) topo_mod_unregister(mod); } -static void -strarr_free(topo_mod_t *mod, char **arr, uint_t nelems) -{ - for (int i = 0; i < nelems; i++) - topo_mod_strfree(mod, arr[i]); - topo_mod_free(mod, arr, (nelems * sizeof (char *))); -} - /* * Some platforms (most notably G1/2N) use the 'platform event message' command * to manipulate disk fault LEDs over IPMI, but uses the standard sensor @@ -374,7 +366,7 @@ ipmi_sensor_state(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if ((hdl = topo_mod_ipmi_hold(mod)) == NULL) { topo_mod_dprintf(mod, "Failed to get IPMI handle\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } @@ -398,7 +390,7 @@ ipmi_sensor_state(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -416,7 +408,7 @@ ipmi_sensor_state(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s does not refer to a full or " "compact SDR\n", entity_refs[i]); topo_mod_ipmi_rele(mod); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } if ((reading = ipmi_get_sensor_reading(hdl, sensor_num)) @@ -424,18 +416,18 @@ ipmi_sensor_state(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "Failed to get sensor reading for sensor " "%s, sensor_num=%d (%s)\n", entity_refs[i], sensor_num, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } if (reading->isr_state_unavailable) { topo_mod_dprintf(mod, "Unavailable sensor %s, sensor_num=%d\n", entity_refs[i], sensor_num); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (topo_prop_get_string(node, TOPO_PGROUP_FACILITY, TOPO_SENSOR_CLASS, @@ -503,7 +495,7 @@ ipmi_sensor_reading(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if ((hdl = topo_mod_ipmi_hold(mod)) == NULL) { topo_mod_dprintf(mod, "Failed to get IPMI handle\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } @@ -527,7 +519,7 @@ ipmi_sensor_reading(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -540,7 +532,7 @@ ipmi_sensor_reading(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s does not refer to a full " "sensor SDR\n", entity_refs[i]); topo_mod_ipmi_rele(mod); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } @@ -548,7 +540,7 @@ ipmi_sensor_reading(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "Failed to get sensor reading for sensor " "%s, sensor_num=%d (%s)\n", entity_refs[i], sensor_num, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -558,10 +550,10 @@ ipmi_sensor_reading(topo_mod_t *mod, tnode_t *node, topo_version_t vers, != 0) { topo_mod_dprintf(mod, "Failed to convert sensor reading for " "sensor %s (%s)\n", entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); (void) snprintf(reading_str, BUFSZ, "%f", conv_reading); if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0 || @@ -623,7 +615,7 @@ ipmi_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -641,7 +633,7 @@ ipmi_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, &mode_in)) != 0) { topo_mod_dprintf(mod, "Failed to lookup %s nvpair " "(%s)\n", TOPO_PROP_VAL_VAL, strerror(ret)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -649,7 +641,7 @@ ipmi_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, mode_in != TOPO_LED_STATE_ON) { topo_mod_dprintf(mod, "Invalid property value: %d\n", mode_in); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -658,7 +650,7 @@ ipmi_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to set LED mode for " "%s (%s) to %s\n", __func__, entity_refs[i], ipmi_errmsg(hdl), ledmode ? "ON" : "OFF"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -670,12 +662,12 @@ ipmi_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to get LED mode for " "%s (%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0 || @@ -744,7 +736,7 @@ bay_locate_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -762,7 +754,7 @@ bay_locate_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, &mode_in)) != 0) { topo_mod_dprintf(mod, "Failed to lookup %s nvpair " "(%s)\n", TOPO_PROP_VAL_VAL, strerror(ret)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -770,7 +762,7 @@ bay_locate_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, mode_in != TOPO_LED_STATE_ON) { topo_mod_dprintf(mod, "Invalid property value: %d\n", mode_in); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -781,7 +773,7 @@ bay_locate_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if (ipmi_sunoem_led_set(hdl, gdl, ledmode) < 0) { topo_mod_dprintf(mod, "Failed to set LED mode for %s " "(%s)\n", entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -792,12 +784,12 @@ bay_locate_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if (ipmi_sunoem_led_get(hdl, gdl, &ledmode) < 0) { topo_mod_dprintf(mod, "Failed to get LED mode for %s " "(%s)\n", entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (ledmode == IPMI_SUNOEM_LED_MODE_SLOW || @@ -883,14 +875,14 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, */ if ((hdl = topo_mod_ipmi_hold(mod)) == NULL) { topo_mod_dprintf(mod, "Failed to get IPMI handle\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } if ((sp_devid = ipmi_get_deviceid(hdl)) == NULL) { topo_mod_dprintf(mod, "%s: GET DEVICEID command failed (%s)\n", __func__, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -908,7 +900,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, &ledmode)) != 0) { topo_mod_dprintf(mod, "Failed to lookup %s nvpair " "(%s)\n", TOPO_PROP_VAL_VAL, strerror(ret)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -929,7 +921,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -939,7 +931,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "Failed to set LED mode for %s (%s)\n", entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -956,7 +948,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -979,7 +971,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to send " "platform event mesg for %s (%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1000,7 +992,7 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1008,13 +1000,13 @@ bay_indicator_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to get LED mode for " "%s (%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } ledmode = mode_in; } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0 || @@ -1059,7 +1051,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if ((hdl = topo_mod_ipmi_hold(mod)) == NULL) { topo_mod_dprintf(mod, "Failed to get IPMI handle\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (-1); } for (i = 0; i < nelems; i++) { @@ -1074,7 +1066,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1092,7 +1084,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, &ledmode)) != 0) { topo_mod_dprintf(mod, "Failed to lookup %s nvpair " "(%s)\n", TOPO_PROP_VAL_VAL, strerror(ret)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -1109,7 +1101,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } else { topo_mod_dprintf(mod, "%s: Invalid LED mode: " "%d\n", __func__, ledmode); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1120,7 +1112,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to set " "sensor reading for %s (%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1136,7 +1128,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "Failed to get sensor reading " "for sensor %s (sensor num: %d) (error: %s)\n", entity_refs[i], cs->is_cs_number, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1145,7 +1137,7 @@ x4500_present_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, else ledmode = TOPO_LED_STATE_OFF; } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0 || @@ -1211,7 +1203,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, } if (! found_sdr) { - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1229,7 +1221,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, &mode_in)) != 0) { topo_mod_dprintf(mod, "Failed to lookup %s nvpair " "(%s)\n", TOPO_PROP_VAL_VAL, strerror(ret)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -1241,7 +1233,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, if ((sp_devid = ipmi_get_deviceid(hdl)) == NULL) { topo_mod_dprintf(mod, "%s: GET DEVICEID command failed " "(%s)\n", __func__, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1254,7 +1246,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, mode_in != TOPO_LED_STATE_ON) { topo_mod_dprintf(mod, "Invalid property value: " "%d\n", mode_in); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } @@ -1263,7 +1255,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "Failed to set LED mode " "for %s (%s)\n", entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1287,7 +1279,7 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to send " "platform event mesg for sensor 0 (%s)\n", __func__, ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } @@ -1300,12 +1292,12 @@ chassis_service_mode(topo_mod_t *mod, tnode_t *node, topo_version_t vers, topo_mod_dprintf(mod, "%s: Failed to get LED mode for " "%s (%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); return (-1); } } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); topo_mod_ipmi_rele(mod); if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0 || @@ -1529,10 +1521,10 @@ make_sensor_node(topo_mod_t *mod, tnode_t *pnode, struct sensor_data *sd, topo_mod_dprintf(mod, "%s: Failed to set entity_ref property " "on node: %s=%d (%s)\n", __func__, topo_node_name(fnode), topo_node_instance(fnode), topo_strerror(err)); - strarr_free(mod, entity_refs, 1); + topo_mod_strfreev(mod, entity_refs, 1); return (topo_mod_seterrno(mod, err)); } - strarr_free(mod, entity_refs, 1); + topo_mod_strfreev(mod, entity_refs, 1); if (topo_prop_set_string(fnode, TOPO_PGROUP_FACILITY, TOPO_SENSOR_CLASS, TOPO_PROP_IMMUTABLE, sd->sd_class, &err) != 0) { @@ -1755,7 +1747,7 @@ get_entity_info(topo_mod_t *mod, tnode_t *node, ipmi_handle_t *hdl, "(%s)\n", __func__, entity_refs[i], ipmi_errmsg(hdl)); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); if (! found_sdr) { topo_mod_ipmi_rele(mod); return (-1); @@ -1838,7 +1830,7 @@ ipmi_sensor_enum(topo_mod_t *mod, tnode_t *node, topo_version_t vers, out: topo_mod_ipmi_rele(mod); if (ei.ei_list != NULL) - strarr_free(mod, ei.ei_list, ei.ei_listsz); + topo_mod_strfreev(mod, ei.ei_list, ei.ei_listsz); return (ret); } @@ -1904,7 +1896,7 @@ ipmi_entity(topo_mod_t *mod, tnode_t *node, topo_version_t vers, default: topo_mod_dprintf(mod, "Invalid 'nparams' argval (%d)\n", nparams); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); return (topo_mod_seterrno(mod, EMOD_NVL_INVAL)); } entity_refs[i] = topo_mod_strdup(mod, buf); @@ -1917,11 +1909,11 @@ ipmi_entity(topo_mod_t *mod, tnode_t *node, topo_version_t vers, nelems) != 0) { topo_mod_dprintf(mod, "Failed to allocate 'out' nvlist\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); nvlist_free(nvl); return (topo_mod_seterrno(mod, EMOD_NOMEM)); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); *out = nvl; return (0); @@ -1980,11 +1972,11 @@ dimm_ipmi_entity(topo_mod_t *mod, tnode_t *node, topo_version_t vers, nvlist_add_string_array(nvl, TOPO_PROP_VAL_VAL, entity_refs, nelems) != 0) { topo_mod_dprintf(mod, "Failed to allocate 'out' nvlist\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); nvlist_free(nvl); return (topo_mod_seterrno(mod, EMOD_NOMEM)); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); *out = nvl; return (0); @@ -2052,11 +2044,11 @@ cs_ipmi_entity(topo_mod_t *mod, tnode_t *node, topo_version_t vers, nvlist_add_string_array(nvl, TOPO_PROP_VAL_VAL, entity_refs, nelems) != 0) { topo_mod_dprintf(mod, "Failed to allocate 'out' nvlist\n"); - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); nvlist_free(nvl); return (topo_mod_seterrno(mod, EMOD_NOMEM)); } - strarr_free(mod, entity_refs, nelems); + topo_mod_strfreev(mod, entity_refs, nelems); *out = nvl; return (0); diff --git a/usr/src/lib/fm/topo/modules/i86pc/chip/chip_serial.c b/usr/src/lib/fm/topo/modules/i86pc/chip/chip_serial.c index d2082b1b548e..87b152c237e7 100644 --- a/usr/src/lib/fm/topo/modules/i86pc/chip/chip_serial.c +++ b/usr/src/lib/fm/topo/modules/i86pc/chip/chip_serial.c @@ -23,6 +23,9 @@ * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright 2019 Joyent, Inc. + */ #include #include @@ -144,7 +147,7 @@ ipmi_serial_lookup(topo_mod_t *mod, char *ipmi_tag, char *buf) * The components are: * * yyyy: JEDEC ID in hex (2 byte manufacture ID, 2 byte continuation - * code). + * code). * * ll: The memory module's manufacturing location. * @@ -233,9 +236,7 @@ get_dimm_serial(topo_mod_t *mod, tnode_t *node, topo_version_t vers, /* topo errno already set */ rv = -1; } - for (i = 0; i < nelems; i++) - topo_mod_strfree(mod, entity_refs[i]); - topo_mod_free(mod, entity_refs, (nelems * sizeof (char *))); + topo_mod_strfreev(mod, entity_refs, nelems); return (rv); } diff --git a/usr/src/lib/fm/topo/modules/sun4v/platform-mem/mem.c b/usr/src/lib/fm/topo/modules/sun4v/platform-mem/mem.c index c3010bbbc53b..080c85720f9f 100644 --- a/usr/src/lib/fm/topo/modules/sun4v/platform-mem/mem.c +++ b/usr/src/lib/fm/topo/modules/sun4v/platform-mem/mem.c @@ -24,6 +24,9 @@ * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright 2019 Joyent, Inc. + */ #include #include @@ -209,18 +212,6 @@ mem_replaced(topo_mod_t *mod, tnode_t *node, topo_version_t vers, return (0); } -void -mem_strarray_free(topo_mod_t *mod, char **arr, size_t dim) -{ - int i; - - for (i = 0; i < dim; i++) { - if (arr[i] != NULL) - topo_mod_strfree(mod, arr[i]); - } - topo_mod_free(mod, arr, sizeof (char *) * dim); -} - /* * Niagara-1, Niagara-2, and Victoria Falls all have physical address * spaces of 40 bits.