summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-02-28 22:02:27 +0100
committerLudovic Courtès <ludo@gnu.org>2018-02-28 22:47:48 +0100
commit3c14e7e6bbc2f86f927816042df1a9f1c057e09c (patch)
treeb8efeb25f5f681a621abe32353355c4e42caca8f /gnu
parent4c853b7c11e96eb68891c5e48fefa835913fb589 (diff)
linux-modules: Use 'load-linux-module/fd'.
This should be more efficient than loading the whole thing in user space. * gnu/build/linux-modules.scm (load-linux-module*): Use 'load-linux-module/fd' instead of 'load-linux-module'. Remove 'slurp'.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/build/linux-modules.scm14
1 files changed, 7 insertions, 7 deletions
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 5ca7bf8e38..115a17c64e 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -180,10 +180,6 @@ success, false otherwise. When RECURSIVE? is true, load its dependencies
first (à la 'modprobe'.) The actual files containing modules depended on are
obtained by calling LOOKUP-MODULE with the module name. Modules whose name
appears in BLACK-LIST are not loaded."
- (define (slurp module)
- ;; TODO: Use 'finit_module' to reduce memory usage.
- (call-with-input-file file get-bytevector-all))
-
(define (black-listed? module)
(let ((result (member module black-list)))
(when result
@@ -200,16 +196,20 @@ appears in BLACK-LIST are not loaded."
(and (not (black-listed? (file-name->module-name file)))
(or (not recursive?)
(load-dependencies file))
- (begin
+ (let ((fd #f))
(format (current-module-debugging-port)
"loading Linux module from '~a'...~%" file)
(catch 'system-error
(lambda ()
- (load-linux-module (slurp file)))
+ (set! fd (open-fdes file O_RDONLY))
+ (load-linux-module/fd fd)
+ (close-fdes fd)
+ #t)
(lambda args
;; If this module was already loaded and we're in modprobe style, ignore
;; the error.
+ (when fd (close-fdes fd))
(or (and recursive? (= EEXIST (system-error-errno args)))
(apply throw args)))))))