[CRIU] [PATCH 09/18] compel: fpu -- Add compel_fpu_feature_offset helper

Cyrill Gorcunov gorcunov at gmail.com
Thu Jul 19 15:47:37 MSK 2018


Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
 compel/arch/aarch64/src/lib/cpu.c |  9 +++++++++
 compel/arch/arm/src/lib/cpu.c     |  9 +++++++++
 compel/arch/ppc64/src/lib/cpu.c   |  9 +++++++++
 compel/arch/s390/src/lib/cpu.c    |  9 +++++++++
 compel/arch/x86/src/lib/cpu.c     | 12 ++++++++++++
 compel/include/uapi/cpu.h         |  1 +
 6 files changed, 49 insertions(+)

diff --git a/compel/arch/aarch64/src/lib/cpu.c b/compel/arch/aarch64/src/lib/cpu.c
index e82988879382..15a49c420299 100644
--- a/compel/arch/aarch64/src/lib/cpu.c
+++ b/compel/arch/aarch64/src/lib/cpu.c
@@ -46,6 +46,15 @@ uint32_t compel_fpu_feature_size(unsigned int feature)
 	return 0;
 }
 
+uint32_t compel_fpu_feature_offset(unsigned int feature)
+{
+	if (!rt_info_done) {
+		compel_cpuid(&rt_info);
+		rt_info_done = true;
+	}
+	return 0;
+}
+
 void compel_cpu_clear_feature(unsigned int feature)
 {
 	if (!rt_info_done) {
diff --git a/compel/arch/arm/src/lib/cpu.c b/compel/arch/arm/src/lib/cpu.c
index e82988879382..15a49c420299 100644
--- a/compel/arch/arm/src/lib/cpu.c
+++ b/compel/arch/arm/src/lib/cpu.c
@@ -46,6 +46,15 @@ uint32_t compel_fpu_feature_size(unsigned int feature)
 	return 0;
 }
 
+uint32_t compel_fpu_feature_offset(unsigned int feature)
+{
+	if (!rt_info_done) {
+		compel_cpuid(&rt_info);
+		rt_info_done = true;
+	}
+	return 0;
+}
+
 void compel_cpu_clear_feature(unsigned int feature)
 {
 	if (!rt_info_done) {
diff --git a/compel/arch/ppc64/src/lib/cpu.c b/compel/arch/ppc64/src/lib/cpu.c
index a9be1fd6b258..d0e366e710a8 100644
--- a/compel/arch/ppc64/src/lib/cpu.c
+++ b/compel/arch/ppc64/src/lib/cpu.c
@@ -60,6 +60,15 @@ uint32_t compel_fpu_feature_size(unsigned int feature)
 	return 0;
 }
 
+uint32_t compel_fpu_feature_offset(unsigned int feature)
+{
+	if (!rt_info_done) {
+		compel_cpuid(&rt_info);
+		rt_info_done = true;
+	}
+	return 0;
+}
+
 void compel_cpu_clear_feature(unsigned int feature)
 {
 	if (!rt_info_done) {
diff --git a/compel/arch/s390/src/lib/cpu.c b/compel/arch/s390/src/lib/cpu.c
index bb32affe8d57..98503b191729 100644
--- a/compel/arch/s390/src/lib/cpu.c
+++ b/compel/arch/s390/src/lib/cpu.c
@@ -51,6 +51,15 @@ bool compel_fpu_has_feature(unsigned int feature)
 	return compel_test_fpu_cap(&rt_info, feature);
 }
 
+uint32_t compel_fpu_feature_offset(unsigned int feature)
+{
+	if (!rt_info_done) {
+		compel_cpuid(&rt_info);
+		rt_info_done = true;
+	}
+	return 0;
+}
+
 uint32_t compel_fpu_feature_size(unsigned int feature)
 {
 	if (!rt_info_done) {
diff --git a/compel/arch/x86/src/lib/cpu.c b/compel/arch/x86/src/lib/cpu.c
index dd5524d810ad..d422f91fd41a 100644
--- a/compel/arch/x86/src/lib/cpu.c
+++ b/compel/arch/x86/src/lib/cpu.c
@@ -466,6 +466,18 @@ uint32_t compel_fpu_feature_size(unsigned int feature)
 	return 0;
 }
 
+uint32_t compel_fpu_feature_offset(unsigned int feature)
+{
+	if (!rt_info_done) {
+		compel_cpuid(&rt_info);
+		rt_info_done = true;
+	}
+	if (feature >= FIRST_EXTENDED_XFEATURE &&
+	    feature < XFEATURE_MAX)
+		return rt_info.xstate_offsets[feature];
+	return 0;
+}
+
 void compel_cpu_clear_feature(unsigned int feature)
 {
 	if (!rt_info_done) {
diff --git a/compel/include/uapi/cpu.h b/compel/include/uapi/cpu.h
index c82f8abb6d23..6f827d44721f 100644
--- a/compel/include/uapi/cpu.h
+++ b/compel/include/uapi/cpu.h
@@ -10,6 +10,7 @@ extern int compel_cpuid(compel_cpuinfo_t *info);
 extern bool compel_cpu_has_feature(unsigned int feature);
 extern bool compel_fpu_has_feature(unsigned int feature);
 extern uint32_t compel_fpu_feature_size(unsigned int feature);
+extern uint32_t compel_fpu_feature_offset(unsigned int feature);
 extern void compel_cpu_clear_feature(unsigned int feature);
 extern void compel_cpu_copy_cpuinfo(compel_cpuinfo_t *c);
 
-- 
2.14.4



More information about the CRIU mailing list