diff mbox

[KVM-AUTOTEST,REPOST] Add ability to install custom kernel modules

Message ID 1242865760-12086-1-git-send-email-mburns@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mike Burns May 21, 2009, 12:29 a.m. UTC
See comment in control file for details of implementation

Signed-off-by: Mike Burns <mburns@redhat.com>
---
 client/tests/kvm_runtest_2/control        |    6 ++++++
 client/tests/kvm_runtest_2/kvm_install.py |   11 +++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

Comments

Uri Lublin June 1, 2009, 6:08 p.m. UTC | #1
On 05/21/2009 03:29 AM, Mike Burns wrote:
> See comment in control file for details of implementation
>
> Signed-off-by: Mike Burns<mburns@redhat.com>
> ---
>   client/tests/kvm_runtest_2/control        |    6 ++++++
>   client/tests/kvm_runtest_2/kvm_install.py |   11 +++++++++--
>   2 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/client/tests/kvm_runtest_2/control b/client/tests/kvm_runtest_2/control
> index d6e26bc..437de4c 100644
> --- a/client/tests/kvm_runtest_2/control
> +++ b/client/tests/kvm_runtest_2/control
> @@ -74,6 +74,12 @@ params = {
>
>       ## Custom install
>       "install_script": 'custom_kvm_install.sh param1'
> +
> +    ## Additional kernel modules to install
> +    ## Must be a space separated list of values
> +    ## Installed in the order they are listed.
> +    ## to install mod1.ko, mod2.ko, mod3.ko, you would set like this:
> +    #"additional_modules": 'mod1 mod2 mod3'
>   }
>
>   # Comment the job.run_test line if you do not want to install kvm on the host.
> diff --git a/client/tests/kvm_runtest_2/kvm_install.py b/client/tests/kvm_runtest_2/kvm_install.py
> index 392ef0c..80354f5 100755
> --- a/client/tests/kvm_runtest_2/kvm_install.py
> +++ b/client/tests/kvm_runtest_2/kvm_install.py
> @@ -106,7 +106,7 @@ def run_kvm_install(test, params, env):
>
>       # load kvm modules (unless requested not to)
>       if params.get('load_modules', "yes") == "yes":
> -        __load_kvm_modules()
> +        __load_kvm_modules(params)
>       else:
>           kvm_log.info("user requested not to load kvm modules")
>
> @@ -209,7 +209,7 @@ def __install_kvm_from_local_tarball(test, srcdir, tarball):
>       __install_kvm(test, srcdir)
>
>
> -def __load_kvm_modules():
> +def __load_kvm_modules(params):
>       kvm_log.info("Detecting CPU vendor...")
>       vendor = "intel"
>       if os.system("grep vmx /proc/cpuinfo 1>/dev/null") != 0:
> @@ -237,6 +237,13 @@ def __load_kvm_modules():
>           os.chdir("x86")
>       utils.system("/sbin/insmod ./kvm.ko&&  sleep 1&&  /sbin/insmod ./kvm-%s.ko" % vendor)
>
> +    #Add additional modules specified in params by "additional_modules"
> +    #Modules must be named<value>.ko and be located in the
> +    #same location as kvm and kvm-vendor modules
> +    for module in params.get("additional_modules","").split():
> +      kvm_log.info("Installing module \"%s\"" % module)
> +      utils.system("/sbin/insmod ./%s.ko" % module )
> +
>       #elif self.config.load_modules == "no":
>           #kvm_log.info("user requested not to load kvm modules")
>

Hi Mike,

Can you load those kernel modules before running kvm-autotest (something like a 
setup script) ? And clean up when the run completes (cleanup script) ?

How would those modules get into the directory where kvm.ko is built.

Who is in charge to unload those modules ? What happen if we have 2 consecutive 
runs of kvm-autotest (the second insmod would fail, wouldn't it) ?

This may belong to a separate patch, but I think it's a good idea to support 
module-parameters for each of those modules (specifically I think of ept/npt and 
other params of kvm*.ko)

Sorry for the late reply,
     Uri.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mike Burns June 1, 2009, 6:16 p.m. UTC | #2
Uri Lublin wrote:
> On 05/21/2009 03:29 AM, Mike Burns wrote:
>> See comment in control file for details of implementation
>>
>> Signed-off-by: Mike Burns<mburns@redhat.com>
>> ---
>>   client/tests/kvm_runtest_2/control        |    6 ++++++
>>   client/tests/kvm_runtest_2/kvm_install.py |   11 +++++++++--
>>   2 files changed, 15 insertions(+), 2 deletions(-)
>>
>> diff --git a/client/tests/kvm_runtest_2/control
>> b/client/tests/kvm_runtest_2/control
>> index d6e26bc..437de4c 100644
>> --- a/client/tests/kvm_runtest_2/control
>> +++ b/client/tests/kvm_runtest_2/control
>> @@ -74,6 +74,12 @@ params = {
>>
>>       ## Custom install
>>       "install_script": 'custom_kvm_install.sh param1'
>> +
>> +    ## Additional kernel modules to install
>> +    ## Must be a space separated list of values
>> +    ## Installed in the order they are listed.
>> +    ## to install mod1.ko, mod2.ko, mod3.ko, you would set like this:
>> +    #"additional_modules": 'mod1 mod2 mod3'
>>   }
>>
>>   # Comment the job.run_test line if you do not want to install kvm
>> on the host.
>> diff --git a/client/tests/kvm_runtest_2/kvm_install.py
>> b/client/tests/kvm_runtest_2/kvm_install.py
>> index 392ef0c..80354f5 100755
>> --- a/client/tests/kvm_runtest_2/kvm_install.py
>> +++ b/client/tests/kvm_runtest_2/kvm_install.py
>> @@ -106,7 +106,7 @@ def run_kvm_install(test, params, env):
>>
>>       # load kvm modules (unless requested not to)
>>       if params.get('load_modules', "yes") == "yes":
>> -        __load_kvm_modules()
>> +        __load_kvm_modules(params)
>>       else:
>>           kvm_log.info("user requested not to load kvm modules")
>>
>> @@ -209,7 +209,7 @@ def __install_kvm_from_local_tarball(test,
>> srcdir, tarball):
>>       __install_kvm(test, srcdir)
>>
>>
>> -def __load_kvm_modules():
>> +def __load_kvm_modules(params):
>>       kvm_log.info("Detecting CPU vendor...")
>>       vendor = "intel"
>>       if os.system("grep vmx /proc/cpuinfo 1>/dev/null") != 0:
>> @@ -237,6 +237,13 @@ def __load_kvm_modules():
>>           os.chdir("x86")
>>       utils.system("/sbin/insmod ./kvm.ko&&  sleep 1&&  /sbin/insmod
>> ./kvm-%s.ko" % vendor)
>>
>> +    #Add additional modules specified in params by "additional_modules"
>> +    #Modules must be named<value>.ko and be located in the
>> +    #same location as kvm and kvm-vendor modules
>> +    for module in params.get("additional_modules","").split():
>> +      kvm_log.info("Installing module \"%s\"" % module)
>> +      utils.system("/sbin/insmod ./%s.ko" % module )
>> +
>>       #elif self.config.load_modules == "no":
>>           #kvm_log.info("user requested not to load kvm modules")
>>
>
> Hi Mike,
>
> Can you load those kernel modules before running kvm-autotest
> (something like a setup script) ? And clean up when the run completes
> (cleanup script) ?
>
> How would those modules get into the directory where kvm.ko is built.
>
> Who is in charge to unload those modules ? What happen if we have 2
> consecutive runs of kvm-autotest (the second insmod would fail,
> wouldn't it) ?
>
> This may belong to a separate patch, but I think it's a good idea to
> support module-parameters for each of those modules (specifically I
> think of ept/npt and other params of kvm*.ko)
>
> Sorry for the late reply,
>     Uri.
Uri,

The thought here was to work in conjunction with the custom install
option that was sent in a previous patch.   The script would handle
placing the modules in the correct locations.

As for cleaning up modules, the patch to make the removal of kvm modules
more robust will handle it as long as the additional modules depend in
some way on kvm or one of its dependent modules.  Lucas was reworking
this a bit to put it in a more generic place in the autotest framework,
but I'm not sure exactly where that is.  The code will now remove all
modules recursively by detecting the dependent modules and removing
those first. 

I agree that module parameters should be handled in a separate patch.

Mike
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Huff June 1, 2009, 7 p.m. UTC | #3
Uri Lublin wrote:
> Hi Mike,
> 
> Can you load those kernel modules before running kvm-autotest (something
> like a setup script) ? And clean up when the run completes (cleanup
> script) ?

This can problay be done with the pre_command and post_command
parameters that I added in my previous patch.

Come to think of it, the whole custom kvm_install method is just a large
pre_command.  I even used alot of the same code mike used when adding
this functionality.

Does it make sense to treat the custom install of kvm as one large
pre_command?


-D
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/client/tests/kvm_runtest_2/control b/client/tests/kvm_runtest_2/control
index d6e26bc..437de4c 100644
--- a/client/tests/kvm_runtest_2/control
+++ b/client/tests/kvm_runtest_2/control
@@ -74,6 +74,12 @@  params = {
     
     ## Custom install
     "install_script": 'custom_kvm_install.sh param1'
+
+    ## Additional kernel modules to install
+    ## Must be a space separated list of values
+    ## Installed in the order they are listed.
+    ## to install mod1.ko, mod2.ko, mod3.ko, you would set like this:
+    #"additional_modules": 'mod1 mod2 mod3'
 }
 
 # Comment the job.run_test line if you do not want to install kvm on the host.
diff --git a/client/tests/kvm_runtest_2/kvm_install.py b/client/tests/kvm_runtest_2/kvm_install.py
index 392ef0c..80354f5 100755
--- a/client/tests/kvm_runtest_2/kvm_install.py
+++ b/client/tests/kvm_runtest_2/kvm_install.py
@@ -106,7 +106,7 @@  def run_kvm_install(test, params, env):
 
     # load kvm modules (unless requested not to)
     if params.get('load_modules', "yes") == "yes":
-        __load_kvm_modules()
+        __load_kvm_modules(params)
     else:
         kvm_log.info("user requested not to load kvm modules")
 
@@ -209,7 +209,7 @@  def __install_kvm_from_local_tarball(test, srcdir, tarball):
     __install_kvm(test, srcdir)
 
 
-def __load_kvm_modules():
+def __load_kvm_modules(params):
     kvm_log.info("Detecting CPU vendor...")
     vendor = "intel"
     if os.system("grep vmx /proc/cpuinfo 1>/dev/null") != 0:
@@ -237,6 +237,13 @@  def __load_kvm_modules():
         os.chdir("x86")
     utils.system("/sbin/insmod ./kvm.ko && sleep 1 && /sbin/insmod ./kvm-%s.ko" % vendor)
 
+    #Add additional modules specified in params by "additional_modules"
+    #Modules must be named <value>.ko and be located in the 
+    #same location as kvm and kvm-vendor modules
+    for module in params.get("additional_modules","").split():
+      kvm_log.info("Installing module \"%s\"" % module)
+      utils.system("/sbin/insmod ./%s.ko" % module )
+
     #elif self.config.load_modules == "no":
         #kvm_log.info("user requested not to load kvm modules")