summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThilo Bangert <bangert@gentoo.org>2009-10-27 09:07:18 +0000
committerThilo Bangert <bangert@gentoo.org>2009-10-27 09:07:18 +0000
commitf85782768e3fcccbcd3b9bc414a8dfa57e975d35 (patch)
tree11c2bc8ec3c0f53e9c921a381df0ece0650879d1 /sys-power
parentrestricting to old lm_sensors (bug #289829) (diff)
downloadhistorical-f85782768e3fcccbcd3b9bc414a8dfa57e975d35.tar.gz
historical-f85782768e3fcccbcd3b9bc414a8dfa57e975d35.tar.bz2
historical-f85782768e3fcccbcd3b9bc414a8dfa57e975d35.zip
fix logical error for CPU_ALL in cpu_evaluate (bug #187581), fix building with >lm_sensors-3 (bug #233481)
Package-Manager: portage-2.2_rc46/cvs/Linux i686
Diffstat (limited to 'sys-power')
-rw-r--r--sys-power/cpufreqd/ChangeLog10
-rw-r--r--sys-power/cpufreqd/Manifest5
-rw-r--r--sys-power/cpufreqd/cpufreqd-2.3.4-r1.ebuild84
-rw-r--r--sys-power/cpufreqd/files/2.2.1-cpu_all.patch35
-rw-r--r--sys-power/cpufreqd/files/cpufreqd-2.3.4-lm_sensors-3.patch156
5 files changed, 288 insertions, 2 deletions
diff --git a/sys-power/cpufreqd/ChangeLog b/sys-power/cpufreqd/ChangeLog
index 2600d946c2a1..c960f0b71351 100644
--- a/sys-power/cpufreqd/ChangeLog
+++ b/sys-power/cpufreqd/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for sys-power/cpufreqd
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-power/cpufreqd/ChangeLog,v 1.55 2009/10/20 13:06:45 bangert Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-power/cpufreqd/ChangeLog,v 1.56 2009/10/27 09:07:18 bangert Exp $
+
+*cpufreqd-2.3.4-r1 (27 Oct 2009)
+
+ 27 Oct 2009; Thilo Bangert <bangert@gentoo.org>
+ +files/2.2.1-cpu_all.patch, +cpufreqd-2.3.4-r1.ebuild,
+ +files/cpufreqd-2.3.4-lm_sensors-3.patch:
+ fix logical error for CPU_ALL in cpu_evaluate (bug #187581), fix building
+ with >lm_sensors-3 (bug #233481)
*cpufreqd-2.3.4 (20 Oct 2009)
diff --git a/sys-power/cpufreqd/Manifest b/sys-power/cpufreqd/Manifest
index 78eb0ec812cb..fe7601737097 100644
--- a/sys-power/cpufreqd/Manifest
+++ b/sys-power/cpufreqd/Manifest
@@ -1,3 +1,5 @@
+AUX 2.2.1-cpu_all.patch 1345 RMD160 46b6df317e04b932eb0c3bdc5d402e013090d764 SHA1 f04e1f2a791c9730f27017de7764f901532a6ae7 SHA256 ab3be707dd18b32687d27e56a409c9b0e0d2f10921f6b75cdf8605c941cf24cd
+AUX cpufreqd-2.3.4-lm_sensors-3.patch 5462 RMD160 0a459e3fb8e5c5f1a16ad4444fe0a9b1ffe733fd SHA1 70dad8a81b7e98ff92a2f91ecb6c25d3a890b441 SHA256 bc47ae6e2aa5b9bdfe41509f41ee0e19fefc3ba2a093a1df6b4f7f7653aa8e1c
AUX cpufreqd-conf.d.patch 269 RMD160 7d597a9fefff26dc0270a94ee6c360e1322390b7 SHA1 9ce182311b269da517f4f126aa485af1dded5423 SHA256 2e4c34e87daffb5929717ba6e91a36c0e85db1e042ff10a1483617f5f4d424e1
AUX cpufreqd-init.d 1156 RMD160 b64937c969717b5d7234a447b6e548b4c4269638 SHA1 9159187780cd31f657c8f771e534d7d55e2d68c3 SHA256 3fe98f8535e2e7e67f834865d0c3c18d2594d0aa1066e42b06b160955e1c8cf9
AUX nvclock0.8b-fd.patch 580 RMD160 a5db5cb4f0c0f3270e3f042b1033defd6c406376 SHA1 afd021a0144b6adb4dbb936f1a8181db609592fc SHA256 5dad49a3ce2a52b37c4711c497a46c373282bdf27b9b28834a0b5bd977066bf2
@@ -11,6 +13,7 @@ DIST nvclock0.8b.tar.gz 353127 RMD160 66cac5993dc141d00efaa95d8f5ec38ed53854f6 S
EBUILD cpufreqd-2.1.1.ebuild 1637 RMD160 fd8c8b13a3d70363fa8f795052aa2200343f1252 SHA1 dfb5cc7231f69f31928c1d656b8f40112efaaca1 SHA256 a48266d19c3d4009b5d0faf6910a74ed89471b32bd120731328bcf0f6a5469f7
EBUILD cpufreqd-2.2.0-r2.ebuild 1926 RMD160 314111a332e4cd9c647a26249d5d8b80019efd42 SHA1 3ffda088fbd7568dc267643c0c5371e5d0c2ee50 SHA256 e6a5c3d140cee3f1adb8d9cc48f673f1a84235a084e8908fd5ef4aff7b57ab1c
EBUILD cpufreqd-2.2.1.ebuild 1877 RMD160 1a3ad419483efe19032644e56898bfd10bd936a9 SHA1 44def411a04793a6fd8baa1df14fc1925633f6a8 SHA256 870e461ff92867eddc7ffd4851a46099100a8a2d4b85c9e1dc6879bc910d8388
+EBUILD cpufreqd-2.3.4-r1.ebuild 2097 RMD160 9acd9f37814ec4b4b1d20edd8ea3996a8d300ed0 SHA1 9f6dd7832bae3e66fb824a374a67f3fe1cd5c45e SHA256 5566f00ea55c4644a10177b25d2d64f0e93cfc820ed16a2900a5a591d7f863ca
EBUILD cpufreqd-2.3.4.ebuild 1988 RMD160 15a69444a7de079ca1469136a0aaa73540234994 SHA1 506e8a68d300bafad102bce8aae8b5df27610eaf SHA256 a30cb3b6549845dafb922adc59c34733738cead7dcbb18110eba89a4524e3d24
-MISC ChangeLog 12184 RMD160 f7c967804b83af5f8c26e748a2eef1303927d789 SHA1 57427ef371509eab644790e73a4718b440d6aa10 SHA256 af152ffef89ecbeba002271e35f819ebfd2633023c912bccd4f7f703601fe6e4
+MISC ChangeLog 12481 RMD160 af52efa12683a6f4da12a3f34463b1930e2f48b6 SHA1 7151643ad9f0c486f564c15c95067f9dd00ab3bd SHA256 168b70f09dee72be79382ee00073137b1165ec2afe99ac4ece216fe4a5e38092
MISC metadata.xml 423 RMD160 d843208101d0e0aef245a5d5219e23ba0c7a38a6 SHA1 a88afdeb4b95664870a648ee552b15c329b6a8a9 SHA256 acc4e407d32dcef3e0806c8fec555d9b5bc59cfc5d38f5e989dd5fea62723c93
diff --git a/sys-power/cpufreqd/cpufreqd-2.3.4-r1.ebuild b/sys-power/cpufreqd/cpufreqd-2.3.4-r1.ebuild
new file mode 100644
index 000000000000..54e7e45df626
--- /dev/null
+++ b/sys-power/cpufreqd/cpufreqd-2.3.4-r1.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-power/cpufreqd/cpufreqd-2.3.4-r1.ebuild,v 1.1 2009/10/27 09:07:18 bangert Exp $
+
+EAPI="2"
+
+inherit eutils
+
+NVCLOCK_VERSION="0.8b"
+
+DESCRIPTION="CPU Frequency Daemon"
+HOMEPAGE="http://www.linux.it/~malattia/wiki/index.php/Cpufreqd"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2
+ nvidia? ( http://www.linuxhardware.org/nvclock/nvclock${NVCLOCK_VERSION}.tar.gz )"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86"
+
+IUSE="acpi apm lm_sensors nforce2 nvidia pmu"
+RDEPEND=">=sys-power/cpufrequtils-002
+ lm_sensors? ( >sys-apps/lm_sensors-3 )"
+DEPEND="sys-apps/sed
+ ${RDEPEND}"
+
+src_prepare() {
+ epatch "${FILESDIR}"/${PN}-conf.d.patch
+ epatch "${FILESDIR}"/2.2.1-cpu_all.patch
+ use lm_sensors && epatch "${FILESDIR}"/${P}-lm_sensors-3.patch
+
+ if use nvidia; then
+ cd "${WORKDIR}"/nvclock${NVCLOCK_VERSION}
+ epatch "${FILESDIR}"/nvclock${NVCLOCK_VERSION}-fpic.patch
+ fi
+}
+
+src_configure() {
+ local config
+
+ if use nvidia; then
+ cd "${WORKDIR}"/nvclock${NVCLOCK_VERSION}
+ econf \
+ --disable-gtk \
+ --disable-qt \
+ --disable-nvcontrol \
+ || die "econf nvclock failed"
+ emake -j1 || die "emake nvclock failed"
+ config="--enable-nvclock=${WORKDIR}/nvclock${NVCLOCK_VERSION}"
+ fi
+
+ cd "${S}"
+ econf \
+ $(use_enable acpi) \
+ $(use_enable apm) \
+ $(use_enable lm_sensors sensors) \
+ $(use_enable nforce2) \
+ $(use_enable pmu) \
+ ${config} \
+ || die "econf failed"
+}
+
+src_compile() {
+ if use nvidia; then
+ cd "${WORKDIR}"/nvclock${NVCLOCK_VERSION}
+ fi
+
+ cd "${S}"
+ emake || die "make failed"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "make install failed"
+ rm -rf "${D}"/usr/$(get_libdir)/*.la
+ dodoc AUTHORS ChangeLog NEWS README TODO
+ newinitd "${FILESDIR}"/${PN}-init.d ${PN}
+}
+
+pkg_postinst() {
+ if [ -f "${ROOT}"/etc/conf.d/cpufreqd ] ; then
+ ewarn "An old \"/etc/conf.d/cpufreqd\" file was found. It breaks"
+ ewarn "the new init script! Please remove it."
+ ewarn "# rm /etc/conf.d/cpufreqd"
+ fi
+}
diff --git a/sys-power/cpufreqd/files/2.2.1-cpu_all.patch b/sys-power/cpufreqd/files/2.2.1-cpu_all.patch
new file mode 100644
index 000000000000..5613345d48e9
--- /dev/null
+++ b/sys-power/cpufreqd/files/2.2.1-cpu_all.patch
@@ -0,0 +1,35 @@
+--- cpufreqd-2.2.1.orig/src/cpufreqd_cpu.c 2007-08-03 13:55:54.000000000 +0200
++++ cpufreqd-2.2.1/src/cpufreqd_cpu.c 2007-08-03 14:17:36.000000000 +0200
+@@ -222,7 +222,7 @@
+ /* special handling for CPU_ALL and CPU_ANY */
+ if (c->cpu == CPU_ANY || c->cpu == CPU_ALL) {
+ for (i = 0; i < cinfo->cpus; i++) {
+- clog(LOG_DEBUG, "CPU%d user=%d nice=%d sys=%d\n", c->cpu,
++ clog(LOG_DEBUG, "CPU%d user=%d nice=%d sys=%d\n", i,
+ cusage[i].c_user, cusage[i].c_nice, cusage[i].c_sys);
+ cpu_percent = calculate_cpu_usage(&cusage[i], &cusage_old[i], c->nice_scale);
+ clog(LOG_DEBUG, "CPU%d %d%% - min=%d max=%d scale=%.2f (%s)\n", i, cpu_percent,
+@@ -234,14 +234,16 @@
+ if (c->cpu == CPU_ALL && !(cpu_percent >= c->min && cpu_percent <= c->max))
+ break;
+ }
+- /* if this code is reached then either CPU_ANY and none matches
+- * or CPU_ALL and all match
++ /* if this code is reached then
++ * either CPU_ANY and none matches
++ * or CPU_ALL and all match, where i == cinfo->cpus
++ * or CPU_ALL and break was called
+ */
+- if (c->cpu == CPU_ANY) {
+- c = c->next;
+- continue;
+- }
+- return MATCH; /*if (c->cpu == ALL)*/
++ if (c->cpu == CPU_ALL && i == cinfo->cpus)
++ return MATCH;
++
++ c = c->next;
++ continue;
+ }
+
+ /* cacluate weighted activity for the requested CPU */
diff --git a/sys-power/cpufreqd/files/cpufreqd-2.3.4-lm_sensors-3.patch b/sys-power/cpufreqd/files/cpufreqd-2.3.4-lm_sensors-3.patch
new file mode 100644
index 000000000000..e15b0bbee37a
--- /dev/null
+++ b/sys-power/cpufreqd/files/cpufreqd-2.3.4-lm_sensors-3.patch
@@ -0,0 +1,156 @@
+--- src/cpufreqd_sensors.c.orig 2009-03-21 12:17:15.000000000 +0100
++++ src/cpufreqd_sensors.c 2009-08-14 14:39:52.894513594 +0200
+@@ -23,10 +23,22 @@
+ #include <string.h>
+ #include "cpufreqd_plugin.h"
+
++#if !defined __GNUC__ || __GNUC__ < 3
++#define __attribute__(x)
++#endif
++
++#if SENSORS_API_VERSION < 0x400
++typedef sensors_feature_data sensors_feature;
++#endif
++
+ /* to hold monitored feature list and avoid reading all sensors */
+ struct sensors_monitor {
+ const sensors_chip_name *chip;
+- const sensors_feature_data *feat;
++ char chip_string[MAX_STRING_LEN];
++ const sensors_feature *feat;
++#if SENSORS_API_VERSION >= 0x400
++ const sensors_subfeature *sub_feat;
++#endif
+ double value;
+ struct sensors_monitor *next;
+ };
+@@ -133,27 +145,74 @@
+ struct sensors_monitor *list = monitor_list;
+
+ while (list) {
+- sensors_get_feature(*(list->chip), list->feat->number, &list->value);
+- clog(LOG_INFO, "%s: %.3f\n", list->feat->name, list->value);
++#if SENSORS_API_VERSION >= 0x400
++ if(sensors_get_value(list->chip, list->sub_feat->number, &list->value) < 0) {
++#else
++ if(sensors_get_feature(*(list->chip), list->feat->number, &list->value) < 0) {
++#endif
++ clog(LOG_ERR,"could not read value for %s\n",list->feat->name);
++ return -1;
++ }
++ clog(LOG_INFO, "%s:%s: %.3f\n", list->chip_string, list->feat->name, list->value);
+ list = list->next;
+ }
+
+ return 0;
+ }
+
++
++#if SENSORS_API_VERSION < 0x400
++/* Adapted from lm-sensors 2.10.8 prog/sensors/main.c */
++static int sensors_snprintf_chip_name(char *str, size_t size,
++ const sensors_chip_name *chip)
++{
++ switch(chip->bus) {
++ case SENSORS_CHIP_NAME_BUS_ISA:
++ return snprintf(str,size,"%s-isa-%04x",chip->prefix,chip->addr);
++ case SENSORS_CHIP_NAME_BUS_PCI:
++ return snprintf(str,size,"%s-pci-%04x",chip->prefix,chip->addr);
++ case SENSORS_CHIP_NAME_BUS_DUMMY:
++ return snprintf(str,size,"%s-%s-%04x",chip->prefix,chip->busname,chip->addr);
++ default:
++ return snprintf(str,size,"%s-i2c-%d-%02x",chip->prefix,chip->bus,chip->addr);
++ }
++}
++#endif
++
++__attribute__((unused)) static const char* sensors_get_chip_name(const sensors_chip_name *chip);
++static const char* sensors_get_chip_name(const sensors_chip_name *chip) {
++ static char name[MAX_STRING_LEN];
++ sensors_snprintf_chip_name(name, MAX_STRING_LEN, chip);
++ return name;
++}
++
+ /* this function can be pretty expensive (CPU time)?? */
+ static struct sensors_monitor * validate_feature_name(const char *name) {
+
+ /* get all sensors from first chip */
+ const sensors_chip_name *chip;
+- const sensors_feature_data *feat;
+- int nr = 0, nr1 = 0, nr2 = 0;
++ const sensors_feature *feat;
++ int nr = 0;
++#if SENSORS_API_VERSION >= 0x400
++ const sensors_subfeature *sub_feat;
++#else
++ int nr1 = 0, nr2 = 0;
++#endif
+ struct sensors_monitor *list = monitor_list;
+ struct sensors_monitor *ret = NULL;
+
+ /* scan the full thing */
++#if SENSORS_API_VERSION >= 0x400
++ while ( (chip = sensors_get_detected_chips(NULL, &nr)) != NULL) {
++ while ((feat = sensors_get_features(chip, &nr)) != NULL) {
++ /* sensor input? */
++ if((sub_feat = sensors_get_subfeature(chip, feat, feat->type << 8)) == NULL) {
++ clog(LOG_DEBUG, "Input subfeature not found for %s, skipping\n", feat->name);
++ continue;
++ }
++#else
+ while ( (chip = sensors_get_detected_chips(&nr)) != NULL) {
+- nr1 = nr2 = 0;
++ nr1 = nr2 = 0;
+ char *label = NULL;
+ clog(LOG_DEBUG, "Examining chip %s(%d)\n", chip->prefix, nr);
+ while ((feat = sensors_get_all_features(*chip, &nr1, &nr2)) != NULL) {
+@@ -164,22 +223,33 @@
+ if (sensors_get_label(*chip, feat->number, &label) != 0)
+ clog(LOG_DEBUG, "Couldn't get label for %s (%s)\n",
+ feat->name, strerror(errno));
++ }
++#endif
+
+ /* is it the one we are looking for? */
+- if (strncmp(feat->name, name, MAX_STRING_LEN) != 0 &&
+- (label && strncmp(label, name, MAX_STRING_LEN) != 0)) {
+- free(label);
++ if (strncmp(feat->name, name, MAX_STRING_LEN) != 0) {
++ continue;
++
++/* libsensors4 does this in sensors_get_features() */
++#if SENSORS_API_VERSION < 0x400
++ /* not ignored? */
++ } else if(sensors_get_ignored(*chip, feat->number) == 0) {
++ clog(LOG_INFO, "feature %s on chip %s set to ignore in %s, skipping\n",
++ feat->name, sensors_get_chip_name(chip), sensors_conffile);
+ continue;
++#endif
+
+ /* cache it */
+ } else if ((ret = calloc(1, sizeof(struct sensors_monitor))) != NULL) {
+- clog(LOG_DEBUG, "Creating new sensors_monitor for %s (%s)\n",
+- label, feat->name);
++ sensors_snprintf_chip_name(ret->chip_string, MAX_STRING_LEN, chip);
++ clog(LOG_DEBUG, "Creating new sensors_monitor for %s on chip %s\n",
++ name, ret->chip_string);
+ ret->chip = chip;
+ ret->feat = feat;
++#if SENSORS_API_VERSION >= 0x400
++ ret->sub_feat = sub_feat;
++#endif
+ ret->next = NULL;
+- /* free the label here, we are not using it anymore */
+- free(label);
+ /* append monitor to the cache list */
+ list = monitor_list;
+ if (list != NULL) {
+@@ -214,7 +284,7 @@
+ clog(LOG_DEBUG, "called with %s\n", ev);
+
+ /* try to parse the %[a-zA-Z0-9]:%d-%d format first */
+- if (sscanf(ev, "%32[^:]:%lf-%lf", ret->name, &ret->min, &ret->max) == 3) {
++ if (sscanf(ev, "%32[a-zA-Z0-9]:%lf-%lf", ret->name, &ret->min, &ret->max) == 3) {
+ /* validate feature name */
+ if ((ret->monitor = validate_feature_name(ret->name)) != NULL) {
+ clog(LOG_INFO, "parsed %s %.3f-%.3f\n", ret->name, ret->min, ret->max);