summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi28
-rw-r--r--gnu/services/pm.scm41
2 files changed, 67 insertions, 2 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 844f0d74fb..43ed051493 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -35,7 +35,8 @@ Copyright @copyright{} 2017 Mathieu Othacehe@*
Copyright @copyright{} 2017 Federico Beffa@*
Copyright @copyright{} 2017 Carlo Zancanaro@*
Copyright @copyright{} 2017 Thomas Danckaert@*
-Copyright @copyright{} 2017 humanitiesNerd
+Copyright @copyright{} 2017 humanitiesNerd@*
+Copyright @copyright{} 2017 Christopher Allan Webber
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -14617,6 +14618,31 @@ Defaults to @samp{#f}.
@end deftypevr
+
+The @code{(gnu services pm)} module provides an interface to
+thermald, a CPU frequency scaling service which helps prevent overheating.
+
+@defvr {Scheme Variable} thermald-service-type
+This is the service type for
+@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
+Thermal Daemon, which is responsible for controlling the thermal state
+of processors and preventing overheating.
+@end defvr
+
+@deftp {Data Type} thermald-configuration
+Data type representing the configuration of @code{thermald-service-type}.
+
+@table @asis
+@item @code{ignore-cpuid-check?} (default: @code{#f})
+Ignore cpuid check for supported CPU models.
+
+@item @code{thermald} (default: @var{thermald})
+Package object of thermald.
+
+@end table
+@end deftp
+
+
@node Miscellaneous Services
@subsubsection Miscellaneous Services
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
index 3cefe1874a..d40cb993e2 100644
--- a/gnu/services/pm.scm
+++ b/gnu/services/pm.scm
@@ -20,6 +20,7 @@
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix records)
+ #:use-module (gnu packages admin)
#:use-module (gnu packages linux)
#:use-module (gnu services)
#:use-module (gnu services base)
@@ -27,7 +28,10 @@
#:use-module (gnu services shepherd)
#:use-module (gnu system shadow)
#:export (tlp-service-type
- tlp-configuration))
+ tlp-configuration
+
+ thermald-configuration
+ thermald-service-type))
(define (uglify-field-name field-name)
(let ((str (symbol->string field-name)))
@@ -403,3 +407,38 @@ shutdown on system startup."))
(generate-documentation
`((tlp-configuration ,tlp-configuration-fields))
'tlp-configuration))
+
+
+
+;;;
+;;; thermald
+;;;
+;;; This service implements cpu scaling. Helps prevent overheating!
+
+(define-record-type* <thermald-configuration>
+ thermald-configuration make-thermald-configuration
+ thermald-configuration?
+ (ignore-cpuid-check? thermald-ignore-cpuid-check? ;boolean
+ (default #f))
+ (thermald thermald-thermald ;package
+ (default thermald)))
+
+(define (thermald-shepherd-service config)
+ (list
+ (shepherd-service
+ (provision '(thermald))
+ (documentation "Run thermald cpu frequency scaling.")
+ (start #~(make-forkexec-constructor
+ '(#$(file-append (thermald-thermald config) "/sbin/thermald")
+ "--no-daemon"
+ #$@(if (thermald-ignore-cpuid-check? config)
+ '("--ignore-cpuid-check")
+ '()))))
+ (stop #~(make-kill-destructor)))))
+
+(define thermald-service-type
+ (service-type
+ (name 'thermald)
+ (extensions (list (service-extension shepherd-root-service-type
+ thermald-shepherd-service)))
+ (default-value (thermald-configuration))))