forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kvm: selftests: move ucall declarations into ucall_common.h
Now that core kvm_util declarations have special home in kvm_util_base.h, move ucall-related declarations out into a separate header. Signed-off-by: Michael Roth <michael.roth@amd.com> Message-Id: <20211210164620.11636-3-michael.roth@amd.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
- Loading branch information
Showing
3 changed files
with
60 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,5 +8,6 @@ | |
#define SELFTEST_KVM_UTIL_H | ||
|
||
#include "kvm_util_base.h" | ||
#include "ucall_common.h" | ||
|
||
#endif /* SELFTEST_KVM_UTIL_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* tools/testing/selftests/kvm/include/kvm_util.h | ||
* | ||
* Copyright (C) 2018, Google LLC. | ||
*/ | ||
#ifndef SELFTEST_KVM_UCALL_COMMON_H | ||
#define SELFTEST_KVM_UCALL_COMMON_H | ||
|
||
/* Common ucalls */ | ||
enum { | ||
UCALL_NONE, | ||
UCALL_SYNC, | ||
UCALL_ABORT, | ||
UCALL_DONE, | ||
UCALL_UNHANDLED, | ||
}; | ||
|
||
#define UCALL_MAX_ARGS 6 | ||
|
||
struct ucall { | ||
uint64_t cmd; | ||
uint64_t args[UCALL_MAX_ARGS]; | ||
}; | ||
|
||
void ucall_init(struct kvm_vm *vm, void *arg); | ||
void ucall_uninit(struct kvm_vm *vm); | ||
void ucall(uint64_t cmd, int nargs, ...); | ||
uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc); | ||
|
||
#define GUEST_SYNC_ARGS(stage, arg1, arg2, arg3, arg4) \ | ||
ucall(UCALL_SYNC, 6, "hello", stage, arg1, arg2, arg3, arg4) | ||
#define GUEST_SYNC(stage) ucall(UCALL_SYNC, 2, "hello", stage) | ||
#define GUEST_DONE() ucall(UCALL_DONE, 0) | ||
#define __GUEST_ASSERT(_condition, _condstr, _nargs, _args...) do { \ | ||
if (!(_condition)) \ | ||
ucall(UCALL_ABORT, 2 + _nargs, \ | ||
"Failed guest assert: " \ | ||
_condstr, __LINE__, _args); \ | ||
} while (0) | ||
|
||
#define GUEST_ASSERT(_condition) \ | ||
__GUEST_ASSERT(_condition, #_condition, 0, 0) | ||
|
||
#define GUEST_ASSERT_1(_condition, arg1) \ | ||
__GUEST_ASSERT(_condition, #_condition, 1, (arg1)) | ||
|
||
#define GUEST_ASSERT_2(_condition, arg1, arg2) \ | ||
__GUEST_ASSERT(_condition, #_condition, 2, (arg1), (arg2)) | ||
|
||
#define GUEST_ASSERT_3(_condition, arg1, arg2, arg3) \ | ||
__GUEST_ASSERT(_condition, #_condition, 3, (arg1), (arg2), (arg3)) | ||
|
||
#define GUEST_ASSERT_4(_condition, arg1, arg2, arg3, arg4) \ | ||
__GUEST_ASSERT(_condition, #_condition, 4, (arg1), (arg2), (arg3), (arg4)) | ||
|
||
#define GUEST_ASSERT_EQ(a, b) __GUEST_ASSERT((a) == (b), #a " == " #b, 2, a, b) | ||
|
||
#endif /* SELFTEST_KVM_UCALL_COMMON_H */ |