From: Kameron Carr <kameroncarr@linux.microsoft.com>
To: Michael Kelley <mhklinux@outlook.com>,
"decui@microsoft.com" <decui@microsoft.com>,
"haiyangz@microsoft.com" <haiyangz@microsoft.com>,
"wei.liu@kernel.org" <wei.liu@kernel.org>
Cc: "arnd@arndb.de" <arnd@arndb.de>,
"catalin.marinas@arm.com" <catalin.marinas@arm.com>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"lpieralisi@kernel.org" <lpieralisi@kernel.org>,
"mark.rutland@arm.com" <mark.rutland@arm.com>,
"sudeep.holla@kernel.org" <sudeep.holla@kernel.org>,
"thuth@redhat.com" <thuth@redhat.com>,
"will@kernel.org" <will@kernel.org>
Subject: Re: [PATCH v6 3/6] arm64: hyperv: Add per-CPU RSI host call infrastructure for CCA Realms
Date: Wed, 11 Nov 2026 11:40:47 -0800 [thread overview]
Message-ID: <fe67b6bd-c2e9-47f7-8a11-f99c010dc479@linux.microsoft.com> (raw)
In-Reply-To: <MN2PR02MB686375CB482F6EEA9D00F806D4712@MN2PR02MB6863.namprd02.prod.outlook.com>
On 11/11/2026 10:00 AM, Michael Kelley wrote:
> From: Kameron Carr <kameroncarr@linux.microsoft.com> Sent: Friday, October 30, 2026 5:14 PM
>>
>> Arm CCA Realms cannot issue Hyper-V hypercalls via HVC; the guest must
>> route them through the RSI_HOST_CALL interface, which takes the IPA of a
>> per-CPU rsi_host_call structure as its argument.
>>
>> Add hv_hostcall_array as a per-CPU struct array and allocate it during
>> hyperv_init().
>
> A quibble: This statement is a bit misleading. I think you mean it is a
> global array with an entry for each CPU. The term "per-CPU" typically
> means something allocated out of the per-CPU area.
I agree. Earlier versions of the patch did use a per-CPU struct but it
was changed to a global array because the structure was small enough.
This series has already been applied to hyperv-next, but I can reach out
to Wei about editing the commit messages.
--
Regards,
Kameron
> Michael
>
>> The allocation is gated on is_realm_world() so non-Realm
>> arm64 Hyper-V guests pay no memory cost.
>>
>> Reviewed-by: Michael Kelley <mhklinux@outlook.com>
>> Signed-off-by: Kameron Carr <kameroncarr@linux.microsoft.com>
>> ---
>> arch/arm64/hyperv/mshyperv.c | 27 +++++++++++++++++++++++++--
>> arch/arm64/include/asm/mshyperv.h | 4 ++++
>> 2 files changed, 29 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c
>> index 82572c5..46ab2da 100644
>> --- a/arch/arm64/hyperv/mshyperv.c
>> +++ b/arch/arm64/hyperv/mshyperv.c
>> @@ -14,12 +14,16 @@
>> #include <linux/arm-rsi-cmds.h>
>> #include <linux/export.h>
>> #include <linux/errno.h>
>> +#include <linux/slab.h>
>> #include <linux/version.h>
>> #include <linux/cpuhotplug.h>
>> #include <asm/mshyperv.h>
>>
>> static bool hyperv_initialized;
>>
>> +struct rsi_host_call *hv_hostcall_array;
>> +EXPORT_SYMBOL_GPL(hv_hostcall_array);
>> +
>> int hv_get_hypervisor_version(union hv_hypervisor_version_info *info)
>> {
>> hv_get_vpreg_128(HV_REGISTER_HYPERVISOR_VERSION,
>> @@ -110,6 +114,20 @@ static int __init hyperv_init(void)
>> if (!hyperv_detect_via_acpi() && !hyperv_detect_via_smccc())
>> return 0;
>>
>> + /*
>> + * The RSI host-call buffers are only ever used when
>> + * is_realm_world() is true. Skip the allocation on non-Realm
>> + * guests. A single contiguous array of nr_cpu_ids entries is
>> + * allocated; each CPU indexes into it by its processor ID.
>> + */
>> + if (is_realm_world()) {
>> + hv_hostcall_array = kcalloc(nr_cpu_ids,
>> + sizeof(struct rsi_host_call),
>> + GFP_KERNEL);
>> + if (!hv_hostcall_array)
>> + return -ENOMEM;
>> + }
>> +
>> /* Setup the guest ID */
>> guest_id = hv_generate_guest_id(LINUX_VERSION_CODE);
>> hv_set_vpreg(HV_REGISTER_GUEST_OS_ID, guest_id);
>> @@ -131,13 +149,13 @@ static int __init hyperv_init(void)
>>
>> ret = hv_common_init();
>> if (ret)
>> - return ret;
>> + goto free_hostcall_mem;
>>
>> ret = cpuhp_setup_state(CPUHP_AP_HYPERV_ONLINE,
>> "arm64/hyperv_init:online",
>> hv_common_cpu_init, hv_common_cpu_die);
>> if (ret < 0) {
>> hv_common_free();
>> - return ret;
>> + goto free_hostcall_mem;
>> }
>>
>> if (ms_hyperv.priv_high & HV_ACCESS_PARTITION_ID)
>> @@ -150,6 +168,11 @@ static int __init hyperv_init(void)
>>
>> hyperv_initialized = true;
>> return 0;
>> +
>> +free_hostcall_mem:
>> + kfree(hv_hostcall_array);
>> + hv_hostcall_array = NULL;
>> + return ret;
>> }
>>
>> early_initcall(hyperv_init);
>> diff --git a/arch/arm64/include/asm/mshyperv.h
>> b/arch/arm64/include/asm/mshyperv.h
>> index b721d31..aed0aa5 100644
>> --- a/arch/arm64/include/asm/mshyperv.h
>> +++ b/arch/arm64/include/asm/mshyperv.h
>> @@ -61,6 +61,10 @@ static inline u64 hv_get_non_nested_msr(unsigned int reg)
>> ARM_SMCCC_OWNER_VENDOR_HYP, \
>> HV_SMCCC_FUNC_NUMBER)
>>
>> +/* Per-CPU-indexed RSI host call structures for CCA Realms */
>> +struct rsi_host_call;
>> +extern struct rsi_host_call *hv_hostcall_array;
>> +
>> #include <asm-generic/mshyperv.h>
>>
>> #endif
>> --
>> 2.45.4
>>
next prev parent reply other threads:[~2026-11-11 19:41 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-31 0:14 [PATCH v6 0/6] arm64: hyperv: Add Realm support for Hyper-V Kameron Carr
2026-10-31 0:14 ` [PATCH v6 1/6] arm64: rsi: Add RSI host call structure and helper function Kameron Carr
2026-10-31 4:51 ` Dexuan Cui
2026-11-02 12:10 ` Catalin Marinas
2026-10-31 0:14 ` [PATCH v6 2/6] arm64: hyperv: Detect Hyper-V via RSI host call in CCA Realms Kameron Carr
2026-11-02 12:12 ` Catalin Marinas
2026-11-02 19:27 ` Kameron Carr
2026-11-03 14:01 ` Catalin Marinas
2026-10-31 0:14 ` [PATCH v6 3/6] arm64: hyperv: Add per-CPU RSI host call infrastructure for " Kameron Carr
2026-11-11 18:00 ` Michael Kelley
2026-11-11 19:40 ` Kameron Carr [this message]
2026-10-31 0:14 ` [PATCH v6 4/6] Drivers: hv: Mark shared memory as decrypted " Kameron Carr
2026-10-31 0:27 ` sashiko-bot
2026-11-11 18:01 ` Michael Kelley
2026-11-11 22:36 ` Kameron Carr
2026-11-12 2:39 ` Michael Kelley
2026-11-12 2:43 ` Mukesh R
2026-11-12 17:49 ` Kameron Carr
2026-11-13 0:46 ` Mukesh R
2026-10-31 0:14 ` [PATCH v6 5/6] arm64: hyperv: Route hypercalls through RSI host call in " Kameron Carr
2026-10-31 0:14 ` [PATCH v6 6/6] arm64: hyperv: Implement hv_is_isolation_supported() for " Kameron Carr
2026-11-11 18:01 ` Michael Kelley
2026-11-11 19:33 ` Kameron Carr
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fe67b6bd-c2e9-47f7-8a11-f99c010dc479@linux.microsoft.com \
--to=kameroncarr@linux.microsoft.com \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mark.rutland@arm.com \
--cc=mhklinux@outlook.com \
--cc=sudeep.holla@kernel.org \
--cc=thuth@redhat.com \
--cc=wei.liu@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.