Home | History | Annotate | Download | only in libhugetlbfs
      1 import re, os
      2 from autotest_lib.client.bin import utils, test
      3 from autotest_lib.client.common_lib import error
      4 
      5 class libhugetlbfs(test.test):
      6     version = 6
      7 
      8     def initialize(self, dir = None, pages_requested = 20):
      9         self.dir = None
     10 
     11         self.job.require_gcc()
     12 
     13         utils.check_kernel_ver("2.6.16")
     14 
     15         # Check huge page number
     16         pages_available = 0
     17         if os.path.exists('/proc/sys/vm/nr_hugepages'):
     18             utils.write_one_line('/proc/sys/vm/nr_hugepages',
     19                                           str(pages_requested))
     20             nr_hugepages = utils.read_one_line('/proc/sys/vm/nr_hugepages')
     21             pages_available = int(nr_hugepages)
     22         else:
     23             raise error.TestNAError('Kernel does not support hugepages')
     24 
     25         if pages_available < pages_requested:
     26             raise error.TestError('%d huge pages available, < %d pages requested' % (pages_available, pages_requested))
     27 
     28         # Check if hugetlbfs has been mounted
     29         if not utils.file_contains_pattern('/proc/mounts', 'hugetlbfs'):
     30             if not dir:
     31                 dir = os.path.join(self.tmpdir, 'hugetlbfs')
     32                 os.makedirs(dir)
     33             utils.system('mount -t hugetlbfs none %s' % dir)
     34             self.dir = dir
     35 
     36 
     37     # http://libhugetlbfs.ozlabs.org/releases/libhugetlbfs-2.0.tar.gz
     38     def setup(self, tarball = 'libhugetlbfs-2.0.tar.gz'):
     39         tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
     40         utils.extract_tarball_to_dir(tarball, self.srcdir)
     41         os.chdir(self.srcdir)
     42 
     43         utils.system('patch -p1 < ../elflink.patch')
     44         # make might fail if there are no proper headers for the 32 bit
     45         # version, in that case try only for the 64 bit version
     46         try:
     47             utils.make()
     48         except:
     49             utils.make('OBJDIRS=obj64')
     50 
     51 
     52     def run_once(self):
     53         os.chdir(self.srcdir)
     54         # make check might fail for 32 bit if the 32 bit compile earlier
     55         # had failed. See if it passes for 64 bit in that case.
     56         try:
     57             utils.make('check')
     58         except:
     59             utils.make('check OBJDIRS=obj64')
     60 
     61 
     62     def cleanup(self):
     63         if self.dir:
     64             utils.system('umount %s' % self.dir)
     65