1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2018 Intel Corporation
13 #ifndef RTE_LIBRTE_POWER
16 test_power_kvm_vm(void)
18 printf("Power management library not supported, skipping test\n");
23 #include <rte_power.h>
25 #define TEST_POWER_VM_LCORE_ID 0U
26 #define TEST_POWER_VM_LCORE_OUT_OF_BOUNDS (RTE_MAX_LCORE+1)
27 #define TEST_POWER_VM_LCORE_INVALID 1U
30 test_power_kvm_vm(void)
33 enum power_management_env env
;
35 ret
= rte_power_set_env(PM_ENV_KVM_VM
);
37 printf("Failed on setting environment to PM_ENV_KVM_VM\n");
41 /* Test environment configuration */
42 env
= rte_power_get_env();
43 if (env
!= PM_ENV_KVM_VM
) {
44 printf("Unexpectedly got a Power Management environment other than "
46 rte_power_unset_env();
50 /* verify that function pointers are not NULL */
51 if (rte_power_freqs
== NULL
) {
52 printf("rte_power_freqs should not be NULL, environment has not been "
56 if (rte_power_get_freq
== NULL
) {
57 printf("rte_power_get_freq should not be NULL, environment has not "
58 "been initialised\n");
61 if (rte_power_set_freq
== NULL
) {
62 printf("rte_power_set_freq should not be NULL, environment has not "
63 "been initialised\n");
66 if (rte_power_freq_up
== NULL
) {
67 printf("rte_power_freq_up should not be NULL, environment has not "
68 "been initialised\n");
71 if (rte_power_freq_down
== NULL
) {
72 printf("rte_power_freq_down should not be NULL, environment has not "
73 "been initialised\n");
76 if (rte_power_freq_max
== NULL
) {
77 printf("rte_power_freq_max should not be NULL, environment has not "
78 "been initialised\n");
81 if (rte_power_freq_min
== NULL
) {
82 printf("rte_power_freq_min should not be NULL, environment has not "
83 "been initialised\n");
86 /* Test initialisation of an out of bounds lcore */
87 ret
= rte_power_init(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
89 printf("rte_power_init unexpectedly succeeded on an invalid lcore %u\n",
90 TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
91 rte_power_unset_env();
95 /* Test initialisation of a valid lcore */
96 ret
= rte_power_init(TEST_POWER_VM_LCORE_ID
);
98 printf("Cannot initialise power management for lcore %u, this "
99 "may occur if environment is not configured "
100 "correctly(KVM VM) or operating in another valid "
101 "Power management environment\n",
102 TEST_POWER_VM_LCORE_ID
);
103 rte_power_unset_env();
107 /* Test initialisation of previously initialised lcore */
108 ret
= rte_power_init(TEST_POWER_VM_LCORE_ID
);
110 printf("rte_power_init unexpectedly succeeded on calling init twice on"
111 " lcore %u\n", TEST_POWER_VM_LCORE_ID
);
115 /* Test frequency up of invalid lcore */
116 ret
= rte_power_freq_up(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
118 printf("rte_power_freq_up unexpectedly succeeded on invalid lcore %u\n",
119 TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
123 /* Test frequency down of invalid lcore */
124 ret
= rte_power_freq_down(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
126 printf("rte_power_freq_down unexpectedly succeeded on invalid lcore "
127 "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
131 /* Test frequency min of invalid lcore */
132 ret
= rte_power_freq_min(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
134 printf("rte_power_freq_min unexpectedly succeeded on invalid lcore "
135 "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
139 /* Test frequency max of invalid lcore */
140 ret
= rte_power_freq_max(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
142 printf("rte_power_freq_max unexpectedly succeeded on invalid lcore "
143 "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS
);
147 /* Test frequency up of valid but uninitialised lcore */
148 ret
= rte_power_freq_up(TEST_POWER_VM_LCORE_INVALID
);
150 printf("rte_power_freq_up unexpectedly succeeded on invalid lcore %u\n",
151 TEST_POWER_VM_LCORE_INVALID
);
155 /* Test frequency down of valid but uninitialised lcore */
156 ret
= rte_power_freq_down(TEST_POWER_VM_LCORE_INVALID
);
158 printf("rte_power_freq_down unexpectedly succeeded on invalid lcore "
159 "%u\n", TEST_POWER_VM_LCORE_INVALID
);
163 /* Test frequency min of valid but uninitialised lcore */
164 ret
= rte_power_freq_min(TEST_POWER_VM_LCORE_INVALID
);
166 printf("rte_power_freq_min unexpectedly succeeded on invalid lcore "
167 "%u\n", TEST_POWER_VM_LCORE_INVALID
);
171 /* Test frequency max of valid but uninitialised lcore */
172 ret
= rte_power_freq_max(TEST_POWER_VM_LCORE_INVALID
);
174 printf("rte_power_freq_max unexpectedly succeeded on invalid lcore "
175 "%u\n", TEST_POWER_VM_LCORE_INVALID
);
179 /* Test KVM_VM Enable Turbo of valid core */
180 ret
= rte_power_freq_enable_turbo(TEST_POWER_VM_LCORE_ID
);
182 printf("rte_power_freq_enable_turbo failed on valid lcore"
183 "%u\n", TEST_POWER_VM_LCORE_ID
);
187 /* Test KVM_VM Disable Turbo of valid core */
188 ret
= rte_power_freq_disable_turbo(TEST_POWER_VM_LCORE_ID
);
190 printf("rte_power_freq_disable_turbo failed on valid lcore"
191 "%u\n", TEST_POWER_VM_LCORE_ID
);
195 /* Test frequency up of valid lcore */
196 ret
= rte_power_freq_up(TEST_POWER_VM_LCORE_ID
);
198 printf("rte_power_freq_up unexpectedly failed on valid lcore %u\n",
199 TEST_POWER_VM_LCORE_ID
);
203 /* Test frequency down of valid lcore */
204 ret
= rte_power_freq_down(TEST_POWER_VM_LCORE_ID
);
206 printf("rte_power_freq_down unexpectedly failed on valid lcore "
207 "%u\n", TEST_POWER_VM_LCORE_ID
);
211 /* Test frequency min of valid lcore */
212 ret
= rte_power_freq_min(TEST_POWER_VM_LCORE_ID
);
214 printf("rte_power_freq_min unexpectedly failed on valid lcore "
215 "%u\n", TEST_POWER_VM_LCORE_ID
);
219 /* Test frequency max of valid lcore */
220 ret
= rte_power_freq_max(TEST_POWER_VM_LCORE_ID
);
222 printf("rte_power_freq_max unexpectedly failed on valid lcore "
223 "%u\n", TEST_POWER_VM_LCORE_ID
);
227 /* Test unsupported rte_power_freqs */
228 ret
= rte_power_freqs(TEST_POWER_VM_LCORE_ID
, NULL
, 0);
229 if (ret
!= -ENOTSUP
) {
230 printf("rte_power_freqs did not return the expected -ENOTSUP(%d) but "
231 "returned %d\n", -ENOTSUP
, ret
);
235 /* Test unsupported rte_power_get_freq */
236 ret
= rte_power_get_freq(TEST_POWER_VM_LCORE_ID
);
237 if (ret
!= -ENOTSUP
) {
238 printf("rte_power_get_freq did not return the expected -ENOTSUP(%d) but"
239 " returned %d for lcore %u\n",
240 -ENOTSUP
, ret
, TEST_POWER_VM_LCORE_ID
);
244 /* Test unsupported rte_power_set_freq */
245 ret
= rte_power_set_freq(TEST_POWER_VM_LCORE_ID
, 0);
246 if (ret
!= -ENOTSUP
) {
247 printf("rte_power_set_freq did not return the expected -ENOTSUP(%d) but"
248 " returned %d for lcore %u\n",
249 -ENOTSUP
, ret
, TEST_POWER_VM_LCORE_ID
);
253 /* Test removing of an lcore */
254 ret
= rte_power_exit(TEST_POWER_VM_LCORE_ID
);
256 printf("rte_power_exit unexpectedly failed on valid lcore %u,"
257 "please ensure that the environment has been configured "
258 "correctly\n", TEST_POWER_VM_LCORE_ID
);
262 /* Test frequency up of previously removed lcore */
263 ret
= rte_power_freq_up(TEST_POWER_VM_LCORE_ID
);
265 printf("rte_power_freq_up unexpectedly succeeded on a removed "
266 "lcore %u\n", TEST_POWER_VM_LCORE_ID
);
270 /* Test frequency down of previously removed lcore */
271 ret
= rte_power_freq_down(TEST_POWER_VM_LCORE_ID
);
273 printf("rte_power_freq_down unexpectedly succeeded on a removed "
274 "lcore %u\n", TEST_POWER_VM_LCORE_ID
);
278 /* Test frequency min of previously removed lcore */
279 ret
= rte_power_freq_min(TEST_POWER_VM_LCORE_ID
);
281 printf("rte_power_freq_min unexpectedly succeeded on a removed "
282 "lcore %u\n", TEST_POWER_VM_LCORE_ID
);
286 /* Test frequency max of previously removed lcore */
287 ret
= rte_power_freq_max(TEST_POWER_VM_LCORE_ID
);
289 printf("rte_power_freq_max unexpectedly succeeded on a removed "
290 "lcore %u\n", TEST_POWER_VM_LCORE_ID
);
293 rte_power_unset_env();
296 rte_power_exit(TEST_POWER_VM_LCORE_ID
);
297 rte_power_unset_env();
302 REGISTER_TEST_COMMAND(power_kvm_vm_autotest
, test_power_kvm_vm
);