Re: [PATCH 5/6] x86/hyperv: Support hypercalls for TDX guests
From: Dave Hansen
Date: Mon Nov 28 2022 - 16:15:31 EST
On 11/28/22 12:36, Dexuan Cui wrote:
>> From: Dave Hansen <dave.hansen@xxxxxxxxx>
>> Sent: Monday, November 28, 2022 11:48 AM
>>
>> On 11/28/22 11:37, Dexuan Cui wrote:
>>>> From: Dave Hansen <dave.hansen@xxxxxxxxx>
>> ...
>>>> How do we know, for instance, that no hypercall using this interface
>>>> will *ever* take the 0x0 physical address as an argument?
>>>
>>> A 0x0 physical address as an argument still works: the 0 is passed
>>> to the hypervisor using GHCI. I believe Hyper-V interprets the 0 as
>>> an error (if the param is needed), and returns an "invalid parameter"
>>> error code to the guest.
>>
>> I don't see any data in the public documentation to support the claim
>> that 0x0 is a special argument for either the input or output GPA
>> parameters.
>
> Sorry, I didn't make it clear. I meant: for some hypercalls, Hyper-V
> doesn't really need an "input" param or an "output" param, so Linux
> passes 0 for such a "not needed" param. Maybe Linux can pass any
> value for such a "not needed" param, if Hyper-V just ignores the
> "not needed" param. Some examples:
>
> arch/x86/hyperv/hv_init.c: hv_get_partition_id():
> status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page);
>
> drivers/pci/controller/pci-hyperv.c:
> res = hv_do_hypercall(HVCALL_RETARGET_INTERRUPT | (var_size << 17),
> params, NULL);
>
>
> If a param is needed and is supposed to be a non-zero memory address,
> Linux running as a TDX guest must pass "cc_mkdec(address)" rather than
> "address", otherwise I suspect the result is undefined, e.g. Hyper-V might
> return an error to the guest, or Hyper-V might just terminate the guest,
> especially if Linux passes 0 or cc_mkdec(0).
This is the point where the maintainer gets a wee bit grumpy. The page
I just pointed you to (twice) has this nice quote:
If the hypercall involves no input or output parameters, the
hypervisor ignores the corresponding GPA pointer.
So, bravo to your colleagues who nicely documented this. But,
unfortunately, you didn't take advantage of their great documentation.
Instead, you made me search for it to provide actual facts to combat the
weak conjecture you offered above.
>> This is despite some actual discussion on things like their alignment
>> requirements[1] and interactions with overlay pages.
>>
>> So, either you are mistaken about that behavior, or it looks like the
>> documentation needs updating.
>
> The above is just my conjecture. I don't know how exactly Hyper-V works.
I do! I literally Googled "HV HYPERCALL FAST BIT" and the first page
that came up told me all I needed to know.
I could be merrily merging your patches. But, instead, I'm reading
documentation that can be trivially found and repeatedly regurgitating it.
Please, slow down. Take some time to answer emails and do it more
deliberately. This isn't a race.