Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/checkpoint-restore/criu.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2018-06-14 20:27:27 +0300
committerAndrei Vagin <avagin@virtuozzo.com>2018-06-18 21:08:15 +0300
commitf3f4dda5f3457ef583098f4dfcd9f7c3578115e7 (patch)
treeac58552b614f41ffc3d44bb85937fe00a278ee8e
parentd9aadabc36587008a470349fce40b13a888c0db4 (diff)
compel: cpu -- Add ability to clear features
Will need them to mask some of the features from command line options. Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
-rw-r--r--compel/arch/aarch64/src/lib/cpu.c18
-rw-r--r--compel/arch/arm/src/lib/cpu.c18
-rw-r--r--compel/arch/ppc64/src/lib/cpu.c18
-rw-r--r--compel/arch/s390/src/lib/cpu.c18
-rw-r--r--compel/arch/x86/src/lib/cpu.c18
-rw-r--r--compel/include/uapi/cpu.h2
6 files changed, 92 insertions, 0 deletions
diff --git a/compel/arch/aarch64/src/lib/cpu.c b/compel/arch/aarch64/src/lib/cpu.c
index 30263b377..fca699403 100644
--- a/compel/arch/aarch64/src/lib/cpu.c
+++ b/compel/arch/aarch64/src/lib/cpu.c
@@ -26,3 +26,21 @@ bool compel_cpu_has_feature(unsigned int feature)
}
return compel_test_cpu_cap(&rt_info, feature);
}
+
+void compel_cpu_clear_feature(unsigned int feature)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ return compel_clear_cpu_cap(&rt_info, feature);
+}
+
+void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ memcpy(c, &rt_info, sizeof(rt_info));
+}
diff --git a/compel/arch/arm/src/lib/cpu.c b/compel/arch/arm/src/lib/cpu.c
index 30263b377..fca699403 100644
--- a/compel/arch/arm/src/lib/cpu.c
+++ b/compel/arch/arm/src/lib/cpu.c
@@ -26,3 +26,21 @@ bool compel_cpu_has_feature(unsigned int feature)
}
return compel_test_cpu_cap(&rt_info, feature);
}
+
+void compel_cpu_clear_feature(unsigned int feature)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ return compel_clear_cpu_cap(&rt_info, feature);
+}
+
+void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ memcpy(c, &rt_info, sizeof(rt_info));
+}
diff --git a/compel/arch/ppc64/src/lib/cpu.c b/compel/arch/ppc64/src/lib/cpu.c
index 24c3c0cc6..0a7adcb0b 100644
--- a/compel/arch/ppc64/src/lib/cpu.c
+++ b/compel/arch/ppc64/src/lib/cpu.c
@@ -40,3 +40,21 @@ bool compel_cpu_has_feature(unsigned int feature)
}
return compel_test_cpu_cap(&rt_info, feature);
}
+
+void compel_cpu_clear_feature(unsigned int feature)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ return compel_clear_cpu_cap(&rt_info, feature);
+}
+
+void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ memcpy(c, &rt_info, sizeof(rt_info));
+}
diff --git a/compel/arch/s390/src/lib/cpu.c b/compel/arch/s390/src/lib/cpu.c
index b5c066c90..3f38f118d 100644
--- a/compel/arch/s390/src/lib/cpu.c
+++ b/compel/arch/s390/src/lib/cpu.c
@@ -40,3 +40,21 @@ bool cpu_has_feature(unsigned int feature)
}
return compel_test_cpu_cap(&rt_info, feature);
}
+
+void compel_cpu_clear_feature(unsigned int feature)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ return compel_clear_cpu_cap(&rt_info, feature);
+}
+
+void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ memcpy(c, &rt_info, sizeof(rt_info));
+}
diff --git a/compel/arch/x86/src/lib/cpu.c b/compel/arch/x86/src/lib/cpu.c
index f8d5e1ba3..93e430fac 100644
--- a/compel/arch/x86/src/lib/cpu.c
+++ b/compel/arch/x86/src/lib/cpu.c
@@ -233,3 +233,21 @@ bool compel_cpu_has_feature(unsigned int feature)
}
return compel_test_cpu_cap(&rt_info, feature);
}
+
+void compel_cpu_clear_feature(unsigned int feature)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ return compel_clear_cpu_cap(&rt_info, feature);
+}
+
+void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c)
+{
+ if (!rt_info_done) {
+ compel_cpuid(&rt_info);
+ rt_info_done = true;
+ }
+ memcpy(c, &rt_info, sizeof(rt_info));
+}
diff --git a/compel/include/uapi/cpu.h b/compel/include/uapi/cpu.h
index 4268b6c4f..379959585 100644
--- a/compel/include/uapi/cpu.h
+++ b/compel/include/uapi/cpu.h
@@ -7,5 +7,7 @@
extern int compel_cpuid(compel_cpuinfo_t *info);
extern bool compel_cpu_has_feature(unsigned int feature);
+extern void compel_cpu_clear_feature(unsigned int feature);
+extern void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c);
#endif /* UAPI_COMPEL_CPU_H__ */