Building and loading KVM modules that are not shipped with the Linux kernel
is discouraged these days.

This patch allows for loading the KVM modules only on the default system
location, which should be the modules built/shipped with the running kernel.

Signed-off-by: Cleber Rosa <[email protected]>
---
 client/tests/kvm/build.cfg.sample |   20 +----
 client/virt/kvm_installer.py      |  172 ++-----------------------------------
 2 files changed, 11 insertions(+), 181 deletions(-)

diff --git a/client/tests/kvm/build.cfg.sample 
b/client/tests/kvm/build.cfg.sample
index e60c4bc..0bccd65 100644
--- a/client/tests/kvm/build.cfg.sample
+++ b/client/tests/kvm/build.cfg.sample
@@ -34,19 +34,8 @@ variants:
             - git:
                 install_mode = git
                 ## Install KVM from git repositories.
-                ## If you provide only "git_repo" and "user_git_repo", the
-                ## build test will assume it will perform all build from the
-                ## userspace dir, building modules trough 
-                ## make -C kernel LINUX=%s sync. As of today (07-13-2009)
-                ## upstream needs 3 git repos:
-                ## * git_repo (linux sources)
-                ## * user_git_repo (qemu sources)
-                ## * kmod_repo" to build KVM userspace + kernel modules.
-                # git_repo = 
git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
-                # kernel_branch = kernel_branch_name
-                # kernel_lbranch = kernel_lbranch_name
-                # kernel_commit = kernel_commit_name
-                # kernel_patches = ['http://foo.com/patch1', 
'http://foo.com/patch2']
+                ## This now only concerns the userspace component, and it 
assumes
+                ## the kernel modules are shipped with the linux kernel.
                 user_git_repo = 
git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
                 # user_branch = user_branch_name
                 # user_lbranch = user_lbranch_name
@@ -54,11 +43,6 @@ variants:
                 # user_patches = ['http://foo.com/patch1', 
'http://foo.com/patch2']
                 ## This is how you pass extra params to the userspace 
configure script
                 # extra_configure_options = '--enable-spice --disable-werror'
-                # kmod_repo = 
git://git.kernel.org/pub/scm/virt/kvm/kvm-kmod.git
-                # kmod_branch = kmod_branch_name
-                # kmod_lbranch = kmod_lbranch_name
-                # kmod_commit = kmod_commit_name
-                # kmod_patches = ['http://foo.com/patch1', 
'http://foo.com/patch2']
                 # spice_repo = git://anongit.freedesktop.org/spice/spice
                 # spice_branch = master
                 # spice_lbranch = master
diff --git a/client/virt/kvm_installer.py b/client/virt/kvm_installer.py
index e79c9fc..98bde12 100644
--- a/client/virt/kvm_installer.py
+++ b/client/virt/kvm_installer.py
@@ -15,68 +15,6 @@ def kill_qemu_processes():
         utils.system("fuser -k /dev/kvm", ignore_status=True)
 
 
-def _unload_kvm_modules(mod_list):
-    logging.info("Unloading previously loaded KVM modules")
-    for module in reversed(mod_list):
-        utils.unload_module(module)
-
-
-def _load_kvm_modules(mod_list, module_dir=None, load_stock=False):
-    """
-    Just load the KVM modules, without killing Qemu or unloading previous
-    modules.
-
-    Load modules present on any sub directory of module_dir. Function will walk
-    through module_dir until it finds the modules.
-
-    @param module_dir: Directory where the KVM modules are located.
-    @param load_stock: Whether we are going to load system kernel modules.
-    @param extra_modules: List of extra modules to load.
-    """
-    if module_dir:
-        logging.info("Loading the built KVM modules...")
-        kvm_module_path = None
-        kvm_vendor_module_path = None
-        abort = False
-
-        list_modules = ['%s.ko' % (m) for m in mod_list]
-
-        list_module_paths = []
-        for folder, subdirs, files in os.walk(module_dir):
-            for module in list_modules:
-                if module in files:
-                    module_path = os.path.join(folder, module)
-                    list_module_paths.append(module_path)
-
-        # We might need to arrange the modules in the correct order
-        # to avoid module load problems
-        list_modules_load = []
-        for module in list_modules:
-            for module_path in list_module_paths:
-                if os.path.basename(module_path) == module:
-                    list_modules_load.append(module_path)
-
-        if len(list_module_paths) != len(list_modules):
-            logging.error("KVM modules not found. If you don't want to use the 
"
-                          "modules built by this test, make sure the option "
-                          "load_modules: 'no' is marked on the test control "
-                          "file.")
-            raise error.TestError("The modules %s were requested to be loaded, 
"
-                                  "but the only modules found were %s" %
-                                  (list_modules, list_module_paths))
-
-        for module_path in list_modules_load:
-            try:
-                utils.system("insmod %s" % module_path)
-            except Exception, e:
-                raise error.TestFail("Failed to load KVM modules: %s" % e)
-
-    if load_stock:
-        logging.info("Loading current system KVM modules...")
-        for module in mod_list:
-            utils.system("modprobe %s" % module)
-
-
 def create_symlinks(test_bindir, prefix=None, bin_list=None, unittest=None):
     """
     Create symbolic links for the appropriate qemu and qemu-img commands on
@@ -143,8 +81,6 @@ class KvmNotInstalled(KvmInstallException):
 
 
 class BaseInstaller(object):
-    # default value for load_stock argument
-    load_stock_modules = True
     def __init__(self, mode=None):
         self.install_mode = mode
         self._full_module_list = None
@@ -254,7 +190,9 @@ class BaseInstaller(object):
 
         May be overridden by subclasses.
         """
-        _load_kvm_modules(mod_list, load_stock=self.load_stock_modules)
+        logging.info("Loading KVM modules")
+        for module in mod_list:
+            utils.system("modprobe %s" % module)
 
 
     def load_modules(self, mod_list=None):
@@ -269,7 +207,9 @@ class BaseInstaller(object):
         """
         if mod_list is None:
             mod_list = self.full_module_list()
-        _unload_kvm_modules(mod_list)
+        logging.info("Unloading previously loaded KVM modules")
+        for module in reversed(mod_list):
+            utils.unload_module(module)
 
 
     def unload_modules(self, mod_list=None):
@@ -297,7 +237,6 @@ class YumInstaller(BaseInstaller):
     """
     Class that uses yum to install and remove packages.
     """
-    load_stock_modules = True
     def set_install_params(self, test, params):
         super(YumInstaller, self).set_install_params(test, params)
         # Checking if all required dependencies are available
@@ -357,7 +296,6 @@ class KojiInstaller(YumInstaller):
     It uses yum to install and remove packages. Packages are specified
     according to the syntax defined in the PkgSpec class.
     """
-    load_stock_modules = True
     def set_install_params(self, test, params):
         """
         Gets parameters and initializes the package downloader.
@@ -450,8 +388,6 @@ class SourceDirInstaller(BaseInstaller):
         super(SourceDirInstaller, self).set_install_params(test, params)
 
         self.mod_install_dir = os.path.join(self.prefix, 'modules')
-        self.installed_kmods = False  # it will be set to True in case we
-                                      # installed our own modules
 
         srcdir = params.get("srcdir", None)
         self.path_to_roms = params.get("path_to_rom_images", None)
@@ -494,51 +430,11 @@ class SourceDirInstaller(BaseInstaller):
             utils.system(step)
 
 
-    def _install_kmods_old_userspace(self, userspace_path):
-        """
-        Run the module install command.
-
-        This is for the "old userspace" code, that contained a 'kernel' 
subdirectory
-        with the kmod build code.
-
-        The code would be much simpler if we could specify the module install
-        path as parameter to the toplevel Makefile. As we can't do that and
-        the module install code doesn't use --prefix, we have to call
-        'make -C kernel install' directly, setting the module directory
-        parameters.
-
-        If the userspace tree doens't have a 'kernel' subdirectory, the
-        module install step will be skipped.
-
-        @param userspace_path: the path the kvm-userspace directory
-        """
-        kdir = os.path.join(userspace_path, 'kernel')
-        if os.path.isdir(kdir):
-            os.chdir(kdir)
-            # INSTALLDIR is the target dir for the modules
-            # ORIGMODDIR is the dir where the old modules will be removed. we
-            #            don't want to mess with the system modules, so set it
-            #            to a non-existing directory
-            utils.system('make install INSTALLDIR=%s 
ORIGMODDIR=/tmp/no-old-modules' % (self.mod_install_dir))
-            self.installed_kmods = True
-
-
-    def _install_kmods(self, kmod_path):
-        """Run the module install command for the kmod-kvm repository
-
-        @param kmod_path: the path to the kmod-kvm.git working copy
-        """
-        os.chdir(kmod_path)
-        utils.system('make modules_install DESTDIR=%s' % 
(self.mod_install_dir))
-        self.installed_kmods = True
-
-
     def _install(self):
         os.chdir(self.srcdir)
         logging.info("Installing KVM userspace")
         if self.repo_type == 1:
             utils.system("make -C qemu install")
-            self._install_kmods_old_userspace(self.srcdir)
         elif self.repo_type == 2:
             utils.system("make install")
         if self.path_to_roms:
@@ -549,17 +445,6 @@ class SourceDirInstaller(BaseInstaller):
                         unittest=self.unittest_prefix)
 
 
-    def _load_modules(self, mod_list):
-        # load the installed KVM modules in case we installed them
-        # ourselves. Otherwise, just load the system modules.
-        if self.installed_kmods:
-            logging.info("Loading installed KVM modules")
-            _load_kvm_modules(mod_list, module_dir=self.mod_install_dir)
-        else:
-            logging.info("Loading stock KVM modules")
-            _load_kvm_modules(mod_list, load_stock=True)
-
-
     def install(self):
         self._build()
         self._install()
@@ -611,19 +496,6 @@ class GitInstaller(SourceDirInstaller):
         cfg = 'PKG_CONFIG_PATH="%s/lib/pkgconfig:%s/share/pkgconfig" 
./configure' % (
             self.prefix, self.prefix)
 
-        self.kernel = GitRepo(installer=self, prefix='kernel',
-            repo_param='git_repo', srcdir='kvm')
-        self.kmod = GitRepo(installer=self, prefix='kmod', srcdir="kvm_kmod")
-        if params.get('kernel_git_repo'):
-            cfg += ' --kerneldir=%s' % self.host_kernel_srcdir
-            self.kernel.build_steps = [cfg,
-                            'make clean',
-                            'make -C kernel LINUX=%s sync' % 
self.kernel.srcdir]
-            self.kmod.build_steps=[cfg,
-                             'make clean',
-                             'make sync LINUX=%s' % self.kernel.srcdir,
-                             'make']
-
         self.spice_protocol = GitRepo(installer=self, prefix='spice_protocol',
             srcdir='spice-protocol',
             build_steps= ['./autogen.sh',
@@ -657,19 +529,12 @@ class GitInstaller(SourceDirInstaller):
             logging.error(message)
             raise error.TestError(message)
 
-        for repo in [self.userspace, self.kernel, self.kmod, 
self.spice_protocol, self.spice]:
+        for repo in [self.userspace, self.spice_protocol, self.spice]:
             if not repo.repo:
                 continue
             repo.fetch_and_patch()
 
     def _build(self):
-        if self.kmod.repo:
-            logging.info('Building KVM modules')
-            self.kmod.build()
-        elif self.kernel.repo:
-            logging.info('Building KVM modules')
-            self.kernel.build()
-
         if self.spice_protocol.repo:
             logging.info('Building Spice-protocol')
             self.spice_protocol.build()
@@ -683,25 +548,8 @@ class GitInstaller(SourceDirInstaller):
 
 
     def _install(self):
-        if self.kernel:
-            os.chdir(self.userspace.srcdir)
-            # the kernel module install with --prefix doesn't work, and DESTDIR
-            # wouldn't work for the userspace stuff, so we clear WANT_MODULE:
-            utils.system('make install WANT_MODULE=')
-            # and install the old-style-kmod modules manually:
-            self._install_kmods_old_userspace(self.userspace.srcdir)
-        elif self.kmod:
-            # if we have a kmod repository, it is easier:
-            # 1) install userspace:
-            os.chdir(self.userspace_srcdir)
-            utils.system('make install')
-            # 2) install kmod:
-            self._install_kmods(self.kmod_srcdir)
-        else:
-            # if we don't have kmod sources, we just install
-            # userspace:
-            os.chdir(self.userspace.srcdir)
-            utils.system('make install')
+        os.chdir(self.userspace.srcdir)
+        utils.system('make install')
 
         if self.path_to_roms:
             install_roms(self.path_to_roms, self.prefix)
@@ -721,8 +569,6 @@ class GitInstaller(SourceDirInstaller):
 
 
 class PreInstalledKvm(BaseInstaller):
-    # load_modules() will use the stock modules:
-    load_stock_modules = True
     def install(self):
         logging.info("Expecting KVM to be already installed. Doing nothing")
 
-- 
1.7.4.4

_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to