| import re, os |
| from autotest_lib.client.bin import utils, test |
| from autotest_lib.client.common_lib import error |
| |
| class libhugetlbfs(test.test): |
| version = 6 |
| |
| def initialize(self, dir = None, pages_requested = 20): |
| self.dir = None |
| |
| self.job.require_gcc() |
| |
| utils.check_kernel_ver("2.6.16") |
| |
| # Check huge page number |
| pages_available = 0 |
| if os.path.exists('/proc/sys/vm/nr_hugepages'): |
| utils.write_one_line('/proc/sys/vm/nr_hugepages', |
| str(pages_requested)) |
| nr_hugepages = utils.read_one_line('/proc/sys/vm/nr_hugepages') |
| pages_available = int(nr_hugepages) |
| else: |
| raise error.TestNAError('Kernel does not support hugepages') |
| |
| if pages_available < pages_requested: |
| raise error.TestError('%d huge pages available, < %d pages requested' % (pages_available, pages_requested)) |
| |
| # Check if hugetlbfs has been mounted |
| if not utils.file_contains_pattern('/proc/mounts', 'hugetlbfs'): |
| if not dir: |
| dir = os.path.join(self.tmpdir, 'hugetlbfs') |
| os.makedirs(dir) |
| utils.system('mount -t hugetlbfs none %s' % dir) |
| self.dir = dir |
| |
| |
| # http://libhugetlbfs.ozlabs.org/releases/libhugetlbfs-2.0.tar.gz |
| def setup(self, tarball = 'libhugetlbfs-2.0.tar.gz'): |
| tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
| utils.extract_tarball_to_dir(tarball, self.srcdir) |
| os.chdir(self.srcdir) |
| |
| utils.system('patch -p1 < ../elflink.patch') |
| # make might fail if there are no proper headers for the 32 bit |
| # version, in that case try only for the 64 bit version |
| try: |
| utils.make() |
| except: |
| utils.make('OBJDIRS=obj64') |
| |
| |
| def run_once(self): |
| os.chdir(self.srcdir) |
| # make check might fail for 32 bit if the 32 bit compile earlier |
| # had failed. See if it passes for 64 bit in that case. |
| try: |
| utils.make('check') |
| except: |
| utils.make('check OBJDIRS=obj64') |
| |
| |
| def cleanup(self): |
| if self.dir: |
| utils.system('umount %s' % self.dir) |