| Index: client/bin/kernel.py
|
| diff --git a/client/bin/kernel.py b/client/bin/kernel.py
|
| index da91389b640c20df4a1b162fbcfe1876c13c0595..b39869710c83b935416bc43cbb843c345d69df40 100644
|
| --- a/client/bin/kernel.py
|
| +++ b/client/bin/kernel.py
|
| @@ -64,51 +64,7 @@ def _add_kernel_to_bootloader(bootloader, base_args, tag, args, image, initrd):
|
| root=root)
|
|
|
|
|
| -class BootableKernel(object):
|
| -
|
| - def __init__(self, job):
|
| - self.job = job
|
| - self.installed_as = None # kernel choice in bootloader menu
|
| - self.image = None
|
| - self.initrd = ''
|
| -
|
| -
|
| - def _boot_kernel(self, args, ident_check, expected_ident, subdir, notes):
|
| - """
|
| - Boot a kernel, with post-boot kernel id check
|
| -
|
| - @param args: kernel cmdline arguments
|
| - @param ident_check: check kernel id after boot
|
| - @param expected_ident:
|
| - @param subdir: job-step qualifier in status log
|
| - @param notes: additional comment in status log
|
| - """
|
| -
|
| - # If we can check the kernel identity do so.
|
| - if ident_check:
|
| - when = int(time.time())
|
| - args += " IDENT=%d" % when
|
| - self.job.next_step_prepend(["job.end_reboot_and_verify", when,
|
| - expected_ident, subdir, notes])
|
| - else:
|
| - self.job.next_step_prepend(["job.end_reboot", subdir,
|
| - expected_ident, notes])
|
| -
|
| - # Point bootloader to the selected tag.
|
| - _add_kernel_to_bootloader(self.job.bootloader,
|
| - self.job.config_get('boot.default_args'),
|
| - self.installed_as, args, self.image,
|
| - self.initrd)
|
| -
|
| - # defer fsck for next reboot, to avoid reboots back to default kernel
|
| - utils.system('touch /fastboot') # this file is removed automatically
|
| -
|
| - # Boot it.
|
| - self.job.start_reboot()
|
| - self.job.reboot(tag=self.installed_as)
|
| -
|
| -
|
| -class kernel(BootableKernel):
|
| +class kernel(object):
|
| """ Class for compiling kernels.
|
|
|
| Data for the object includes the src files
|
| @@ -153,7 +109,7 @@ class kernel(BootableKernel):
|
| leave
|
| Boolean, whether to leave existing tmpdir or not
|
| """
|
| - super(kernel, self).__init__(job)
|
| + self.job = job
|
| self.autodir = job.autodir
|
|
|
| self.src_dir = os.path.join(tmp_dir, 'src')
|
| @@ -164,6 +120,8 @@ class kernel(BootableKernel):
|
| self.results_dir = os.path.join(subdir, 'results')
|
| self.subdir = os.path.basename(subdir)
|
|
|
| + self.installed_as = None
|
| +
|
| if not leave:
|
| if os.path.isdir(self.src_dir):
|
| utils.system('rm -rf ' + self.src_dir)
|
| @@ -492,6 +450,16 @@ class kernel(BootableKernel):
|
| self.system_map, self.initrd)
|
|
|
|
|
| + def add_to_bootloader(self, tag='autotest', args=''):
|
| + """ add this kernel to bootloader, taking an
|
| + optional parameter of space separated parameters
|
| + e.g.: kernel.add_to_bootloader('mykernel', 'ro acpi=off')
|
| + """
|
| + _add_kernel_to_bootloader(self.job.bootloader,
|
| + self.job.config_get('boot.default_args'),
|
| + tag, args, self.image, self.initrd)
|
| +
|
| +
|
| def get_kernel_build_arch(self, arch=None):
|
| """
|
| Work out the current kernel architecture (as a kernel arch)
|
| @@ -558,14 +526,29 @@ class kernel(BootableKernel):
|
| just make it happen.
|
| """
|
|
|
| - # If the kernel has not yet been installed,
|
| - # install it now as default tag.
|
| + # If we can check the kernel identity do so.
|
| + expected_ident = self.get_kernel_build_ident()
|
| + if ident:
|
| + when = int(time.time())
|
| + args += " IDENT=%d" % (when)
|
| + self.job.next_step_prepend(["job.end_reboot_and_verify", when,
|
| + expected_ident, self.subdir,
|
| + self.applied_patches])
|
| + else:
|
| + self.job.next_step_prepend(["job.end_reboot", self.subdir,
|
| + expected_ident, self.applied_patches])
|
| +
|
| + # Check if the kernel has been installed, if not install
|
| + # as the default tag and boot that.
|
| if not self.installed_as:
|
| self.install()
|
|
|
| - expected_ident = self.get_kernel_build_ident()
|
| - self._boot_kernel(args, ident, expected_ident,
|
| - self.subdir, self.applied_patches)
|
| + # Boot the selected tag.
|
| + self.add_to_bootloader(args=args, tag=self.installed_as)
|
| +
|
| + # Boot it.
|
| + self.job.start_reboot()
|
| + self.job.reboot(tag=self.installed_as)
|
|
|
|
|
| def get_kernel_build_ver(self):
|
| @@ -663,19 +646,20 @@ class kernel(BootableKernel):
|
| pickle.dump(temp, open(filename, 'w'))
|
|
|
|
|
| -class rpm_kernel(BootableKernel):
|
| +class rpm_kernel(object):
|
| """
|
| Class for installing a binary rpm kernel package
|
| """
|
|
|
| def __init__(self, job, rpm_package, subdir):
|
| - super(rpm_kernel, self).__init__(job)
|
| + self.job = job
|
| self.rpm_package = rpm_package
|
| self.log_dir = os.path.join(subdir, 'debug')
|
| self.subdir = os.path.basename(subdir)
|
| if os.path.exists(self.log_dir):
|
| utils.system('rm -rf ' + self.log_dir)
|
| os.mkdir(self.log_dir)
|
| + self.installed_as = None
|
|
|
|
|
| def build(self, *args, **dargs):
|
| @@ -741,23 +725,44 @@ class rpm_kernel(BootableKernel):
|
| % (vmlinux, rpm_pack))
|
|
|
|
|
| + def add_to_bootloader(self, tag='autotest', args=''):
|
| + """ Add this kernel to bootloader
|
| + """
|
| + _add_kernel_to_bootloader(self.job.bootloader,
|
| + self.job.config_get('boot.default_args'),
|
| + tag, args, self.image, self.initrd)
|
| +
|
| +
|
| def boot(self, args='', ident=True):
|
| """ install and boot this kernel
|
| """
|
|
|
| - # If the kernel has not yet been installed,
|
| - # install it now as default tag.
|
| + # Check if the kernel has been installed, if not install
|
| + # as the default tag and boot that.
|
| if not self.installed_as:
|
| self.install()
|
|
|
| + # If we can check the kernel identity do so.
|
| expected_ident = self.full_version
|
| if not expected_ident:
|
| expected_ident = '-'.join([self.version,
|
| self.rpm_flavour,
|
| self.release])
|
| + if ident:
|
| + when = int(time.time())
|
| + args += " IDENT=%d" % (when)
|
| + self.job.next_step_prepend(["job.end_reboot_and_verify",
|
| + when, expected_ident, None, 'rpm'])
|
| + else:
|
| + self.job.next_step_prepend(["job.end_reboot", None,
|
| + expected_ident, []])
|
| +
|
| + # Boot the selected tag.
|
| + self.add_to_bootloader(args=args, tag=self.installed_as)
|
|
|
| - self._boot_kernel(args, ident, expected_ident,
|
| - None, 'rpm')
|
| + # Boot it.
|
| + self.job.start_reboot()
|
| + self.job.reboot(tag=self.installed_as)
|
|
|
|
|
| class rpm_kernel_suse(rpm_kernel):
|
|
|