mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00

Add an architecture specific ucall.h and inline the simple arch hooks, e.g. the init hook for everything except ARM, and the actual "do ucall" hook for everything except x86 (which should be simple, but temporarily isn't due to carrying a workaround). Having a per-arch ucall header will allow adding a #define for the expected KVM exit reason for a ucall that is colocated (for everything except x86) with the ucall itself. Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Link: https://lore.kernel.org/r/20230731203026.1192091-2-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
23 lines
551 B
C
23 lines
551 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* ucall support. A ucall is a "hypercall to userspace".
|
|
*
|
|
* Copyright (C) 2019 Red Hat, Inc.
|
|
*/
|
|
#include "kvm_util.h"
|
|
|
|
void *ucall_arch_get_ucall(struct kvm_vcpu *vcpu)
|
|
{
|
|
struct kvm_run *run = vcpu->run;
|
|
|
|
if (run->exit_reason == KVM_EXIT_S390_SIEIC &&
|
|
run->s390_sieic.icptcode == 4 &&
|
|
(run->s390_sieic.ipa >> 8) == 0x83 && /* 0x83 means DIAGNOSE */
|
|
(run->s390_sieic.ipb >> 16) == 0x501) {
|
|
int reg = run->s390_sieic.ipa & 0xf;
|
|
|
|
return (void *)run->s.regs.gprs[reg];
|
|
}
|
|
return NULL;
|
|
}
|