diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-02-28 22:02:27 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-02-28 22:47:48 +0100 |
commit | 3c14e7e6bbc2f86f927816042df1a9f1c057e09c (patch) | |
tree | b8efeb25f5f681a621abe32353355c4e42caca8f | |
parent | 4c853b7c11e96eb68891c5e48fefa835913fb589 (diff) | |
download | patches-3c14e7e6bbc2f86f927816042df1a9f1c057e09c.tar patches-3c14e7e6bbc2f86f927816042df1a9f1c057e09c.tar.gz |
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'.
-rw-r--r-- | gnu/build/linux-modules.scm | 14 |
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))))))) |