DO NOT MERGE

Merge pie-platform-release (PPRL.181105.017, history) into master

Bug: 118454372
Change-Id: I957cb7ede4ac439ae7b8166d17571ffea742cad8
diff --git a/OWNERS b/OWNERS
index 80f05a3..ea18248 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,4 +1,3 @@
-romlem@google.com
 smuckle@google.com
 sspatil@google.com
 yim@google.com
diff --git a/api/bpf_native_test/Android.bp b/api/bpf_native_test/Android.bp
index 6d1ca41..5c2fa19 100644
--- a/api/bpf_native_test/Android.bp
+++ b/api/bpf_native_test/Android.bp
@@ -15,7 +15,6 @@
 //
 
 cc_test {
-    tags: ["tests"],
     name: "vts_test_binary_bpf_module",
     srcs: ["BpfTest.cpp"],
     shared_libs: [
@@ -25,7 +24,7 @@
         "libbase",
     ],
     static_libs: [
-        "libbpf",
+        "libbpf_android",
         "libnetdutils",
         "libtestUtil",
     ],
diff --git a/api/bpf_native_test/Android.mk b/api/bpf_native_test/Android.mk
index f3d2966..28ccb9f 100644
--- a/api/bpf_native_test/Android.mk
+++ b/api/bpf_native_test/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelNetBpfTest
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/bpf_native_test
 include test/vts/tools/build/Android.host_config.mk
diff --git a/api/bpf_native_test/BpfTest.cpp b/api/bpf_native_test/BpfTest.cpp
index cacf092..24a921d 100644
--- a/api/bpf_native_test/BpfTest.cpp
+++ b/api/bpf_native_test/BpfTest.cpp
@@ -53,7 +53,7 @@
                                            sizeof(uint32_t), 10,
                                            BPF_F_NO_PREALLOC));
   ASSERT_LT(0, mapfd) << "create map failed with error: " << strerror(errno);
-  ASSERT_EQ(0, mapPin(mapfd, bpfMapPath))
+  ASSERT_EQ(0, bpfFdPin(mapfd, bpfMapPath))
       << "pin map failed with error: " << strerror(errno);
   ASSERT_EQ(0, access(bpfMapPath, F_OK));
   ASSERT_EQ(0, remove(bpfMapPath));
diff --git a/api/net/AndroidTest.xml b/api/net/AndroidTest.xml
index 25728c8..773dd16 100644
--- a/api/net/AndroidTest.xml
+++ b/api/net/AndroidTest.xml
@@ -24,6 +24,6 @@
     <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
         <option name="test-module-name" value="VtsKernelNetTest" />
         <option name="test-case-path" value="vts/testcases/kernel/api/net/VtsKernelNetTest" />
-        <option name="test-timeout" value="5m" />
+        <option name="test-timeout" value="10m" />
     </test>
 </configuration>
diff --git a/api/net/VtsKernelNetTest.py b/api/net/VtsKernelNetTest.py
index da0f33d..71c4f0f 100644
--- a/api/net/VtsKernelNetTest.py
+++ b/api/net/VtsKernelNetTest.py
@@ -73,7 +73,7 @@
         logging.info('exit code: %s', result[const.EXIT_CODE])
         asserts.assertFalse(
             result[const.EXIT_CODE],
-            'kernel_net_tests binary returned non-zero exit code.')
+            'kernel_net_tests binary returned non-zero exit code: \n' + result[const.STDERR])
 
 if __name__ == '__main__':
     test_runner.main()
diff --git a/api/proc/Android.mk b/api/proc/Android.mk
index 7b9068c..7e377c2 100644
--- a/api/proc/Android.mk
+++ b/api/proc/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelProcFileApi
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/proc
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/proc/KernelProcFileTestBase.py b/api/proc/KernelProcFileTestBase.py
index 5a3501b..aeaac70 100644
--- a/api/proc/KernelProcFileTestBase.py
+++ b/api/proc/KernelProcFileTestBase.py
@@ -94,7 +94,7 @@
     t_COLON = r':'
     t_EQUALS = r'='
     t_COMMA = r','
-    t_PERIOD = r'.'
+    t_PERIOD = r'\.'
     t_STRING = r'[a-zA-Z\(\)_0-9\-@]+'
 
     t_TAB = r'\t'
@@ -187,8 +187,16 @@
         """
         return True
 
-    def file_optional(self):
-        """Returns: True if file is allowed to be absent (boolean)."""
+    def file_optional(self, shell=None, dut=None):
+        """Performs any actions necessary to return if file is allowed to be absent
+
+        Args:
+            shell: shell object, to run commands on the device side
+            dut: AndroidDevice object to access functions and properties of that object
+
+        Returns:
+            boolean, True if file is allowed to be absent.
+        """
         return False
 
     def result_correct(self, parse_result):
diff --git a/api/proc/ProcFsFileTests.py b/api/proc/ProcFsFileTests.py
index 9e37067..266e781 100644
--- a/api/proc/ProcFsFileTests.py
+++ b/api/proc/ProcFsFileTests.py
@@ -110,6 +110,6 @@
     def get_path(self):
         return "/proc/swaps"
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # It is not mandatory to have this file present
         return True
diff --git a/api/proc/ProcQtaguidCtrlTest.py b/api/proc/ProcQtaguidCtrlTest.py
index 7948d45..ef2be8c 100644
--- a/api/proc/ProcQtaguidCtrlTest.py
+++ b/api/proc/ProcQtaguidCtrlTest.py
@@ -52,6 +52,26 @@
     def get_path(self):
         return "/proc/net/xt_qtaguid/ctrl"
 
+    def file_optional(self, shell=None, dut=None):
+        """Specifies if the /proc/net/xt_qtaguid/ctrl file is mandatory.
+
+        For device running kernel 4.9 or above, it should use the eBPF cgroup
+        filter to monitor networking stats instead. So it may not have
+        xt_qtaguid module and /proc/net/xt_qtaguid/ctrl file on device.
+        But for device that still has xt_qtaguid module, this file is mandatory.
+
+        Same logic as checkKernelSupport in file:
+        test/vts-testcase/kernel/api/qtaguid/SocketTagUserSpace.cpp
+
+        Returns:
+            True when the kernel is 4.9 or newer, otherwise False is returned
+        """
+        (version, patchlevel, sublevel) = dut.kernel_version
+        if version == 4 and patchlevel >= 9 or version > 4:
+            return True
+        else:
+            return False
+
     def get_permission_checker(self):
         """Get r/w file permission checker.
         """
diff --git a/api/proc/ProcSimpleFileTests.py b/api/proc/ProcSimpleFileTests.py
index f94fa9a..e19600d 100644
--- a/api/proc/ProcSimpleFileTests.py
+++ b/api/proc/ProcSimpleFileTests.py
@@ -111,7 +111,7 @@
     def get_permission_checker(self):
         return target_file_utils.IsReadWrite
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         return True
 
 class ProcKptrRestrictTest(KernelProcFileTestBase.KernelProcFileTestBase):
@@ -412,6 +412,21 @@
         return target_file_utils.IsReadWrite
 
 
+class ProcDirtyExpireCentisecs(KernelProcFileTestBase.KernelProcFileTestBase):
+    '''/proc/sys/vm/dirty_expire_centisecs is used to define when dirty data is
+    old enough to be eligible for writeout by the kernel flusher threads.
+    '''
+
+    def parse_contents(self, contents):
+        return self.parse_line("{:d}\n", contents)[0]
+
+    def get_path(self):
+        return "/proc/sys/vm/dirty_expire_centisecs"
+
+    def get_permission_checker(self):
+        return target_file_utils.IsReadWrite
+
+
 class ProcDropCaches(KernelProcFileTestBase.KernelProcFileTestBase):
     '''Writing to /proc/sys/vm/drop_caches will cause the kernel to drop clean
     caches.
@@ -443,7 +458,7 @@
     def get_permission_checker(self):
         return target_file_utils.IsReadWrite
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # This file isn't in Android common kernel.
         return True
 
diff --git a/api/proc/ProcUidCpuPowerTests.py b/api/proc/ProcUidCpuPowerTests.py
index d4cb255..71af639 100644
--- a/api/proc/ProcUidCpuPowerTests.py
+++ b/api/proc/ProcUidCpuPowerTests.py
@@ -42,7 +42,7 @@
     def get_path(self):
         return "/proc/uid_cpupower/time_in_state"
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # This file is optional until implemented in Android common kernel
         return True
 
@@ -66,7 +66,7 @@
     def get_path(self):
         return "/proc/uid_cpupower/concurrent_active_time"
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # This file is optional until implemented in Android common kernel
         return True
 
@@ -98,6 +98,6 @@
     def get_path(self):
         return "/proc/uid_cpupower/concurrent_policy_time"
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # This file is optional until implemented in Android common kernel
         return True
diff --git a/api/proc/ProcUidTimeInStateTest.py b/api/proc/ProcUidTimeInStateTest.py
index be812d5..c3a1a71 100644
--- a/api/proc/ProcUidTimeInStateTest.py
+++ b/api/proc/ProcUidTimeInStateTest.py
@@ -49,7 +49,7 @@
     def get_path(self):
         return "/proc/uid_time_in_state"
 
-    def file_optional(self):
+    def file_optional(self, shell=None, dut=None):
         # This file is optional until implemented in Android common kernel
         return True
 
diff --git a/api/proc/VtsKernelProcFileApiTest.py b/api/proc/VtsKernelProcFileApiTest.py
index 3fe7a41..a656b37 100644
--- a/api/proc/VtsKernelProcFileApiTest.py
+++ b/api/proc/VtsKernelProcFileApiTest.py
@@ -67,6 +67,7 @@
     ProcSimpleFileTests.ProcCorePipeLimit(),
     ProcSimpleFileTests.ProcDirtyBackgroundBytes(),
     ProcSimpleFileTests.ProcDirtyBackgroundRatio(),
+    ProcSimpleFileTests.ProcDirtyExpireCentisecs(),
     ProcSimpleFileTests.ProcDmesgRestrict(),
     ProcSimpleFileTests.ProcDomainname(),
     ProcSimpleFileTests.ProcDropCaches(),
@@ -139,7 +140,7 @@
                        "Skip test for 64-bit kernel.")
         filepath = test_object.get_path()
         asserts.skipIf(not target_file_utils.Exists(filepath, self.shell) and
-                       test_object.file_optional(),
+                       test_object.file_optional(shell=self.shell, dut=self.dut),
                        "%s does not exist and is optional." % filepath)
         target_file_utils.assertPermissionsAndExistence(
             self.shell, filepath, test_object.get_permission_checker())
@@ -187,6 +188,12 @@
         return results[const.STDOUT][0]
 
     def testProcPagetypeinfo(self):
+        # TODO(b/109884074): make mandatory once incident_helper is in AOSP.
+        try:
+            self.dut.adb.shell("which incident_helper")
+        except:
+            asserts.skip("incident_helper not present")
+
         filepath = "/proc/pagetypeinfo"
         # Check that incident_helper can parse /proc/pagetypeinfo.
         result = self.shell.Execute("cat %s | incident_helper -s 2001" % filepath)
@@ -199,16 +206,16 @@
 
         # This command only performs a best effort attempt to remount all
         # filesystems. Check that it doesn't throw an error.
-        self.dut.adb.shell("\"echo u > %s\"" % filepath)
+        self.dut.adb.shell("echo u > %s" % filepath)
 
         # Reboot the device.
-        self.dut.adb.shell("\"echo b > %s\"" % filepath)
+        self.dut.adb.shell("echo b > %s" % filepath)
         asserts.assertFalse(self.dut.hasBooted(), "Device is still alive.")
         self.dut.waitForBootCompletion()
         self.dut.rootAdb()
 
         # Crash the system.
-        self.dut.adb.shell("\"echo c > %s\"" % filepath)
+        self.dut.adb.shell("echo c > %s" % filepath)
         asserts.assertFalse(self.dut.hasBooted(), "Device is still alive.")
         self.dut.waitForBootCompletion()
         self.dut.rootAdb()
@@ -225,7 +232,7 @@
             """
             stats_path = "/proc/uid_io/stats"
             result = self.dut.adb.shell(
-                    "\"cat %s | grep '^%d'\"" % (stats_path, uid),
+                    "cat %s | grep '^%d'" % (stats_path, uid),
                     no_except=True)
             return result[const.STDOUT].split()
 
@@ -243,9 +250,9 @@
             # fg write chars are at index 2, and bg write chars are at 6.
             wchar_index = 6 if state else 2
             old_wchar = UidIOStats(root_uid)[wchar_index]
-            self.dut.adb.shell("\"echo %d %s > %s\"" % (root_uid, state, filepath))
+            self.dut.adb.shell("echo %d %s > %s" % (root_uid, state, filepath))
             # This should increase the number of write syscalls.
-            self.dut.adb.shell("\"echo foo\"")
+            self.dut.adb.shell("echo foo")
             asserts.assertLess(
                 old_wchar,
                 UidIOStats(root_uid)[wchar_index],
diff --git a/api/qtaguid/Android.mk b/api/qtaguid/Android.mk
index 39ca48d..63eef09 100644
--- a/api/qtaguid/Android.mk
+++ b/api/qtaguid/Android.mk
@@ -35,5 +35,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelQtaguidTest
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/qtaguid
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/qtaguid/SocketTagUserSpace.cpp b/api/qtaguid/SocketTagUserSpace.cpp
index 1653351..2dd634d 100644
--- a/api/qtaguid/SocketTagUserSpace.cpp
+++ b/api/qtaguid/SocketTagUserSpace.cpp
@@ -121,7 +121,7 @@
   // b/30950746
   if (ret >= 2 && ((kernel_version_major == 4 && kernel_version_minor >= 9) ||
                    (kernel_version_major > 4))) {
-    *qtaguidSupport = (access("/dev/xt_qtaguid", F_OK) != -1);
+    *qtaguidSupport = false;
   } else {
     *qtaguidSupport = true;
   }
@@ -213,6 +213,8 @@
   uint64_t max_uint_tag;
 
   virtual void SetUp() {
+    SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
     my_uid = getuid();
     my_pid = getpid();
     srand48(my_pid * my_uid);
@@ -253,6 +255,8 @@
 
 /* Tag to a invalid socket fd, should fail */
 TEST_F(SocketTagUsrSpaceTest, invalidSockfdFail) {
+  SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
   EXPECT_LT(legacy_tagSocket(-1, valid_tag1, my_uid), 0)
       << "Invalid socketfd case 1, should fail.";
 }
@@ -268,6 +272,8 @@
 
 /* Untag invalid socket fd, should fail */
 TEST_F(SocketTagUsrSpaceTest, UntagInvalidSocketFail) {
+  SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
   EXPECT_LT(legacy_untagSocket(-1), 0) << "invalid socket fd, should fail";
   EXPECT_LT(legacy_untagSocket(sock_0.fd), 0)
       << "no tags on sock0, should fail";
@@ -278,6 +284,8 @@
  * should fail
  */
 TEST_F(SocketTagUsrSpaceTest, CounterSetNumExceedFail) {
+  SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
   int wrongCounterNum = kMaxCounterSet + 1;
   EXPECT_LT(legacy_setCounterSet(wrongCounterNum, my_uid), 0)
       << "Invalid counter set number, should fail.";
@@ -350,6 +358,8 @@
  * Should keep both
  */
 TEST_F(SocketTagUsrSpaceTest, ReTagWithUidChange) {
+  SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
   EXPECT_GE(legacy_tagSocket(sock_0.fd, valid_tag2, fake_uid), 0);
   EXPECT_GE(legacy_tagSocket(sock_0.fd, valid_tag1, fake_uid2), 0);
 }
diff --git a/api/rootdir/Android.mk b/api/rootdir/Android.mk
index f148a27..e2a6f08 100644
--- a/api/rootdir/Android.mk
+++ b/api/rootdir/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelRootDir
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/rootdir
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/selinux/Android.mk b/api/selinux/Android.mk
index 0c50947..906575d 100644
--- a/api/selinux/Android.mk
+++ b/api/selinux/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelSelinuxFileApi
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/selinux
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/sysfs/Android.mk b/api/sysfs/Android.mk
index 6871e46..4b63d86 100644
--- a/api/sysfs/Android.mk
+++ b/api/sysfs/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelApiSysfsTest
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/sysfs
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/sysfs/KernelApiSysfsTest.py b/api/sysfs/KernelApiSysfsTest.py
index 7d09100..ca5a1e3 100644
--- a/api/sysfs/KernelApiSysfsTest.py
+++ b/api/sysfs/KernelApiSysfsTest.py
@@ -66,35 +66,52 @@
         asserts.assertEqual(match.start(), 0, message)
         asserts.assertEqual(match.end(), len(string), message)
 
-    def GetPathPermission(self, path):
+    def GetPathPermission(self, path, assert_if_absent):
         '''Get the permission bits of a path, catching IOError.'''
         permission = ''
         try:
             permission = target_file_utils.GetPermission(path, self.shell)
         except IOError as e:
+            if not assert_if_absent:
+                return None
             logging.exception(e)
             asserts.fail('Path "%s" does not exist or has invalid '
                          'permission bits' % path)
         return permission
 
-    def IsReadOnly(self, path):
+    def IsReadOnly(self, path, assert_if_absent=True):
         '''Check whether a given path is read only.
 
         Assertion will fail if given path does not exist or is not read only.
         '''
-        permission = self.GetPathPermission(path)
+        permission = self.GetPathPermission(path, assert_if_absent)
+        if permission is None and not assert_if_absent:
+            return
         asserts.assertTrue(target_file_utils.IsReadOnly(permission),
                 'path %s is not read only' % path)
 
-    def IsReadWrite(self, path):
+    def IsReadWrite(self, path, assert_if_absent=True):
         '''Check whether a given path is read-write.
 
         Assertion will fail if given path does not exist or is not read-write.
         '''
-        permission = self.GetPathPermission(path)
+        permission = self.GetPathPermission(path, assert_if_absent)
+        if permission is None and not assert_if_absent:
+            return
         asserts.assertTrue(target_file_utils.IsReadWrite(permission),
                 'path %s is not read write' % path)
 
+    def tryReadFileContent(self, f, shell):
+        '''Attempt to read a file.
+
+        If the file does not exist None will be returned.
+        '''
+        try:
+            content = target_file_utils.ReadFileContent(f, self.shell)
+        except IOError as e:
+            return None
+        return content
+
     def testAndroidUSB(self):
         '''Check for the existence of required files in /sys/class/android_usb.
         '''
@@ -124,50 +141,62 @@
         '''Check each cpu's scaling_cur_freq, scaling_min_freq, scaling_max_freq,
         scaling_available_frequencies, and time_in_state files.
         '''
-        f = '/sys/devices/system/cpu/online'
+        f = '/sys/devices/system/cpu/present'
         self.IsReadOnly(f)
-        online_cpus = target_file_utils.ReadFileContent(f, self.shell)
-        cpu_ranges = online_cpus.split(',')
+        present_cpus = target_file_utils.ReadFileContent(f, self.shell)
+        cpu_ranges = present_cpus.split(',')
         cpu_list = []
+
         for r in cpu_ranges:
             m = re.match(r'(\d+)(-\d+)?', r)
             asserts.assertTrue(m is not None,
-                    'malformatted range in /sys/devices/system/cpu/online')
+                    'malformatted range in /sys/devices/system/cpu/present')
             start_cpu = int(m.group(1))
             if m.group(2) is None:
                 end_cpu = start_cpu
             else:
-                end_cpu = int(m.group(2))
+                end_cpu = int(m.group(2)[1:])
             cpu_list += range(start_cpu, end_cpu+1)
+
         for cpu in cpu_list:
             f = '/sys/devices/system/cpu/cpu%s/cpufreq/scaling_cur_freq' % cpu
-            self.IsReadOnly(f)
-            content = target_file_utils.ReadFileContent(f, self.shell)
-            self.ConvertToInteger(content)
+            self.IsReadOnly(f, False)
+            content = self.tryReadFileContent(f, self.shell)
+            if content is not None:
+                self.ConvertToInteger(content)
+
             f = '/sys/devices/system/cpu/cpu%s/cpufreq/scaling_min_freq' % cpu
-            self.IsReadWrite(f)
-            content = target.file_utils.ReadFileContent(f, self.shell)
-            self.ConvertToInteger(content)
+            self.IsReadWrite(f, False)
+            content = self.tryReadFileContent(f, self.shell)
+            if content is not None:
+                self.ConvertToInteger(content)
+
             f = '/sys/devices/system/cpu/cpu%s/cpufreq/scaling_max_freq' % cpu
-            self.IsReadWrite(f)
-            content = target.file_utils.ReadFileContent(f, self.shell)
-            self.ConvertToInteger(content)
+            self.IsReadWrite(f, False)
+            content = self.tryReadFileContent(f, self.shell)
+            if content is not None:
+                self.ConvertToInteger(content)
+
             f = '/sys/devices/system/cpu/cpu%s/cpufreq/scaling_available_frequencies' % cpu
-            self.IsReadOnly(f)
-            content = target.file_utils.ReadFileContent(f, self.shell)
-            avail_freqs = content.split(' ')
-            for x in avail_freqs:
-                self.ConvertToInteger(x)
+            self.IsReadOnly(f, False)
+            content = self.tryReadFileContent(f, self.shell)
+            if content is not None:
+                content = content.rstrip()
+                avail_freqs = content.split(' ')
+                for x in avail_freqs:
+                    self.ConvertToInteger(x)
+
             f = '/sys/devices/system/cpu/cpu%s/cpufreq/stats/time_in_state' % cpu
-            self.IsReadOnly(f)
-            content = target.file_utils.ReadFileContent(f, shelf.shell)
-            for line in content:
-                values = line.split()
-                for v in values:
-                    try:
-                        unused = int(v)
-                    except ValueError as e:
-                        asserts.fail("Malformatted time_in_state file at %s" % f)
+            self.IsReadOnly(f, False)
+            content = self.tryReadFileContent(f, self.shell)
+            if content is not None:
+                for line in content:
+                    values = line.split()
+                    for v in values:
+                        try:
+                            unused = int(v)
+                        except ValueError as e:
+                            asserts.fail("Malformatted time_in_state file at %s" % f)
 
     def testIpv4(self):
         '''Check /sys/kernel/ipv4/*.'''
diff --git a/api/system_as_root/Android.mk b/api/system_as_root/Android.mk
deleted file mode 100644
index b7957a3..0000000
--- a/api/system_as_root/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VtsKernelSystemAsRoot
-VTS_CONFIG_SRC_DIR := testcases/kernel/api/system_as_root
--include test/vts/tools/build/Android.host_config.mk
diff --git a/api/system_as_root/VtsKernelSystemAsRootTest.py b/api/system_as_root/VtsKernelSystemAsRootTest.py
deleted file mode 100644
index 8fb5d05..0000000
--- a/api/system_as_root/VtsKernelSystemAsRootTest.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-"""A test module to check system-as-root is enabled for new devices in P.
-
-The test logic is:
-    if precondition-first-api-level >= 28 (in AndroidTest.xml):
-        assert (
-            ro.build.system_root_image is 'true' AND
-            /system mount point doesn't exist)
-    else:
-        assert True
-"""
-
-
-import logging
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test
-from vts.runners.host import const
-from vts.runners.host import test_runner
-
-
-# The property to indicate the system image is also root image.
-_SYSTEM_ROOT_IMAGE_PROP = "ro.build.system_root_image"
-
-
-class VtsKernelSystemAsRootTest(base_test.BaseTestClass):
-    """A test class to verify system-as-root is enabled."""
-
-    def setUpClass(self):
-        """Initializes device and shell."""
-        self._dut = self.android_devices[0]
-        self._shell = self._dut.shell
-
-    def testSystemRootImageProperty(self):
-        """Checks ro.build.system_root_image is 'true'."""
-        asserts.assertEqual("true",
-                            self._dut.getProp(_SYSTEM_ROOT_IMAGE_PROP),
-                            "%s is not true" % _SYSTEM_ROOT_IMAGE_PROP)
-
-    def testNoSystemMountPoint(self):
-        """Checks there is no /system mount point."""
-        # The format of /proc/mounts is:
-        # <partition> <mount point> <file system> <mount options> ...
-        results = self._shell.Execute(
-            "cat /proc/mounts | cut -d\" \" -f2")
-        mount_points = results[const.STDOUT][0].split()
-        logging.info('Mount points on the device: %s', mount_points)
-        asserts.assertFalse("/system" in mount_points,
-                            "/system mount point shouldn't exist")
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/api/system_as_root/__init__.py b/api/system_as_root/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/api/system_as_root/__init__.py
+++ /dev/null
diff --git a/version/Android.mk b/checkpoint/Android.mk
similarity index 95%
rename from version/Android.mk
rename to checkpoint/Android.mk
index 07cc197..e07d2e4 100644
--- a/version/Android.mk
+++ b/checkpoint/Android.mk
@@ -18,5 +18,5 @@
 
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := VtsKernelVersion
+LOCAL_MODULE := CheckpointTest
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/api/system_as_root/AndroidTest.xml b/checkpoint/AndroidTest.xml
similarity index 76%
rename from api/system_as_root/AndroidTest.xml
rename to checkpoint/AndroidTest.xml
index ad28d5e..a2498b7 100644
--- a/api/system_as_root/AndroidTest.xml
+++ b/checkpoint/AndroidTest.xml
@@ -13,14 +13,16 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<configuration description="Config for VTS KernelSystemAsRoot test cases">
+<configuration description="Config for VTS CheckpointTest test cases">
     <option name="config-descriptor:metadata" key="plan" value="vts-kernel" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
         <option name="push-group" value="HostDrivenTest.push" />
+        <option name="cleanup" value="true" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VtsKernelSystemAsRoot" />
-        <option name="test-case-path" value="vts/testcases/kernel/api/system_as_root/VtsKernelSystemAsRootTest" />
-        <option name="precondition-first-api-level" value="28" />
+        <option name="test-module-name" value="VtsKernelCheckpointTest" />
+        <option name="test-timeout" value="6m" />
+        <option name="runtime-hint" value="5m" />
+        <option name="test-case-path" value="vts/testcases/kernel/checkpoint/CheckpointTest" />
     </test>
 </configuration>
diff --git a/checkpoint/CheckpointTest.py b/checkpoint/CheckpointTest.py
new file mode 100644
index 0000000..e6d0344
--- /dev/null
+++ b/checkpoint/CheckpointTest.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from vts.runners.host import asserts
+from vts.runners.host import base_test
+from vts.runners.host import const
+from vts.runners.host import test_runner
+
+
+class VtsKernelCheckpointTest(base_test.BaseTestClass):
+
+    _CHECKPOINTTESTFILE = "/data/local/tmp/checkpointtest"
+    _ORIGINALVALUE = "original value"
+    _MODIFIEDVALUE = "modified value"
+
+    def getFstab(self):
+        self.dut.adb.root()
+
+        for prop in ["hardware", "hardware.platform"]:
+            extension = self.dut.adb.shell("getprop ro.boot." + prop, no_except = True)
+            extension = extension[const.STDOUT]
+            if not extension:
+                continue
+
+            for filename in ["/odm/etc/fstab.", "/vendor/etc/fstab.", "/fstab."]:
+                contents = self.dut.adb.shell("cat " + filename + extension, no_except = True)
+                if contents[const.EXIT_CODE] != 0:
+                    continue
+
+                return contents[const.STDOUT]
+
+        return ""
+
+    def isCheckpoint(self):
+        fstab = self.getFstab().splitlines()
+        for line in fstab:
+            parts = line.split()
+            if len(parts) != 5: # fstab has five parts for each entry:
+                                # [device-name] [mount-point] [type] [mount_flags] [fsmgr_flags]
+                continue
+
+            flags = parts[4]    # the fsmgr_flags field is the fifth one, thus index 4
+            flags = flags.split(',')
+            if any(flag.startswith("checkpoint=") for flag in flags):
+                return True
+
+        return False
+
+    def setUpClass(self):
+        self.dut = self.android_devices[0]
+        self.shell = self.dut.shell
+        self.isCheckpoint_ = self.isCheckpoint()
+
+    def reboot(self):
+        self.dut.reboot()
+        self.dut.adb.root()
+
+    def testRollback(self):
+        if not self.isCheckpoint_:
+            return
+
+        # Create a file and initiate checkpoint
+        self.dut.adb.root()
+        self.dut.adb.shell("echo " + self._ORIGINALVALUE + " > " + self._CHECKPOINTTESTFILE)
+        result = self.dut.adb.shell("vdc checkpoint startCheckpoint 1", no_except = True)
+        asserts.assertEqual(result[const.EXIT_CODE], 1)
+        self.reboot()
+
+        # Modify the file but do not commit
+        self.dut.adb.shell("echo " + self._MODIFIEDVALUE + " > " + self._CHECKPOINTTESTFILE)
+        self.reboot()
+
+        # Check the file is unchanged
+        result = self.dut.adb.shell("cat " + self._CHECKPOINTTESTFILE)
+        asserts.assertEqual(result.strip(), self._ORIGINALVALUE)
+
+        # Clean up
+        result = self.dut.adb.shell("vdc checkpoint commitChanges", no_except = True)
+        asserts.assertEqual(result[const.EXIT_CODE], 1)
+        self.reboot()
+        self.dut.adb.shell("rm " + self._CHECKPOINTTESTFILE)
+
+    def testCommit(self):
+        if not self.isCheckpoint_:
+            return
+
+        # Create a file and initiate checkpoint
+        self.dut.adb.root()
+        self.dut.adb.shell("echo " + self._ORIGINALVALUE + " > " + self._CHECKPOINTTESTFILE)
+        result = self.dut.adb.shell("vdc checkpoint startCheckpoint 1", no_except = True)
+        asserts.assertEqual(result[const.EXIT_CODE], 1)
+        self.reboot()
+
+        # Modify the file and commit the checkpoint
+        self.dut.adb.shell("echo " + self._MODIFIEDVALUE + " > " + self._CHECKPOINTTESTFILE)
+        result = self.dut.adb.shell("vdc checkpoint commitChanges", no_except = True)
+        asserts.assertEqual(result[const.EXIT_CODE], 1)
+        self.reboot()
+
+        # Check file has changed
+        result = self.dut.adb.shell("cat " + self._CHECKPOINTTESTFILE)
+        asserts.assertEqual(result.strip(), self._MODIFIEDVALUE)
+
+        # Clean up
+        self.dut.adb.shell("rm " + self._CHECKPOINTTESTFILE)
+
+if __name__ == "__main__":
+    test_runner.main()
diff --git a/config/__init__.py b/checkpoint/__init__.py
similarity index 100%
rename from config/__init__.py
rename to checkpoint/__init__.py
diff --git a/config/Android.mk b/config/Android.mk
deleted file mode 100644
index 181a8e4..0000000
--- a/config/Android.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2017 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VtsKernelConfig
--include test/vts/tools/build/Android.host_config.mk
\ No newline at end of file
diff --git a/config/AndroidTest.xml b/config/AndroidTest.xml
deleted file mode 100644
index bac70bc..0000000
--- a/config/AndroidTest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<configuration description="Config for VTS KernelConfigTest">
-    <option name="config-descriptor:metadata" key="plan" value="vts-kernel" />
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HostDrivenTest.push" />
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VtsKernelConfig" />
-        <option name="test-case-path" value="vts/testcases/kernel/config/VtsKernelConfigTest" />
-    </test>
-</configuration>
diff --git a/config/VtsKernelConfigTest.py b/config/VtsKernelConfigTest.py
deleted file mode 100644
index 73cf7b0..0000000
--- a/config/VtsKernelConfigTest.py
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2017 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import gzip
-import logging
-import os
-import re
-import shutil
-import tempfile
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test
-from vts.runners.host import const
-from vts.runners.host import keys
-from vts.runners.host import test_runner
-from vts.utils.python.android import api
-from vts.utils.python.controllers import android_device
-from vts.utils.python.file import target_file_utils
-
-from vts.testcases.kernel.lib import version
-
-
-class VtsKernelConfigTest(base_test.BaseTestClass):
-    """Test case which check config options in /proc/config.gz.
-
-    Attributes:
-        _temp_dir: The temporary directory to which /proc/config.gz is copied.
-    """
-
-    PROC_FILE_PATH = "/proc/config.gz"
-    KERNEL_CONFIG_FILE_PATH = "vts/testcases/kernel/config/data"
-
-    def setUpClass(self):
-        required_params = [keys.ConfigKeys.IKEY_DATA_FILE_PATH]
-        self.getUserParams(required_params)
-        self.dut = self.android_devices[0]
-        self.shell = self.dut.shell
-        self._temp_dir = tempfile.mkdtemp()
-        self.supported_kernel_versions = version.getSupportedKernels(self.dut)
-        self.release_dir = self.getReleaseDir()
-
-    def getReleaseDir(self):
-        """Return the appropriate subdirectory in kernel/configs.
-
-        Returns the directory in kernel/configs corresponding to
-        the device's first_api_level.
-
-        Returns:
-            string: a directory in kernel configs
-        """
-        api_level = self.dut.getLaunchApiLevel(strict=False)
-
-        if (api_level == 0):
-            logging.info("Cound not detect api level, using last release")
-            return "p"
-        elif api_level == api.PLATFORM_API_LEVEL_P:
-            return "p"
-        elif api_level == api.PLATFORM_API_LEVEL_O_MR1:
-            return "o-mr1"
-        elif api_level <= api.PLATFORM_API_LEVEL_O:
-            return "o"
-        else:
-            return "."
-
-    def checkKernelVersion(self):
-        """Validate the kernel version of DUT is a valid kernel version.
-
-        Returns:
-            string, kernel version of device
-        """
-        cmd = "uname -a"
-        results = self.shell.Execute(cmd)
-        logging.info("Shell command '%s' results: %s", cmd, results)
-
-        match = re.search(r"(\d+)\.(\d+)", results[const.STDOUT][0])
-        if match is None:
-            asserts.fail("Failed to detect kernel version of device.")
-        else:
-            kernel_version = int(match.group(1))
-            kernel_patchlevel = int(match.group(2))
-        logging.info("Detected kernel version: %s", match.group(0))
-
-        for v in self.supported_kernel_versions:
-            if (kernel_version == v[0] and kernel_patchlevel == v[1]):
-                return match.group(0)
-        asserts.fail("Detected kernel version is not one of %s" %
-                     self.supported_kernel_versions)
-
-    def checkKernelArch(self, configs):
-        """Find arch of the device kernel.
-
-        Uses the kernel configuration to determine the architecture
-        it is compiled for.
-
-        Args:
-            configs: dict containing device kernel configuration options
-
-        Returns:
-            A string containing the architecture of the device kernel. If
-            the architecture cannot be determined, an empty string is
-            returned.
-        """
-
-        CONFIG_ARM = "CONFIG_ARM"
-        CONFIG_ARM64 = "CONFIG_ARM64"
-        CONFIG_X86 = "CONFIG_X86"
-
-        if CONFIG_ARM in configs and configs[CONFIG_ARM] == "y":
-            return "arm"
-        elif CONFIG_ARM64 in configs and configs[CONFIG_ARM64] == "y":
-            return "arm64"
-        elif CONFIG_X86 in configs and configs[CONFIG_X86] == "y":
-            return "x86"
-        else:
-            print "Unable to determine kernel architecture."
-            return ""
-
-    def parseConfigFileToDict(self, file, configs):
-        """Parse kernel config file to a dictionary.
-
-        Args:
-            file: file object, android-base.cfg or unzipped /proc/config.gz
-            configs: dict to which config options in file will be added
-
-        Returns:
-            dict: {config_name: config_state}
-        """
-        config_lines = [line.rstrip("\n") for line in file.readlines()]
-
-        for line in config_lines:
-            if line.startswith("#") and line.endswith("is not set"):
-                match = re.search(r"CONFIG_\S+", line)
-                if match is None:
-                    asserts.fail("Failed to parse config file")
-                else:
-                    config_name = match.group(0)
-                config_state = "n"
-            elif line.startswith("CONFIG_"):
-                config_name, config_state = line.split("=", 1)
-                if config_state.startswith(("'", '"')):
-                    config_state = config_state[1:-1]
-            else:
-                continue
-            configs[config_name] = config_state
-
-        return configs
-
-    def testKernelConfigs(self):
-        """Ensures all kernel configs conform to Android requirements.
-
-        Detects kernel version of device and validates against appropriate
-        Common Android Kernel android-base.cfg and Android Treble
-        requirements.
-        """
-        logging.info("Testing existence of %s" % self.PROC_FILE_PATH)
-        target_file_utils.assertPermissionsAndExistence(
-            self.shell, self.PROC_FILE_PATH, target_file_utils.IsReadOnly)
-
-        logging.info("Validating kernel version of device.")
-        kernel_version = self.checkKernelVersion()
-
-        # Pull configs from the universal config file.
-        configs = dict()
-        config_file_path = os.path.join(
-            self.data_file_path, self.KERNEL_CONFIG_FILE_PATH,
-            self.release_dir, "android-" + kernel_version, "android-base.cfg")
-        logging.info("Pulling base cfg from %s", config_file_path)
-        with open(config_file_path, 'r') as config_file:
-            configs = self.parseConfigFileToDict(config_file, configs)
-
-        # Pull configs from device.
-        device_configs = dict()
-        self.dut.adb.pull("%s %s" % (self.PROC_FILE_PATH, self._temp_dir))
-        logging.info("Adb pull %s to %s", self.PROC_FILE_PATH, self._temp_dir)
-
-        localpath = os.path.join(self._temp_dir, "config.gz")
-        with gzip.open(localpath, "rb") as device_config_file:
-            device_configs = self.parseConfigFileToDict(
-                device_config_file, device_configs)
-
-        # Check device architecture and pull arch-specific configs.
-        kernelArch = self.checkKernelArch(device_configs)
-        if kernelArch is not "":
-            config_file_path = os.path.join(self.data_file_path,
-                                            self.KERNEL_CONFIG_FILE_PATH,
-                                            self.release_dir,
-                                            "android-" + kernel_version,
-                                            "android-base-%s.cfg" % kernelArch)
-            if os.path.isfile(config_file_path):
-                logging.info("Pulling arch cfg from %s", config_file_path)
-                with open(config_file_path, 'r') as config_file:
-                    configs = self.parseConfigFileToDict(config_file, configs)
-
-        # Determine any deviations from the required configs.
-        should_be_enabled = []
-        should_not_be_set = []
-        incorrect_config_state = []
-        for config_name, config_state in configs.iteritems():
-            if (config_state == "y" and
-                (config_name not in device_configs or
-                 device_configs[config_name] not in ("y", "m"))):
-                should_be_enabled.append(config_name)
-            elif (config_state == "n" and (config_name in device_configs) and
-                  device_configs[config_name] != "n"):
-                should_not_be_set.append(config_name + "=" +
-                                         device_configs[config_name])
-            elif (config_name in device_configs and
-                  device_configs[config_name] != config_state):
-                incorrect_config_state.append(config_name + "=" +
-                                              device_configs[config_name])
-
-        if ("CONFIG_OF" not in device_configs and
-                "CONFIG_ACPI" not in device_configs):
-            should_be_enabled.append("CONFIG_OF | CONFIG_ACPI")
-
-        if ("CONFIG_ANDROID_LOW_MEMORY_KILLER" not in device_configs and
-                ("CONFIG_MEMCG" not in device_configs or
-                 "CONFIG_MEMCG_SWAP" not in device_configs)):
-            should_be_enabled.append("CONFIG_ANDROID_LOW_MEMORY_KILLER | "
-                                     "(CONFIG_MEMCG & CONFIG_MEMCG_SWAP)")
-
-        asserts.assertTrue(
-            len(should_be_enabled) == 0 and len(should_not_be_set) == 0 and
-            len(incorrect_config_state) == 0,
-            ("The following kernel configs should be enabled: [%s]\n"
-             "The following kernel configs should not be set: [%s]\n"
-             "THe following kernel configs have incorrect state: [%s]") %
-            (", ".join(should_be_enabled), ", ".join(should_not_be_set),
-             ", ".join(incorrect_config_state)))
-
-    def tearDownClass(self):
-        """Deletes the temporary directory."""
-        logging.info("Delete %s", self._temp_dir)
-        shutil.rmtree(self._temp_dir)
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/cpu_profiling/Android.mk b/cpu_profiling/Android.mk
index b05e156..fe4a2bf 100644
--- a/cpu_profiling/Android.mk
+++ b/cpu_profiling/Android.mk
@@ -18,5 +18,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := CpuProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/kernel/cpu_profiling
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/lib/__init__.py b/lib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/__init__.py
+++ /dev/null
diff --git a/lib/version.py b/lib/version.py
deleted file mode 100644
index c5cc466..0000000
--- a/lib/version.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from vts.utils.python.android import api
-
-def getSupportedKernels(dut):
-    """Returns a list of the supported kernel versions for this
-    devices' advertised API level.
-
-    Args:
-        dut: The AndroidDevice object corresponding to the device
-        under test.
-
-    Returns:
-        A list of supported kernel versions.
-    """
-    api_level = dut.getLaunchApiLevel(strict=False)
-    if api_level > api.PLATFORM_API_LEVEL_O_MR1 or api_level == 0:
-        return [[4, 4, 107], [4, 9, 84], [4, 14, 42]]
-    else:
-        return [[3, 18, 0], [4, 4, 0], [4, 9, 0]]
diff --git a/linux_kselftest/presubmit/Android.mk b/linux_kselftest/presubmit/Android.mk
index 52e91d7..b02f247 100644
--- a/linux_kselftest/presubmit/Android.mk
+++ b/linux_kselftest/presubmit/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelLinuxKselftestPresubmit
-VTS_CONFIG_SRC_DIR := testcases/kernel/linux_kselftest/presubmit
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/linux_kselftest/stable/Android.mk b/linux_kselftest/stable/Android.mk
index ddc23e0..95d2b78 100644
--- a/linux_kselftest/stable/Android.mk
+++ b/linux_kselftest/stable/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelLinuxKselftest
-VTS_CONFIG_SRC_DIR := testcases/kernel/linux_kselftest/stable
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/linux_kselftest/staging/Android.mk b/linux_kselftest/staging/Android.mk
index c413cf3..6b789ce 100644
--- a/linux_kselftest/staging/Android.mk
+++ b/linux_kselftest/staging/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelLinuxKselftestStaging
-VTS_CONFIG_SRC_DIR := testcases/kernel/linux_kselftest/staging
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/ltp/KernelLtpTest.py b/ltp/KernelLtpTest.py
index ccf2143..c11322d 100644
--- a/ltp/KernelLtpTest.py
+++ b/ltp/KernelLtpTest.py
@@ -60,8 +60,8 @@
                            the number is greater than 0, that number of threads
                            will be created to run the tests.
     """
-    _32BIT = "32"
-    _64BIT = "64"
+    _32BIT = 32
+    _64BIT = 64
     _PASS = 0
     _SKIP = 1
     _FAIL = -1
@@ -196,12 +196,15 @@
 
         # For LTP test cases, we run one shell command for each test case
         # So the result should also contains only one execution output
-        stdout = results[const.STDOUT][0]
-        ret_code = results[const.EXIT_CODE][0]
+        try:
+            stdout = results[const.STDOUT][0]
+            ret_code = results[const.EXIT_CODE][0]
+        except IndexError as e:
+            logging.exception(e)
+            return (self._FAIL, "Command result is malformed.")
+
         # Test case is not for the current configuration, SKIP
-        if ((ret_code == ltp_enums.TestExitCode.TCONF and
-             'TPASS' not in stdout) or
-            (ret_code == ltp_enums.TestExitCode.TPASS and 'CONF' in stdout)):
+        if (ret_code == ltp_enums.TestExitCode.TCONF):
             return (self._SKIP, "Incompatible test skipped: TCONF")
         elif ret_code not in (ltp_enums.TestExitCode.TCONF,
                               ltp_enums.TestExitCode.TPASS):
@@ -242,7 +245,7 @@
             n_bit: int, bitness
         """
         test_bit = 'nativetest'
-        if n_bit == 64:
+        if n_bit == self._64BIT:
             test_bit += '64'
         self.PreTestSetup(test_bit)
         self.PushFiles(test_bit)
diff --git a/ltp/configs/disabled_tests.py b/ltp/configs/disabled_tests.py
index f53fcff..3c8e3b3 100644
--- a/ltp/configs/disabled_tests.py
+++ b/ltp/configs/disabled_tests.py
@@ -1,92 +1,37 @@
 # Tests disabled
-# Based on external/ltp commit 5f01077afe994f4107b147222f3956716d4a8fde
 DISABLED_TESTS = [
-    # b/32386191 getrusage04 result is flaky
-    'syscalls.getrusage04',
-    # b/31154962
-    'cpuhotplug.cpuhotplug02',
-    # The following test cases are uncategorized
-    'syscalls.chown01_16',
-    'syscalls.chown02_16',
-    'syscalls.chown03_16',
-    'syscalls.chown05_16',
-    'syscalls.fchown04',
-    'syscalls.fchown01_16',
-    'syscalls.fchown02_16',
-    'syscalls.fchown03_16',
-    'syscalls.fchown04_16',
-    'syscalls.fchown05_16',
-    'syscalls.getegid01_16',
-    'syscalls.getegid02_16',
-    'syscalls.geteuid01_16',
-    'syscalls.geteuid02_16',
-    'syscalls.getgid01_16',
-    'syscalls.getgid03_16',
-    'syscalls.getgroups01_16',
-    'syscalls.gethostbyname_r01',
-    'syscalls.getuid01_16',
-    'syscalls.getuid03_16',
-    'syscalls.ioctl03',
-    'syscalls.inotify03',
-    'syscalls.lchown03',
-    'syscalls.lchown01_16',
-    'syscalls.lchown02_16',
-    'syscalls.lchown03_16',
-    'syscalls.mmap16',
-    'syscalls.mprotect01',
-    'syscalls.nftw01',
-    'syscalls.nftw6401',
-    'syscalls.nice04',
-    'syscalls.open08',
-    'syscalls.open11',
-    'syscalls.pathconf01',
-    'syscalls.preadv02',
-    'syscalls.pwritev02',
-    'syscalls.rt_sigprocmask01',
-    'syscalls.setfsgid01_16',
-    'syscalls.setfsgid02_16',
-    'syscalls.setfsgid03_16',
-    'syscalls.setfsuid01_16',
-    'syscalls.setfsuid02_16',
-    'syscalls.setfsuid03_16',
-    'syscalls.setfsuid04_16',
-    'syscalls.setgid01_16',
-    'syscalls.setgid02_16',
-    'syscalls.setgid03_16',
-    'syscalls.setgroups01_16',
-    'syscalls.setgroups02_16',
-    'syscalls.setgroups03_16',
-    'syscalls.setgroups04_16',
-    'syscalls.setregid02',
-    'syscalls.setregid03',
-    'syscalls.setregid04',
-    'syscalls.setregid01_16',
-    'syscalls.setregid02_16',
-    'syscalls.setregid03_16',
-    'syscalls.setregid04_16',
-    'syscalls.setresgid01_16',
-    'syscalls.setresgid02_16',
-    'syscalls.setresgid03_16',
-    'syscalls.setresgid04_16',
-    'syscalls.setresuid01_16',
-    'syscalls.setresuid02_16',
-    'syscalls.setresuid03_16',
-    'syscalls.setresuid04_16',
-    'syscalls.setresuid05_16',
-    'syscalls.setreuid01_16',
-    'syscalls.setreuid02_16',
-    'syscalls.setreuid03_16',
-    'syscalls.setreuid04_16',
-    'syscalls.setreuid05_16',
-    'syscalls.setreuid06_16',
-    'syscalls.setreuid07_16',
-    'syscalls.setuid01_16',
-    'syscalls.setuid02_16',
-    'syscalls.setuid03_16',
-    'syscalls.setuid04_16',
-    'syscalls.splice02',
-    'syscalls.sysconf01',
-    'syscalls.utimensat01',
+    'cap_bounds.Cap_bounds',
+    'commands.file01', # b/71414136
+    'cpuhotplug.cpuhotplug02', # b/31154962
+    'cpuhotplug.cpuhotplug03',
+    'cpuhotplug.cpuhotplug04', # b/30688056
+    'cpuhotplug.cpuhotplug06',
+    'cve.cve-2014-0196', # b/112350736
+    'cve.cve-2015-0235', # b/112350398
+    'cve.cve-2016-4470', # b/112354289
+    'cve.cve-2017-1000364', # b/112350736
+    'cve.cve-2017-5669', # b/112354289
+    'dio.dio04',
+    'dio.dio10',
+    'dio.dio29', # takes too long
+    'dio.dio30', # takes too long
+    'dma_thread_diotest.dma_thread_diotest1', # b/32100169
+    'dma_thread_diotest.dma_thread_diotest2',
+    'dma_thread_diotest.dma_thread_diotest3',
+    'dma_thread_diotest.dma_thread_diotest4',
+    'dma_thread_diotest.dma_thread_diotest5',
+    'dma_thread_diotest.dma_thread_diotest6',
+    'dma_thread_diotest.dma_thread_diotest7',
+    'fcntl-locktests_android.FCNTL_LOCKTESTS',
+    'filecaps.Filecaps',
+    'fs.fs_racer_32bit', # b/71780005
+    'fs.fs_racer_64bit', # b/71780005
+    'fs.ftest01',
+    'fs.ftest03',
+    'fs.ftest04',
+    'fs.ftest05',
+    'fs.ftest07',
+    'fs.ftest08',
     'fs.gf01',
     'fs.gf02',
     'fs.gf03',
@@ -115,19 +60,61 @@
     'fs.gf28',
     'fs.gf29',
     'fs.gf30',
+    'fs.iogen01',
+    'fs.isofs',
+    'fs.proc01', # b/71415362
+    'fs.quota_remount_test01', # b/33008689
     'fs.rwtest01',
     'fs.rwtest02',
     'fs.rwtest03',
     'fs.rwtest04',
     'fs.rwtest05',
-    'fs.iogen01',
-    'fs.isofs',
+    'fs_bind.BindMounts',
+    'fs_ext4.ext4-persist-prealloc',
+    'fs_ext4.ext4-uninit-groups',
     'fsx.fsx-linux',
-    'mm.mtest06',
-    'mm.shm_test01',
+    'fsx.fsx-linux',
+    'hugetlb.hugemmap05_1',
+    'hugetlb.hugemmap05_2',
+    'hugetlb.hugemmap05_3',
+    'input.input01_64bit', # unstable 64-bits tests
+    'input.input02_64bit',
+    'input.input04_64bit',
+    'input.input05_64bit',
+    'input.input06_32bit',
+    'input.input06_64bit',
+    'kernel_misc.kmsg01', # b/32343072
+    'kernel_misc.zram03',
+    'mm.ksm01',
+    'mm.ksm01_1', # b/71416672
+    'mm.ksm03',
+    'mm.ksm03_1',
     'mm.mallocstress01',
-    'mm.vma03',
+    'mm.max_map_count_32bit', # b/67981135
+    'mm.max_map_count_64bit', # b/67981135
     'mm.min_free_kbytes',
+    'mm.mmapstress10',
+    'mm.mtest01',
+    'mm.mtest01w', # b/30699880
+    'mm.oom01_64bit', # b/31181781
+    'mm.oom02_64bit',
+    'mm.oom03_64bit',
+    'mm.oom04_64bit',
+    'mm.oom05_64bit',
+    'mm.overcommit_memory01_64bit', # failing 64-bit only tests
+    'mm.overcommit_memory02_64bit',
+    'mm.overcommit_memory03_64bit',
+    'mm.overcommit_memory04_64bit',
+    'mm.overcommit_memory05_64bit',
+    'mm.overcommit_memory06_64bit',
+    'mm.shm_test01',
+    'mm.swapping01_64bit',  # b/31181781
+    'mm.thp01_32bit', # b/65636203
+    'mm.thp01_64bit',
+    'mm.thp02_64bit',
+    'mm.thp03_64bit',
+    'mm.vma01_64bit', # b/31181781
+    'mm.vma03',
     'pipes.pipeio_1',
     'pipes.pipeio_3',
     'pipes.pipeio_4',
@@ -135,165 +122,65 @@
     'pipes.pipeio_6',
     'pipes.pipeio_8',
     'sched.trace_sched01',
-    'math.float_bessel',
-    'math.float_exp_log',
-    'math.float_iperb',
-    'math.float_power',
-    'math.float_trigo',
-    'fs_bind.BindMounts',
-    'filecaps.Filecaps',
-    'cap_bounds.Cap_bounds',
-    'fcntl-locktests_android.FCNTL_LOCKTESTS',
-    'numa.move_pages03',
-    'numa.move_pages11',
-    'hugetlb.hugemmap05_1',
-    'hugetlb.hugemmap05_2',
-    'hugetlb.hugemmap05_3',
-    'hyperthreading.smt_smp_enabled',
-    'hyperthreading.smt_smp_affinity',
-    'kernel_misc.zram03',
-    'fs_ext4.ext4-uninit-groups',
-    'fs_ext4.ext4-persist-prealloc',
-    'cpuhotplug.cpuhotplug03',
-    'cpuhotplug.cpuhotplug06',
-    'dio.dio10',
-    # dio29 and dio30 take too long to finish
-    'dio.dio29',
-    'dio.dio30',
-    'fsx.fsx-linux',
-    'dio.dio04',
-    'numa.Numa-testcases',
-    'syscalls.connect01',
-    'syscalls.prot_hsymlinks',
-    'fs.ftest01',
-    'fs.ftest03',
-    'fs.ftest04',
-    'fs.ftest05',
-    'fs.ftest07',
-    'fs.ftest08',
-    'fs.inode02',
-    'ipc.signal_test_01',
-    'mm.mmapstress10',
+    'syscalls.access04',
+    'syscalls.alarm02', # b/112423802
+    'syscalls.cve-2017-5669', # b/71416706
+    'syscalls.fchown04',
+    'syscalls.fchown04_16',
     'syscalls.fcntl14',
     'syscalls.fcntl14',
     'syscalls.fcntl14_64',
     'syscalls.fcntl17',
     'syscalls.fcntl17_64',
-    'syscalls.kill12',
-    'syscalls.sigpending02',
-    'syscalls.sigrelse01',
-    'syscalls.vfork02',
-    # The following tests are not stable on 64bit version
-    'input.input01_64bit',
-    'input.input02_64bit',
-    'input.input04_64bit',
-    'input.input05_64bit',
-    'input.input06_64bit',
-    'input.input06_32bit',
-    # The following tests are failing on 64bit version
-    'mm.overcommit_memory01_64bit',
-    'mm.overcommit_memory02_64bit',
-    'mm.overcommit_memory03_64bit',
-    'mm.overcommit_memory04_64bit',
-    'mm.overcommit_memory05_64bit',
-    'mm.overcommit_memory06_64bit',
-    # tests that are currently killing some lab devices 64bit on (pixel and bullhead)
-    # b/31181781
-    'mm.oom01_64bit',
-    'mm.oom02_64bit',
-    'mm.oom03_64bit',
-    'mm.oom04_64bit',
-    'mm.oom05_64bit',
-    'mm.swapping01_64bit',
-    'mm.thp01_64bit',
-    'mm.thp02_64bit',
-    'mm.thp03_64bit',
-    'mm.vma01_64bit',
-    # b/65636203
-    'mm.thp01_32bit',
-    # kmsg01 would pass but it occasionally causes socket timeout and misalignment
-    # of request and response
-    # b/32343072
-    'kernel_misc.kmsg01',
-    # alarm02 tests for a boundary condition which is impractical to implement
-    # correctly on 32-bit Linux.  bionic deliberately breaks with POSIX by reporting
-    # that it failed to set up the alarm.  (Other libc implementations fail to
-    # set up the alarm too, but then return 0 anyway.)
-    'syscalls.alarm02',
-    # readdir02 calls opendir() -> closedir() -> readdir() and checks if readdir()
-    # returns EBADF.  POSIX doesn't require this, and bionic is likely to instead
-    # deadlock trying to acquire a destroyed mutex.
-    'syscalls.readdir02',
-    # Android sets RLIMIT_NICE to 40, so setpriority02 succeeds unexpectedly
-    'syscalls.setpriority02',
-    # fork13 takes ~45 minutes to run
-    'syscalls.fork13',
-    # open13 tests that fchmod() fails on fds opened with O_PATH.  bionic
-    # deliberately masks the EBADF returned by the kernel.
-    #
-    # https://android-review.googlesource.com/#/c/127908/
-    'syscalls.open13',
-    # Bug#30675453
-    'syscalls.perf_event_open02',
-    # Bug#30688551
-    'syscalls.lstat03_64',
-    'syscalls.lstat03',
-    # Bug#30688056
-    'cpuhotplug.cpuhotplug04',
-    # Bug#30699880
-    'mm.mtest01w',
-    'mm.mtest01',
-    # Bug#30688574
-    'syscalls.accept4_01',
-    # Bug #32100169
-    'dma_thread_diotest.dma_thread_diotest1',
-    'dma_thread_diotest.dma_thread_diotest2',
-    'dma_thread_diotest.dma_thread_diotest3',
-    'dma_thread_diotest.dma_thread_diotest4',
-    'dma_thread_diotest.dma_thread_diotest5',
-    'dma_thread_diotest.dma_thread_diotest6',
-    'dma_thread_diotest.dma_thread_diotest7',
-    # b/33008689 (closed) requires mkfs.ext4 and loop device support.
-    'fs.quota_remount_test01',
-    # https://b/65053723#comment19 (Flaky due to timeout dependency)
-    'syscalls.pselect01',
-    # https://b/65053723#comment20 (seems to test for "xfs" specific bug)
-    'syscalls.getxattr04',
-    # Following tests added in LTP20170516 release are disabled because
-    # they currently fail with VTS
-    'syscalls.access04',
+    'syscalls.fcntl35',
+    'syscalls.fcntl35_64', # b/71416738
+    'syscalls.fcntl36',
+    'syscalls.fcntl36_64', # b/71416760
+    'syscalls.fork13', # takes too long: ~45mins
+    'syscalls.gethostbyname_r01',
+    'syscalls.getrusage04', # b/32386191
+    'syscalls.getxattr04', # b/65053723#comment20
+    'syscalls.inotify03',
+    'syscalls.ioctl03',
     'syscalls.ioctl04',
     'syscalls.ioctl06',
     'syscalls.kcmp03',
-    # TODO(b/67981135): Following tests added in LTP20170929 release are
-    # disabled because they currently fail with VTS
-    'mm.max_map_count_64bit',
-    'mm.max_map_count_32bit',
-    # TODO(b/69117476): Following test needs to be checked to see it
-    # it correctly skips running
-    'tracing.ftrace_regression01',
-    # b/71780005: causes /data to get filled repeatedly
-    'fs.fs_racer_32bit',
-    'fs.fs_racer_64bit',
-    # b/71414136: fails in VTS
-    'commands.file01',
-    # b/71415362: fails in VTS
-    'fs.proc01',
-    # b/71416672: fails in VTS
-    'mm.ksm01_1',
-    'mm.ksm01',
-    'mm.ksm03_1',
-    'mm.ksm03',
-    # b/71416706: fails in VTS
-    'syscalls.cve-2017-5669',
-    # b/71416738: fails in VTS
-    'syscalls.fcntl35_64',
-    'syscalls.fcntl35',
-    # b/71416760: fails in VTS
-    'syscalls.fcntl36_64',
-    'syscalls.fcntl36',
-    # b/71416822: fails in VTS
-    'tracing.dynamic_debug01',
-    # (TODO): b/73784987
-    'syscalls.mount03',
+    'syscalls.kill12',
+    'syscalls.lchown03',
+    'syscalls.lchown03_16',
+    'syscalls.lstat03',
+    'syscalls.lstat03_64', # b/30688551
+    'syscalls.mmap16',
+    'syscalls.move_pages01', # move_pages syscalls requires userspace numa.
+    'syscalls.move_pages02',
+    'syscalls.move_pages03',
+    'syscalls.move_pages04',
+    'syscalls.move_pages05',
+    'syscalls.move_pages06',
+    'syscalls.move_pages07',
+    'syscalls.move_pages08',
+    'syscalls.move_pages09',
+    'syscalls.move_pages10',
+    'syscalls.move_pages11',
+    'syscalls.move_pages12',
+    'syscalls.nftw01',
+    'syscalls.nftw6401',
+    'syscalls.nice04',
+    'syscalls.open08',
+    'syscalls.open13', # https://android-review.googlesource.com/#/c/127908/
+    'syscalls.perf_event_open02', # b/30675443
+    'syscalls.prot_hsymlinks',
+    'syscalls.pselect01', # b/65053723#comment19
+    'syscalls.readdir02', # b/112422073
+    'syscalls.rt_sigprocmask01_32bit', # b/31152672
+    'syscalls.setpriority02', # b/73137289
+    'syscalls.setregid02',
+    'syscalls.setregid02_16',
+    'syscalls.sigpending02',
+    'syscalls.sigrelse01',
+    'syscalls.splice02',
+    'syscalls.utimensat01',
+    'syscalls.vfork02',
+    'tracing.dynamic_debug01', # b/71416822
+    'tracing.ftrace_regression01', # b/69117476
 ]
diff --git a/ltp/configs/stable_tests.py b/ltp/configs/stable_tests.py
index 9ed44e1..1f3f963 100644
--- a/ltp/configs/stable_tests.py
+++ b/ltp/configs/stable_tests.py
@@ -1,8 +1,14 @@
 STABLE_TESTS = [
+    'commands.cp01_32bit',
+    'commands.cp01_64bit',
+    'commands.cpio01_32bit',
+    'commands.cpio01_64bit',
     'commands.ldd_32bit',
     'commands.ldd_64bit',
     'commands.ln01_32bit',
     'commands.ln01_64bit',
+    'commands.mkdir01_32bit',
+    'commands.mkdir01_64bit',
     'containers.mountns01_32bit',
     'containers.mountns01_64bit',
     'containers.mountns02_32bit',
@@ -11,6 +17,66 @@
     'containers.mountns03_64bit',
     'containers.mountns04_32bit',
     'containers.mountns04_64bit',
+    'cve.cve-2011-0999_32bit',
+    'cve.cve-2011-0999_64bit',
+    'cve.cve-2011-2496_32bit',
+    'cve.cve-2011-2496_64bit',
+    'cve.cve-2012-0957_32bit',
+    'cve.cve-2012-0957_64bit',
+    'cve.cve-2015-3290_32bit',
+    'cve.cve-2015-3290_64bit',
+    'cve.cve-2015-7550_32bit',
+    'cve.cve-2015-7550_64bit',
+    'cve.cve-2016-10044_32bit',
+    'cve.cve-2016-10044_64bit',
+    'cve.cve-2016-4470_32bit',
+    'cve.cve-2016-4470_64bit',
+    'cve.cve-2016-4997_32bit',
+    'cve.cve-2016-4997_64bit',
+    'cve.cve-2016-5195_32bit',
+    'cve.cve-2016-5195_64bit',
+    'cve.cve-2016-7042_32bit',
+    'cve.cve-2016-7042_64bit',
+    'cve.cve-2016-7117_32bit',
+    'cve.cve-2016-7117_64bit',
+    'cve.cve-2016-9604_32bit',
+    'cve.cve-2016-9604_64bit',
+    'cve.cve-2017-12192_32bit',
+    'cve.cve-2017-12192_64bit',
+    'cve.cve-2017-12193_32bit',
+    'cve.cve-2017-12193_64bit',
+    'cve.cve-2017-15274_32bit',
+    'cve.cve-2017-15274_64bit',
+    'cve.cve-2017-15299_32bit',
+    'cve.cve-2017-15299_64bit',
+    'cve.cve-2017-15537_32bit',
+    'cve.cve-2017-15537_64bit',
+    'cve.cve-2017-15951_32bit',
+    'cve.cve-2017-15951_64bit',
+    'cve.cve-2017-16939_32bit',
+    'cve.cve-2017-16939_64bit',
+    'cve.cve-2017-17052_32bit',
+    'cve.cve-2017-17052_64bit',
+    'cve.cve-2017-17053_32bit',
+    'cve.cve-2017-17053_64bit',
+    'cve.cve-2017-17807_32bit',
+    'cve.cve-2017-17807_64bit',
+    'cve.cve-2017-2618_32bit',
+    'cve.cve-2017-2618_64bit',
+    'cve.cve-2017-2671_32bit',
+    'cve.cve-2017-2671_64bit',
+    'cve.cve-2017-5669_32bit',
+    'cve.cve-2017-5669_64bit',
+    'cve.cve-2017-5754_32bit',
+    'cve.cve-2017-5754_64bit',
+    'cve.cve-2017-6951_32bit',
+    'cve.cve-2017-6951_64bit',
+    'cve.cve-2017-7308_32bit',
+    'cve.cve-2017-7308_64bit',
+    'cve.cve-2017-7472_32bit',
+    'cve.cve-2017-7472_64bit',
+    'cve.cve-2018-5803_32bit',
+    'cve.cve-2018-5803_64bit',
     'dio.dio01_32bit',
     'dio.dio01_64bit',
     'dio.dio02_32bit',
@@ -167,10 +233,16 @@
     'ipc.signal_test_06_64bit',
     'ipc.signal_test_07_32bit',
     'ipc.signal_test_07_64bit',
+    'math.abs01_32bit',
+    'math.abs01_64bit',
+    'math.atof01_32bit',
+    'math.atof01_64bit',
     'math.fptest01_32bit',
     'math.fptest01_64bit',
     'math.fptest02_32bit',
     'math.fptest02_64bit',
+    'math.nextafter01_32bit',
+    'math.nextafter01_64bit',
     'mm.data_space_32bit',
     'mm.data_space_64bit',
     'mm.max_map_count_32bit',
@@ -207,12 +279,12 @@
     'mm.mmapstress09_64bit',
     'mm.mtest05_32bit',
     'mm.mtest05_64bit',
-    'mm.mtest06_32bit',
-    'mm.mtest06_64bit',
     'mm.mtest06_2_32bit',
     'mm.mtest06_2_64bit',
+    'mm.mtest06_32bit',
     'mm.mtest06_3_32bit',
     'mm.mtest06_3_64bit',
+    'mm.mtest06_64bit',
     'mm.page01_32bit',
     'mm.page01_64bit',
     'mm.page02_32bit',
@@ -230,6 +302,8 @@
     'pty.ptem01_64bit',
     'pty.pty01_32bit',
     'pty.pty01_64bit',
+    'pty.pty02_32bit',
+    'pty.pty02_64bit',
     'sched.hackbench01_32bit',
     'sched.hackbench01_64bit',
     'sched.hackbench01_low_mem_32bit',
@@ -264,6 +338,8 @@
     'syscalls.abort01_64bit',
     'syscalls.accept01_32bit',
     'syscalls.accept01_64bit',
+    'syscalls.accept4_01_32bit',
+    'syscalls.accept4_01_64bit',
     'syscalls.access01_32bit',
     'syscalls.access01_64bit',
     'syscalls.access02_32bit',
@@ -276,12 +352,14 @@
     'syscalls.add_key01_64bit',
     'syscalls.add_key02_32bit',
     'syscalls.add_key02_64bit',
+    'syscalls.add_key03_32bit',
+    'syscalls.add_key03_64bit',
+    'syscalls.add_key04_32bit',
+    'syscalls.add_key04_64bit',
     'syscalls.adjtimex01_32bit',
     'syscalls.adjtimex01_64bit',
     'syscalls.adjtimex02_32bit',
     'syscalls.adjtimex02_64bit',
-    'syscalls.alarm01_32bit',
-    'syscalls.alarm01_64bit',
     'syscalls.alarm03_32bit',
     'syscalls.alarm03_64bit',
     'syscalls.alarm05_32bit',
@@ -332,12 +410,16 @@
     'syscalls.chmod05_64bit',
     'syscalls.chmod07_32bit',
     'syscalls.chmod07_64bit',
+    'syscalls.chown01_16_32bit',
     'syscalls.chown01_32bit',
     'syscalls.chown01_64bit',
+    'syscalls.chown02_16_32bit',
     'syscalls.chown02_32bit',
     'syscalls.chown02_64bit',
+    'syscalls.chown03_16_32bit',
     'syscalls.chown03_32bit',
     'syscalls.chown03_64bit',
+    'syscalls.chown05_16_32bit',
     'syscalls.chown05_32bit',
     'syscalls.chown05_64bit',
     'syscalls.chroot01_32bit',
@@ -352,6 +434,8 @@
     'syscalls.clock_getres01_64bit',
     'syscalls.clock_nanosleep01_32bit',
     'syscalls.clock_nanosleep01_64bit',
+    'syscalls.clock_nanosleep02_32bit',
+    'syscalls.clock_nanosleep02_64bit',
     'syscalls.clock_nanosleep2_01_32bit',
     'syscalls.clock_nanosleep2_01_64bit',
     'syscalls.clone01_32bit',
@@ -380,6 +464,8 @@
     'syscalls.close08_64bit',
     'syscalls.connect01_32bit',
     'syscalls.connect01_64bit',
+    'syscalls.copy_file_range01_32bit',
+    'syscalls.copy_file_range01_64bit',
     'syscalls.creat01_32bit',
     'syscalls.creat01_64bit',
     'syscalls.creat03_32bit',
@@ -436,12 +522,15 @@
     'syscalls.epoll_ctl01_64bit',
     'syscalls.epoll_ctl02_32bit',
     'syscalls.epoll_ctl02_64bit',
+    'syscalls.epoll_pwait01_32bit',
+    'syscalls.epoll_pwait01_64bit',
     'syscalls.epoll_wait01_32bit',
     'syscalls.epoll_wait01_64bit',
     'syscalls.epoll_wait02_32bit',
     'syscalls.epoll_wait02_64bit',
     'syscalls.epoll_wait03_32bit',
     'syscalls.epoll_wait03_64bit',
+    'syscalls.eventfd01_32bit',
     'syscalls.eventfd2_01_32bit',
     'syscalls.eventfd2_01_64bit',
     'syscalls.eventfd2_02_32bit',
@@ -508,12 +597,16 @@
     'syscalls.fchmod07_64bit',
     'syscalls.fchmodat01_32bit',
     'syscalls.fchmodat01_64bit',
+    'syscalls.fchown01_16_32bit',
     'syscalls.fchown01_32bit',
     'syscalls.fchown01_64bit',
+    'syscalls.fchown02_16_32bit',
     'syscalls.fchown02_32bit',
     'syscalls.fchown02_64bit',
+    'syscalls.fchown03_16_32bit',
     'syscalls.fchown03_32bit',
     'syscalls.fchown03_64bit',
+    'syscalls.fchown05_16_32bit',
     'syscalls.fchown05_32bit',
     'syscalls.fchown05_64bit',
     'syscalls.fchownat01_32bit',
@@ -641,13 +734,19 @@
     'syscalls.fcntl33_64_64bit',
     'syscalls.fcntl33_64bit',
     'syscalls.fcntl34_32bit',
-    'syscalls.fcntl34_64bit',
     'syscalls.fcntl34_64_32bit',
     'syscalls.fcntl34_64_64bit',
+    'syscalls.fcntl34_64bit',
     'syscalls.fdatasync01_32bit',
     'syscalls.fdatasync01_64bit',
     'syscalls.fdatasync02_32bit',
     'syscalls.fdatasync02_64bit',
+    'syscalls.fgetxattr01_32bit',
+    'syscalls.fgetxattr01_64bit',
+    'syscalls.fgetxattr02_32bit',
+    'syscalls.fgetxattr02_64bit',
+    'syscalls.fgetxattr03_32bit',
+    'syscalls.fgetxattr03_64bit',
     'syscalls.flistxattr01_32bit',
     'syscalls.flistxattr01_64bit',
     'syscalls.flistxattr02_32bit',
@@ -690,6 +789,10 @@
     'syscalls.fork11_64bit',
     'syscalls.fpathconf01_32bit',
     'syscalls.fpathconf01_64bit',
+    'syscalls.fsetxattr01_32bit',
+    'syscalls.fsetxattr01_64bit',
+    'syscalls.fsetxattr02_32bit',
+    'syscalls.fsetxattr02_64bit',
     'syscalls.fstat01_32bit',
     'syscalls.fstat01_64_32bit',
     'syscalls.fstat01_64_64bit',
@@ -735,9 +838,9 @@
     'syscalls.ftruncate03_64_64bit',
     'syscalls.ftruncate03_64bit',
     'syscalls.ftruncate04_32bit',
-    'syscalls.ftruncate04_64bit',
     'syscalls.ftruncate04_64_32bit',
     'syscalls.ftruncate04_64_64bit',
+    'syscalls.ftruncate04_64bit',
     'syscalls.futex_wait01_32bit',
     'syscalls.futex_wait01_64bit',
     'syscalls.futex_wait03_32bit',
@@ -778,20 +881,30 @@
     'syscalls.getdomainname01_64bit',
     'syscalls.getdtablesize01_32bit',
     'syscalls.getdtablesize01_64bit',
+    'syscalls.getegid01_16_32bit',
     'syscalls.getegid01_32bit',
     'syscalls.getegid01_64bit',
+    'syscalls.getegid02_16_32bit',
     'syscalls.getegid02_32bit',
     'syscalls.getegid02_64bit',
+    'syscalls.geteuid01_16_32bit',
     'syscalls.geteuid01_32bit',
     'syscalls.geteuid01_64bit',
+    'syscalls.geteuid02_16_32bit',
     'syscalls.geteuid02_32bit',
     'syscalls.geteuid02_64bit',
+    'syscalls.getgid01_16_32bit',
     'syscalls.getgid01_32bit',
     'syscalls.getgid01_64bit',
+    'syscalls.getgid03_16_32bit',
     'syscalls.getgid03_32bit',
     'syscalls.getgid03_64bit',
+    'syscalls.getgroups01_16_32bit',
     'syscalls.getgroups01_32bit',
     'syscalls.getgroups01_64bit',
+    'syscalls.getgroups03_16_32bit',
+    'syscalls.getgroups03_32bit',
+    'syscalls.getgroups03_64bit',
     'syscalls.gethostname01_32bit',
     'syscalls.gethostname01_64bit',
     'syscalls.getitimer01_32bit',
@@ -866,8 +979,10 @@
     'syscalls.gettimeofday01_64bit',
     'syscalls.gettimeofday02_32bit',
     'syscalls.gettimeofday02_64bit',
+    'syscalls.getuid01_16_32bit',
     'syscalls.getuid01_32bit',
     'syscalls.getuid01_64bit',
+    'syscalls.getuid03_16_32bit',
     'syscalls.getuid03_32bit',
     'syscalls.getuid03_64bit',
     'syscalls.getxattr01_32bit',
@@ -914,6 +1029,22 @@
     'syscalls.iopl01_64bit',
     'syscalls.iopl02_32bit',
     'syscalls.iopl02_64bit',
+    'syscalls.keyctl01_32bit',
+    'syscalls.keyctl01_64bit',
+    'syscalls.keyctl02_32bit',
+    'syscalls.keyctl02_64bit',
+    'syscalls.keyctl03_32bit',
+    'syscalls.keyctl03_64bit',
+    'syscalls.keyctl04_32bit',
+    'syscalls.keyctl04_64bit',
+    'syscalls.keyctl05_32bit',
+    'syscalls.keyctl05_64bit',
+    'syscalls.keyctl06_32bit',
+    'syscalls.keyctl06_64bit',
+    'syscalls.keyctl07_32bit',
+    'syscalls.keyctl07_64bit',
+    'syscalls.keyctl08_32bit',
+    'syscalls.keyctl08_64bit',
     'syscalls.kill01_32bit',
     'syscalls.kill01_64bit',
     'syscalls.kill02_32bit',
@@ -932,8 +1063,10 @@
     'syscalls.kill10_64bit',
     'syscalls.kill11_32bit',
     'syscalls.kill11_64bit',
+    'syscalls.lchown01_16_32bit',
     'syscalls.lchown01_32bit',
     'syscalls.lchown01_64bit',
+    'syscalls.lchown02_16_32bit',
     'syscalls.lchown02_32bit',
     'syscalls.lchown02_64bit',
     'syscalls.lgetxattr01_32bit',
@@ -968,6 +1101,12 @@
     'syscalls.listxattr02_64bit',
     'syscalls.listxattr03_32bit',
     'syscalls.listxattr03_64bit',
+    'syscalls.llistxattr01_32bit',
+    'syscalls.llistxattr01_64bit',
+    'syscalls.llistxattr02_32bit',
+    'syscalls.llistxattr02_64bit',
+    'syscalls.llistxattr03_32bit',
+    'syscalls.llistxattr03_64bit',
     'syscalls.llseek01_32bit',
     'syscalls.llseek01_64bit',
     'syscalls.llseek02_32bit',
@@ -1002,6 +1141,8 @@
     'syscalls.madvise05_64bit',
     'syscalls.madvise08_32bit',
     'syscalls.madvise08_64bit',
+    'syscalls.madvise10_32bit',
+    'syscalls.madvise10_64bit',
     'syscalls.memcmp01_32bit',
     'syscalls.memcmp01_64bit',
     'syscalls.memcpy01_32bit',
@@ -1016,8 +1157,6 @@
     'syscalls.mincore01_64bit',
     'syscalls.mincore02_32bit',
     'syscalls.mincore02_64bit',
-    'syscalls.mkdir01_32bit',
-    'syscalls.mkdir01_64bit',
     'syscalls.mkdir02_32bit',
     'syscalls.mkdir02_64bit',
     'syscalls.mkdir03_32bit',
@@ -1028,8 +1167,6 @@
     'syscalls.mkdir05A_64bit',
     'syscalls.mkdir05_32bit',
     'syscalls.mkdir05_64bit',
-    'syscalls.mkdir08_32bit',
-    'syscalls.mkdir08_64bit',
     'syscalls.mkdir09_32bit',
     'syscalls.mkdir09_64bit',
     'syscalls.mkdirat01_32bit',
@@ -1112,6 +1249,8 @@
     'syscalls.mount05_64bit',
     'syscalls.mount06_32bit',
     'syscalls.mount06_64bit',
+    'syscalls.mprotect01_32bit',
+    'syscalls.mprotect01_64bit',
     'syscalls.mprotect02_32bit',
     'syscalls.mprotect02_64bit',
     'syscalls.mprotect03_32bit',
@@ -1164,10 +1303,10 @@
     'syscalls.nice03_64bit',
     'syscalls.nice05_32bit',
     'syscalls.nice05_64bit',
-    'syscalls.open01_32bit',
-    'syscalls.open01_64bit',
     'syscalls.open01A_32bit',
     'syscalls.open01A_64bit',
+    'syscalls.open01_32bit',
+    'syscalls.open01_64bit',
     'syscalls.open02_32bit',
     'syscalls.open02_64bit',
     'syscalls.open03_32bit',
@@ -1190,6 +1329,8 @@
     'syscalls.openat01_64bit',
     'syscalls.openat03_32bit',
     'syscalls.openat03_64bit',
+    'syscalls.pathconf01_32bit',
+    'syscalls.pathconf01_64bit',
     'syscalls.pause01_32bit',
     'syscalls.pause01_64bit',
     'syscalls.pause02_32bit',
@@ -1254,6 +1395,8 @@
     'syscalls.prctl01_64bit',
     'syscalls.prctl02_32bit',
     'syscalls.prctl02_64bit',
+    'syscalls.prctl03_32bit',
+    'syscalls.prctl03_64bit',
     'syscalls.pread01_32bit',
     'syscalls.pread01_64_32bit',
     'syscalls.pread01_64_64bit',
@@ -1271,9 +1414,9 @@
     'syscalls.preadv01_64_64bit',
     'syscalls.preadv01_64bit',
     'syscalls.preadv02_32bit',
-    'syscalls.preadv02_64bit',
     'syscalls.preadv02_64_32bit',
     'syscalls.preadv02_64_64bit',
+    'syscalls.preadv02_64bit',
     'syscalls.process_vm_readv01_32bit',
     'syscalls.process_vm_readv01_64bit',
     'syscalls.process_vm_readv02_32bit',
@@ -1284,6 +1427,8 @@
     'syscalls.process_vm_writev01_64bit',
     'syscalls.process_vm_writev02_32bit',
     'syscalls.process_vm_writev02_64bit',
+    'syscalls.pselect01_64_32bit',
+    'syscalls.pselect01_64_64bit',
     'syscalls.pselect02_32bit',
     'syscalls.pselect02_64_32bit',
     'syscalls.pselect02_64_64bit',
@@ -1317,9 +1462,9 @@
     'syscalls.pwritev01_64_64bit',
     'syscalls.pwritev01_64bit',
     'syscalls.pwritev02_32bit',
-    'syscalls.pwritev02_64bit',
     'syscalls.pwritev02_64_32bit',
     'syscalls.pwritev02_64_64bit',
+    'syscalls.pwritev02_64bit',
     'syscalls.qmm01_32bit',
     'syscalls.qmm01_64bit',
     'syscalls.read01_32bit',
@@ -1340,12 +1485,8 @@
     'syscalls.readlink01A_64bit',
     'syscalls.readlink01_32bit',
     'syscalls.readlink01_64bit',
-    'syscalls.readlink02_32bit',
-    'syscalls.readlink02_64bit',
     'syscalls.readlink03_32bit',
     'syscalls.readlink03_64bit',
-    'syscalls.readlink04_32bit',
-    'syscalls.readlink04_64bit',
     'syscalls.readlinkat01_32bit',
     'syscalls.readlinkat01_64bit',
     'syscalls.readlinkat02_32bit',
@@ -1406,6 +1547,10 @@
     'syscalls.renameat202_64bit',
     'syscalls.request_key01_32bit',
     'syscalls.request_key01_64bit',
+    'syscalls.request_key02_32bit',
+    'syscalls.request_key02_64bit',
+    'syscalls.request_key03_32bit',
+    'syscalls.request_key03_64bit',
     'syscalls.rmdir01_32bit',
     'syscalls.rmdir01_64bit',
     'syscalls.rmdir02_32bit',
@@ -1414,10 +1559,6 @@
     'syscalls.rmdir03A_64bit',
     'syscalls.rmdir03_32bit',
     'syscalls.rmdir03_64bit',
-    'syscalls.rmdir04_32bit',
-    'syscalls.rmdir04_64bit',
-    'syscalls.rmdir05_32bit',
-    'syscalls.rmdir05_64bit',
     'syscalls.rt_sigaction01_32bit',
     'syscalls.rt_sigaction01_64bit',
     'syscalls.rt_sigaction02_32bit',
@@ -1428,6 +1569,8 @@
     'syscalls.rt_sigprocmask02_64bit',
     'syscalls.rt_sigqueueinfo01_32bit',
     'syscalls.rt_sigqueueinfo01_64bit',
+    'syscalls.rt_sigsuspend01_32bit',
+    'syscalls.rt_sigsuspend01_64bit',
     'syscalls.sbrk01_32bit',
     'syscalls.sbrk01_64bit',
     'syscalls.sbrk02_32bit',
@@ -1540,32 +1683,46 @@
     'syscalls.setegid01_64bit',
     'syscalls.setegid02_32bit',
     'syscalls.setegid02_64bit',
+    'syscalls.setfsgid01_16_32bit',
     'syscalls.setfsgid01_32bit',
     'syscalls.setfsgid01_64bit',
+    'syscalls.setfsgid02_16_32bit',
     'syscalls.setfsgid02_32bit',
     'syscalls.setfsgid02_64bit',
+    'syscalls.setfsgid03_16_32bit',
     'syscalls.setfsgid03_32bit',
     'syscalls.setfsgid03_64bit',
+    'syscalls.setfsuid01_16_32bit',
     'syscalls.setfsuid01_32bit',
     'syscalls.setfsuid01_64bit',
+    'syscalls.setfsuid02_16_32bit',
     'syscalls.setfsuid02_32bit',
     'syscalls.setfsuid02_64bit',
+    'syscalls.setfsuid03_16_32bit',
     'syscalls.setfsuid03_32bit',
     'syscalls.setfsuid03_64bit',
+    'syscalls.setfsuid04_16_32bit',
     'syscalls.setfsuid04_32bit',
     'syscalls.setfsuid04_64bit',
+    'syscalls.setgid01_16_32bit',
     'syscalls.setgid01_32bit',
     'syscalls.setgid01_64bit',
+    'syscalls.setgid02_16_32bit',
     'syscalls.setgid02_32bit',
     'syscalls.setgid02_64bit',
+    'syscalls.setgid03_16_32bit',
     'syscalls.setgid03_32bit',
     'syscalls.setgid03_64bit',
+    'syscalls.setgroups01_16_32bit',
     'syscalls.setgroups01_32bit',
     'syscalls.setgroups01_64bit',
+    'syscalls.setgroups02_16_32bit',
     'syscalls.setgroups02_32bit',
     'syscalls.setgroups02_64bit',
+    'syscalls.setgroups03_16_32bit',
     'syscalls.setgroups03_32bit',
     'syscalls.setgroups03_64bit',
+    'syscalls.setgroups04_16_32bit',
     'syscalls.setgroups04_32bit',
     'syscalls.setgroups04_64bit',
     'syscalls.sethostname01_32bit',
@@ -1600,38 +1757,61 @@
     'syscalls.setpriority04_64bit',
     'syscalls.setpriority05_32bit',
     'syscalls.setpriority05_64bit',
+    'syscalls.setregid01_16_32bit',
     'syscalls.setregid01_32bit',
     'syscalls.setregid01_64bit',
+    'syscalls.setregid03_16_32bit',
+    'syscalls.setregid03_32bit',
+    'syscalls.setregid03_64bit',
+    'syscalls.setregid04_16_32bit',
+    'syscalls.setregid04_32bit',
+    'syscalls.setregid04_64bit',
+    'syscalls.setresgid01_16_32bit',
     'syscalls.setresgid01_32bit',
     'syscalls.setresgid01_64bit',
+    'syscalls.setresgid02_16_32bit',
     'syscalls.setresgid02_32bit',
     'syscalls.setresgid02_64bit',
+    'syscalls.setresgid03_16_32bit',
     'syscalls.setresgid03_32bit',
     'syscalls.setresgid03_64bit',
+    'syscalls.setresgid04_16_32bit',
     'syscalls.setresgid04_32bit',
     'syscalls.setresgid04_64bit',
+    'syscalls.setresuid01_16_32bit',
     'syscalls.setresuid01_32bit',
     'syscalls.setresuid01_64bit',
+    'syscalls.setresuid02_16_32bit',
     'syscalls.setresuid02_32bit',
     'syscalls.setresuid02_64bit',
+    'syscalls.setresuid03_16_32bit',
     'syscalls.setresuid03_32bit',
     'syscalls.setresuid03_64bit',
+    'syscalls.setresuid04_16_32bit',
     'syscalls.setresuid04_32bit',
     'syscalls.setresuid04_64bit',
+    'syscalls.setresuid05_16_32bit',
     'syscalls.setresuid05_32bit',
     'syscalls.setresuid05_64bit',
+    'syscalls.setreuid01_16_32bit',
     'syscalls.setreuid01_32bit',
     'syscalls.setreuid01_64bit',
+    'syscalls.setreuid02_16_32bit',
     'syscalls.setreuid02_32bit',
     'syscalls.setreuid02_64bit',
+    'syscalls.setreuid03_16_32bit',
     'syscalls.setreuid03_32bit',
     'syscalls.setreuid03_64bit',
+    'syscalls.setreuid04_16_32bit',
     'syscalls.setreuid04_32bit',
     'syscalls.setreuid04_64bit',
+    'syscalls.setreuid05_16_32bit',
     'syscalls.setreuid05_32bit',
     'syscalls.setreuid05_64bit',
+    'syscalls.setreuid06_16_32bit',
     'syscalls.setreuid06_32bit',
     'syscalls.setreuid06_64bit',
+    'syscalls.setreuid07_16_32bit',
     'syscalls.setreuid07_32bit',
     'syscalls.setreuid07_64bit',
     'syscalls.setrlimit01_32bit',
@@ -1654,12 +1834,13 @@
     'syscalls.settimeofday01_64bit',
     'syscalls.settimeofday02_32bit',
     'syscalls.settimeofday02_64bit',
+    'syscalls.setuid01_16_32bit',
     'syscalls.setuid01_32bit',
     'syscalls.setuid01_64bit',
-    'syscalls.setuid02_32bit',
-    'syscalls.setuid02_64bit',
+    'syscalls.setuid03_16_32bit',
     'syscalls.setuid03_32bit',
     'syscalls.setuid03_64bit',
+    'syscalls.setuid04_16_32bit',
     'syscalls.setuid04_32bit',
     'syscalls.setuid04_64bit',
     'syscalls.setxattr01_32bit',
@@ -1696,6 +1877,8 @@
     'syscalls.signalfd4_02_64bit',
     'syscalls.sigprocmask01_32bit',
     'syscalls.sigprocmask01_64bit',
+    'syscalls.sigsuspend01_32bit',
+    'syscalls.sigsuspend01_64bit',
     'syscalls.sigwaitinfo01_32bit',
     'syscalls.sigwaitinfo01_64bit',
     'syscalls.socket01_32bit',
@@ -1870,8 +2053,6 @@
     'syscalls.unlink01_64bit',
     'syscalls.unlink05_32bit',
     'syscalls.unlink05_64bit',
-    'syscalls.unlink06_32bit',
-    'syscalls.unlink06_64bit',
     'syscalls.unlink07_32bit',
     'syscalls.unlink07_64bit',
     'syscalls.unlink08_32bit',
diff --git a/ltp/ltp_configs.py b/ltp/ltp_configs.py
index f44d5b8..1fcf211 100644
--- a/ltp/ltp_configs.py
+++ b/ltp/ltp_configs.py
@@ -119,8 +119,8 @@
     'commands',
     'connectors',
     'containers',
-#     'controllers',
     'cpuhotplug',
+    'cve',
     'dio',
     'fcntl-locktests_android',
     'filecaps',
@@ -139,15 +139,13 @@
     'mm',
     'modules',
     'nptl',
-    'numa',
     'pipes',
     'power_management_tests',
     'pty',
     'sched',
+    'securebits',
     'syscalls',
     'timers',
-    # The following are not included in default LTP scenario group
-    'securebits',
     'tracing',
 ]
 
@@ -159,8 +157,8 @@
     'commands',
     'connectors',
     'containers',
-#     'controllers',
     'cpuhotplug',
+    'cve',
     'dio',
     'fcntl-locktests_android',
     'filecaps',
@@ -179,15 +177,13 @@
     'mm',
     'modules',
     'nptl',
-    'numa',
     'pipes',
     'power_management_tests',
     'pty',
     'sched_low_mem',
+    'securebits',
     'syscalls',
     'timers',
-    # The following are not included in default LTP scenario group
-    'securebits',
     'tracing',
 ]
 
diff --git a/ltp/stable/Android.mk b/ltp/stable/Android.mk
index 1807499..816e0fc 100644
--- a/ltp/stable/Android.mk
+++ b/ltp/stable/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelLtp
-VTS_CONFIG_SRC_DIR := testcases/kernel/ltp/stable
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/ltp/stable/AndroidTest.xml b/ltp/stable/AndroidTest.xml
index e5e3ac5..7afa51b 100644
--- a/ltp/stable/AndroidTest.xml
+++ b/ltp/stable/AndroidTest.xml
@@ -22,6 +22,7 @@
         <option name="test-module-name" value="VtsKernelLtp" />
         <option name="test-timeout" value="3h" />
         <option name="runtime-hint" value="30m" />
+        <option name="disable-framework" value="true" />
         <option name="test-case-path" value="vts/testcases/kernel/ltp/KernelLtpTest" />
     </test>
 </configuration>
diff --git a/ltp/staging/Android.mk b/ltp/staging/Android.mk
index 5161053..37e8d49 100644
--- a/ltp/staging/Android.mk
+++ b/ltp/staging/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelLtpStaging
-VTS_CONFIG_SRC_DIR := testcases/kernel/ltp/staging
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/ltp/staging/AndroidTest.xml b/ltp/staging/AndroidTest.xml
index 7e1685f..71b888d 100644
--- a/ltp/staging/AndroidTest.xml
+++ b/ltp/staging/AndroidTest.xml
@@ -22,6 +22,7 @@
         <option name="test-module-name" value="VtsKernelLtpStaging" />
         <option name="test-timeout" value="3h30m" />
         <option name="runtime-hint" value="1h30m" />
+        <option name="disable-framework" value="true" />
         <option name="test-case-path" value="vts/testcases/kernel/ltp/KernelLtpTest" />
         <option name="test-config-path" value="vts/testcases/kernel/ltp/staging/KernelLtpStagingTest.runner_conf" />
     </test>
diff --git a/memory/Android.mk b/memory/Android.mk
index 0fa172a..e6e04db 100644
--- a/memory/Android.mk
+++ b/memory/Android.mk
@@ -19,5 +19,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := MemorySystemStressTest
-VTS_CONFIG_SRC_DIR := testcases/kernel/memory
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/syscall/Android.mk b/syscall/Android.mk
index 48f8106..6ec8d44 100644
--- a/syscall/Android.mk
+++ b/syscall/Android.mk
@@ -40,6 +40,4 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := VtsKernelSyscallExistence
-
-VTS_CONFIG_SRC_DIR := testcases/kernel/syscall
 -include test/vts/tools/build/Android.host_config.mk
diff --git a/version/AndroidTest.xml b/version/AndroidTest.xml
deleted file mode 100644
index 3a61516..0000000
--- a/version/AndroidTest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<configuration description="Config for VTS KernelVersionTest">
-    <option name="config-descriptor:metadata" key="plan" value="vts-kernel" />
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HostDrivenTest.push" />
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VtsKernelVersion" />
-        <option name="test-case-path" value="vts/testcases/kernel/version/VtsKernelVersionTest" />
-    </test>
-</configuration>
diff --git a/version/VtsKernelVersionTest.py b/version/VtsKernelVersionTest.py
deleted file mode 100644
index b2edeb5..0000000
--- a/version/VtsKernelVersionTest.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import logging
-import re
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test
-from vts.runners.host import const
-from vts.runners.host import keys
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.file import target_file_utils
-
-from vts.testcases.kernel.lib import version
-
-
-class VtsKernelVersionTest(base_test.BaseTestClass):
-    """Test case which verifies the version of the kernel on the DUT is
-    supported.
-    """
-
-    def setUpClass(self):
-        required_params = [keys.ConfigKeys.IKEY_DATA_FILE_PATH]
-        self.getUserParams(required_params)
-        self.dut = self.android_devices[0]
-        self.shell = self.dut.shell
-        self.supported_kernel_versions = version.getSupportedKernels(self.dut)
-
-    def testKernelVersion(self):
-        """Validate the kernel version of DUT is a valid kernel version.
-
-        Returns:
-            string, kernel version of device
-        """
-        cmd = "uname -a"
-        results = self.shell.Execute(cmd)
-        logging.info("Shell command '%s' results: %s", cmd, results)
-
-        match = re.search(r"(\d+)\.(\d+)\.(\d+)", results[const.STDOUT][0])
-        if match is None:
-            asserts.fail("Failed to detect kernel version of device.")
-        else:
-            kernel_version = int(match.group(1))
-            kernel_patchlevel = int(match.group(2))
-            kernel_sublevel = int(match.group(3))
-        logging.info("Detected kernel version: %s.%s.%s" % (kernel_version,
-            kernel_patchlevel, kernel_sublevel))
-
-        for v in self.supported_kernel_versions:
-            if (kernel_version == v[0] and kernel_patchlevel == v[1] and
-                kernel_sublevel >= v[2]):
-                logging.info("Compliant kernel version %s.%s.%s found." %
-                        (kernel_version, kernel_patchlevel, kernel_sublevel))
-                return
-
-        asserts.fail("Device is running an unsupported kernel version (%s.%s.%s)" %
-                (kernel_version, kernel_patchlevel, kernel_sublevel))
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/version/__init__.py b/version/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/version/__init__.py
+++ /dev/null