Re: [PATCH v2 3/4] hyperv: Add new Hyper-V headers in include/hyperv

Nuno Das Neves
2024-11-11T17:56:10Z

On 11/7/2024 9:59 PM, Naman Jain wrote:
>
>
> On 11/8/2024 4:02 AM, Nuno Das Neves wrote:
>> These headers contain definitions for regular Hyper-V guests (as in
>> hyperv-tlfs.h), as well as interfaces for more privileged guests like
>> Dom0.
>>
>> These files are derived from headers exported from Hyper-V, rather than
>> being derived from the TLFS document. (Although, to preserve
>> compatibility with existing Linux code, some definitions are copied
>> directly from hyperv-tlfs.h too).
>>
>> The new files follow a naming convention according to their original
>> use:
>> - hdk "host development kit"
>> - gdk "guest development kit"
>> With postfix "_mini" implying userspace-only headers, and "_ext" for
>> extended hypercalls.
>
> Naming convention for mini (which may have come from HyperV code) is a bit odd TBH. May be it has more to it than what is mentioned here or what I know. If more information helps, or this can be changed, please see.
>

The naming is originally from the Hyper-V code. See below: "The original
names are kept intact primarily to keep the provenance of exactly where
they came from in Hyper-V code, which is helpful for manual maintenance
and extension of these definitions."

>>
>> These names should be considered a rough guide only - since there are
>> many places already where both host and guest code are in the same
>> place, hvhdk.h (which includes everything) can be used most of the time.
>>
>> The original names are kept intact primarily to keep the provenance of
>> exactly where they came from in Hyper-V code, which is helpful for
>> manual maintenance and extension of these definitions. Microsoft
>> maintainers importing new definitions should take care to put them in
>> the right file.
>>
>> Note also that the files contain both arm64 and x86_64 code guarded by
>> \#ifdefs, which is how the definitions originally appear in Hyper-V.
>> Keeping this convention from Hyper-V code is another tactic for
>> simplying the process of importing new definitions.
>>
>> These headers are a step toward importing headers directly from Hyper-V
>> in the future, similar to Xen public files in include/xen/interface/.
>>
>> Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
>
> While I understand the motivation behind this series that this is going to ease out the process of updating the header files with respect to HyperV, I think, we will need to pay attention to what we are bringing in with these headers, whether there are any users of it or not, and make sure that TLFS document is updated regularly, to avoid having bunch of code with no information of it.
> The code comments in these files are one step forward towards that.
> And from your cover letter it seems that some changes which actually make use of these additional interfaces are underway, so things will make more sense later. For now, this looks good to me.
>

Yes, we do need to be careful about what interfaces we add here. Not just
anything can be copied from Hyper-V code into these files. The exact
process is a matter we can discuss internally. But, as you say, there are
upcoming patches (previous versions can be found in the mailing list) which
use the new root partition interfaces.

Updating the TLFS and documenting the interfaces is a different matter.
I can't speak to the best way forward for documenting these, but in many
cases the use of the new interfaces will be self-evident from the code
that uses them, and/or comments as you mentioned.

Over the years many Hyper-V definitions have already been added and used
in Linux which have not been documented in the TLFS or elsewhere. This
patch series makes that fact more obvious and sets us on a path towards a
more maintainable method (i.e., publishing headers directly from the Hyper-V
code, hopefully).

Thanks
Nuno

> > Regards,
> Naman
>
> <snip>