65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
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)
|