diff mbox series

[2/2] x86/svmdebug: Print sev and sev_es vmcb bits

Message ID 9cc6b407ec3b45f034b7deb6f5f44a561eecca47.1709846387.git.vaishali.thakkar@vates.tech (mailing list archive)
State Superseded
Headers show
Series x86/svm : Misc changes for few vmcb bits | expand

Commit Message

Vaishali Thakkar March 7, 2024, 9:40 p.m. UTC
While sev and sev_es bits are not yet enabled in xen,
including their status in the VMCB dump could be
informational.Therefore, print it via svmdebug.

Signed-off-by: Vaishali Thakkar <vaishali.thakkar@vates.tech>
---
JFYI, we'll send the follow-up patches with the enablement
of sev and ASP driver.
---
 xen/arch/x86/hvm/svm/svmdebug.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Andrew Cooper March 7, 2024, 11:34 p.m. UTC | #1
On 07/03/2024 9:40 pm, Vaishali Thakkar wrote:
> diff --git a/xen/arch/x86/hvm/svm/svmdebug.c b/xen/arch/x86/hvm/svm/svmdebug.c
> index 24358c6eea..f54b426fb3 100644
> --- a/xen/arch/x86/hvm/svm/svmdebug.c
> +++ b/xen/arch/x86/hvm/svm/svmdebug.c
> @@ -53,6 +53,8 @@ void svm_vmcb_dump(const char *from, const struct vmcb_struct *vmcb)
>             vmcb->exitinfo1, vmcb->exitinfo2);
>      printk("np_ctrl = %#"PRIx64" guest_asid = %#x\n",
>             vmcb_get_np_ctrl(vmcb), vmcb_get_guest_asid(vmcb));
> +    printk("sev = %d sev_es = %d\n",
> +           vmcb_get_sev(vmcb), vmcb_get_sev_es(vmcb));

Hmm.  These are covered by the previous line printing all of np_ctrl. 
What about rearranging the previous line to be something like:

printk("asid: %#x, np_ctrl: %#"PRIx64" -%s%s%s\n",
    vmcb->_asid, vmcb->_np_ctrl,
    vmcb->_np ? " NP" : "",
    vmcb->_sev ? " SEV" : "",
    ...);

This is more compact (things like "guest" in "guest asid" is entirely
redundant), and provides both the raw _np_ctrl field and a bit-by-bit
decode on the same line, rather than having different parts of the info
on different lines and bools written out in longhand?

See xen/arch/x86/spec_ctrl.c: print_details() for a rather more complete
example of this style of printk() rendering for bits, including how to
tabulate it for better readability.

~Andrew
Vaishali Thakkar March 8, 2024, 6:02 a.m. UTC | #2
On 3/8/24 00:34, Andrew Cooper wrote:
> On 07/03/2024 9:40 pm, Vaishali Thakkar wrote:
>> diff --git a/xen/arch/x86/hvm/svm/svmdebug.c b/xen/arch/x86/hvm/svm/svmdebug.c
>> index 24358c6eea..f54b426fb3 100644
>> --- a/xen/arch/x86/hvm/svm/svmdebug.c
>> +++ b/xen/arch/x86/hvm/svm/svmdebug.c
>> @@ -53,6 +53,8 @@ void svm_vmcb_dump(const char *from, const struct vmcb_struct *vmcb)
>>              vmcb->exitinfo1, vmcb->exitinfo2);
>>       printk("np_ctrl = %#"PRIx64" guest_asid = %#x\n",
>>              vmcb_get_np_ctrl(vmcb), vmcb_get_guest_asid(vmcb));
>> +    printk("sev = %d sev_es = %d\n",
>> +           vmcb_get_sev(vmcb), vmcb_get_sev_es(vmcb));
> 
> Hmm.  These are covered by the previous line printing all of np_ctrl.
> What about rearranging the previous line to be something like:
> 
> printk("asid: %#x, np_ctrl: %#"PRIx64" -%s%s%s\n",
>      vmcb->_asid, vmcb->_np_ctrl,
>      vmcb->_np ? " NP" : "",
>      vmcb->_sev ? " SEV" : "",
>      ...);
> 
> This is more compact (things like "guest" in "guest asid" is entirely
> redundant), and provides both the raw _np_ctrl field and a bit-by-bit
> decode on the same line, rather than having different parts of the info
> on different lines and bools written out in longhand?

Good point. Will change it in the revised v2.

> See xen/arch/x86/spec_ctrl.c: print_details() for a rather more complete
> example of this style of printk() rendering for bits, including how to
> tabulate it for better readability.

Thanks for pointing to the reference.

> ~Andrew
diff mbox series

Patch

diff --git a/xen/arch/x86/hvm/svm/svmdebug.c b/xen/arch/x86/hvm/svm/svmdebug.c
index 24358c6eea..f54b426fb3 100644
--- a/xen/arch/x86/hvm/svm/svmdebug.c
+++ b/xen/arch/x86/hvm/svm/svmdebug.c
@@ -53,6 +53,8 @@  void svm_vmcb_dump(const char *from, const struct vmcb_struct *vmcb)
            vmcb->exitinfo1, vmcb->exitinfo2);
     printk("np_ctrl = %#"PRIx64" guest_asid = %#x\n",
            vmcb_get_np_ctrl(vmcb), vmcb_get_guest_asid(vmcb));
+    printk("sev = %d sev_es = %d\n",
+           vmcb_get_sev(vmcb), vmcb_get_sev_es(vmcb));
     printk("virtual vmload/vmsave = %d, virt_ext = %#"PRIx64"\n",
            vmcb->virt_ext.fields.vloadsave_enable, vmcb->virt_ext.bytes);
     printk("cpl = %d efer = %#"PRIx64" star = %#"PRIx64" lstar = %#"PRIx64"\n",