On 07/04/2011 03:45 AM, Prasad Joshi wrote:
> On Mon, Jul 4, 2011 at 7:32 AM, Cleber Rosa<[email protected]>  wrote:
>> 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)
> Why not use the function utils.load_module() to load the modules?

Well, there might be a historic reason for that.

Based on another comment, in another piece of code 
(client/tests/kvm/tests/module_probe.py), I believe the reason is that 
utils.load_module() does "too much": checks if the module is loaded by 
running lsmod, etc.

As this discussion is not really the point of my proposed change, I 
chose to keep things as they were.

>>
>>      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
>>

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

Reply via email to