[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c79ee00f-253d-40d5-9ed6-0f156dc4ebb1@linux.microsoft.com>
Date: Wed, 4 Oct 2023 11:27:56 -0700
From: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
To: Alex Ionescu <aionescu@...il.com>,
Dexuan Cui <decui@...rosoft.com>, longli@...rosoft.com,
"Michael Kelley (LINUX)" <mikelley@...rosoft.com>
Cc: linux-hyperv@...r.kernel.org, linux-kernel@...r.kernel.org,
x86@...nel.org, linux-arm-kernel@...ts.infradead.org,
linux-arch@...r.kernel.org, patches@...ts.linux.dev,
mikelley@...rosoft.com, kys@...rosoft.com, wei.liu@...nel.org,
gregkh@...uxfoundation.org, haiyangz@...rosoft.com,
decui@...rosoft.com, apais@...ux.microsoft.com,
Tianyu.Lan@...rosoft.com, ssengar@...ux.microsoft.com,
mukeshrathor@...rosoft.com, stanislav.kinsburskiy@...il.com,
jinankjain@...ux.microsoft.com, vkuznets@...hat.com,
tglx@...utronix.de, mingo@...hat.com, bp@...en8.de,
dave.hansen@...ux.intel.com, hpa@...or.com, will@...nel.org,
catalin.marinas@....com
Subject: Re: [PATCH v4 09/15] Drivers: hv: Introduce hv_output_arg_exists in
hv_common.c
On 10/2/2023 12:29 PM, Alex Ionescu wrote:
> Hi Nuno,
>
> Is it possible to simply change to always allocating the output page?
> For example, the output page could be needed in scenarios where Linux
> is not running as the root partition, since certain hypercalls that a
> guest can make will still require one (I realize that's not the case
> _today_, but I don't believe this optimization buys much).
I agree - it would indeed simplify the code, and guests will probably
make use of it sooner or later.
Happy to make that change if Hyper-V guest maintainers agree.
Long, Dexuan, Michael, what do you think?
Thanks,
Nuno
> Best regards,
> Alex Ionescu
>
>
> On Fri, Sep 29, 2023 at 2:02 PM Nuno Das Neves
> <nunodasneves@...ux.microsoft.com> wrote:
>>
>> This is a more flexible approach for determining whether to allocate the
>> output page.
>>
>> Signed-off-by: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
>> Acked-by: Wei Liu <wei.liu@...nel.org>
>> ---
>> drivers/hv/hv_common.c | 21 +++++++++++++++++----
>> 1 file changed, 17 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
>> index 39077841d518..3f6f23e4c579 100644
>> --- a/drivers/hv/hv_common.c
>> +++ b/drivers/hv/hv_common.c
>> @@ -58,6 +58,14 @@ EXPORT_SYMBOL_GPL(hyperv_pcpu_input_arg);
>> void * __percpu *hyperv_pcpu_output_arg;
>> EXPORT_SYMBOL_GPL(hyperv_pcpu_output_arg);
>>
>> +/*
>> + * Determine whether output arg is needed
>> + */
>> +static inline bool hv_output_arg_exists(void)
>> +{
>> + return hv_root_partition ? true : false;
>> +}
>> +
>> static void hv_kmsg_dump_unregister(void);
>>
>> static struct ctl_table_header *hv_ctl_table_hdr;
>> @@ -342,10 +350,12 @@ int __init hv_common_init(void)
>> hyperv_pcpu_input_arg = alloc_percpu(void *);
>> BUG_ON(!hyperv_pcpu_input_arg);
>>
>> - /* Allocate the per-CPU state for output arg for root */
>> - if (hv_root_partition) {
>> + if (hv_output_arg_exists()) {
>> hyperv_pcpu_output_arg = alloc_percpu(void *);
>> BUG_ON(!hyperv_pcpu_output_arg);
>> + }
>> +
>> + if (hv_root_partition) {
>> hv_synic_eventring_tail = alloc_percpu(u8 *);
>> BUG_ON(hv_synic_eventring_tail == NULL);
>> }
>> @@ -375,7 +385,7 @@ int hv_common_cpu_init(unsigned int cpu)
>> u8 **synic_eventring_tail;
>> u64 msr_vp_index;
>> gfp_t flags;
>> - int pgcount = hv_root_partition ? 2 : 1;
>> + int pgcount = hv_output_arg_exists() ? 2 : 1;
>> void *mem;
>> int ret;
>>
>> @@ -393,9 +403,12 @@ int hv_common_cpu_init(unsigned int cpu)
>> if (!mem)
>> return -ENOMEM;
>>
>> - if (hv_root_partition) {
>> + if (hv_output_arg_exists()) {
>> outputarg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg);
>> *outputarg = (char *)mem + HV_HYP_PAGE_SIZE;
>> + }
>> +
>> + if (hv_root_partition) {
>> synic_eventring_tail = (u8 **)this_cpu_ptr(hv_synic_eventring_tail);
>> *synic_eventring_tail = kcalloc(HV_SYNIC_SINT_COUNT, sizeof(u8),
>> flags);
>> --
>> 2.25.1
>>
>>
Powered by blists - more mailing lists