714
715 #ifdef DEBUG
716 dprintf((stderr, "old_total=%d\n", sysncpus));
717 for (i = 0; i < sysncpus; i++) {
718 dprintf((stderr, "old_cpu_list[%d]=%d\n", i, syscpuids[i]));
719 }
720 dprintf((stderr, "new_total=%d\n", newncpus));
721 for (i = 0; i < newncpus; i++) {
722 dprintf((stderr, "new_cpu_list[%d]=%d\n", i, newcpuids[i]));
723 }
724 #endif /* DEBUG */
725
726 (void) rcm_request_capacity_change(rcm->hdl, RCM_CPU_ALL,
727 RCM_QUERY|RCM_SCOPE, nvl, &rcm_info);
728
729 rv = add_rcm_clients(&ri_hdl->cpu_cap_clients, rcm, rcm_info, 0, NULL);
730
731 out:
732 s_free(syscpuids);
733 s_free(newcpuids);
734 if (nvl != NULL)
735 nvlist_free(nvl);
736 if (rcm_info != NULL)
737 rcm_free_info(rcm_info);
738
739 return (rv);
740 }
741
742 static int
743 syscpus(cpuid_t **cpuids, int *ncpus)
744 {
745 kstat_t *ksp;
746 kstat_ctl_t *kc;
747 cpuid_t *cp;
748 int i;
749
750 if ((*ncpus = sysconf(_SC_NPROCESSORS_CONF)) == -1) {
751 dprintf((stderr, "sysconf: %s\n", errno));
752 return (-1);
753 }
754
1754 }
1755 }
1756 return (NULL);
1757 }
1758
1759 /*
1760 * Create and link attachment point handle.
1761 */
1762 static ri_ap_t *
1763 ri_ap_alloc(char *ap_id, ri_hdl_t *hdl)
1764 {
1765 ri_ap_t *ap, *tmp;
1766
1767 if ((ap = calloc(1, sizeof (*ap))) == NULL) {
1768 dprintf((stderr, "calloc: %s\n", strerror(errno)));
1769 return (NULL);
1770 }
1771
1772 if (nvlist_alloc(&ap->conf_props, NV_UNIQUE_NAME, 0) != 0 ||
1773 nvlist_add_string(ap->conf_props, RI_AP_REQ_ID, ap_id) != 0) {
1774 if (ap->conf_props != NULL)
1775 nvlist_free(ap->conf_props);
1776 free(ap);
1777 return (NULL);
1778 }
1779
1780 if ((tmp = hdl->aps) == NULL) {
1781 hdl->aps = ap;
1782 } else {
1783 while (tmp->next != NULL) {
1784 tmp = tmp->next;
1785 }
1786 tmp->next = ap;
1787 }
1788
1789 return (ap);
1790 }
1791
1792 static ri_dev_t *
1793 ri_dev_alloc(void)
1794 {
|
714
715 #ifdef DEBUG
716 dprintf((stderr, "old_total=%d\n", sysncpus));
717 for (i = 0; i < sysncpus; i++) {
718 dprintf((stderr, "old_cpu_list[%d]=%d\n", i, syscpuids[i]));
719 }
720 dprintf((stderr, "new_total=%d\n", newncpus));
721 for (i = 0; i < newncpus; i++) {
722 dprintf((stderr, "new_cpu_list[%d]=%d\n", i, newcpuids[i]));
723 }
724 #endif /* DEBUG */
725
726 (void) rcm_request_capacity_change(rcm->hdl, RCM_CPU_ALL,
727 RCM_QUERY|RCM_SCOPE, nvl, &rcm_info);
728
729 rv = add_rcm_clients(&ri_hdl->cpu_cap_clients, rcm, rcm_info, 0, NULL);
730
731 out:
732 s_free(syscpuids);
733 s_free(newcpuids);
734 nvlist_free(nvl);
735 if (rcm_info != NULL)
736 rcm_free_info(rcm_info);
737
738 return (rv);
739 }
740
741 static int
742 syscpus(cpuid_t **cpuids, int *ncpus)
743 {
744 kstat_t *ksp;
745 kstat_ctl_t *kc;
746 cpuid_t *cp;
747 int i;
748
749 if ((*ncpus = sysconf(_SC_NPROCESSORS_CONF)) == -1) {
750 dprintf((stderr, "sysconf: %s\n", errno));
751 return (-1);
752 }
753
1753 }
1754 }
1755 return (NULL);
1756 }
1757
1758 /*
1759 * Create and link attachment point handle.
1760 */
1761 static ri_ap_t *
1762 ri_ap_alloc(char *ap_id, ri_hdl_t *hdl)
1763 {
1764 ri_ap_t *ap, *tmp;
1765
1766 if ((ap = calloc(1, sizeof (*ap))) == NULL) {
1767 dprintf((stderr, "calloc: %s\n", strerror(errno)));
1768 return (NULL);
1769 }
1770
1771 if (nvlist_alloc(&ap->conf_props, NV_UNIQUE_NAME, 0) != 0 ||
1772 nvlist_add_string(ap->conf_props, RI_AP_REQ_ID, ap_id) != 0) {
1773 nvlist_free(ap->conf_props);
1774 free(ap);
1775 return (NULL);
1776 }
1777
1778 if ((tmp = hdl->aps) == NULL) {
1779 hdl->aps = ap;
1780 } else {
1781 while (tmp->next != NULL) {
1782 tmp = tmp->next;
1783 }
1784 tmp->next = ap;
1785 }
1786
1787 return (ap);
1788 }
1789
1790 static ri_dev_t *
1791 ri_dev_alloc(void)
1792 {
|