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
