* [PATCH 0/2] x86/svm : Misc changes for few vmcb bits
@ 2024-03-07 21:39 Vaishali Thakkar
2024-03-07 21:40 ` [PATCH 1/2] x86/svm: Drop the _enabled suffix from " Vaishali Thakkar
2024-03-07 21:40 ` [PATCH 2/2] x86/svmdebug: Print sev and sev_es " Vaishali Thakkar
0 siblings, 2 replies; 8+ messages in thread
From: Vaishali Thakkar @ 2024-03-07 21:39 UTC (permalink / raw)
To: xen-devel; +Cc: jbeulich, andrew.cooper3, roger.pau, wl, Vaishali Thakkar
Hi,
In this patchset, first patch removes the unnecessary suffix
from a bunch of vmcb bits and the second patch is about
printing the status of sev and sev-es bits while dumping VMCB.
Vaishali Thakkar (2):
x86/svm: Drop the _enabled suffix from vmcb bits
x86/svmdebug: Print sev and sev_es vmcb bits
xen/arch/x86/hvm/svm/nestedsvm.c | 14 +++++++-------
xen/arch/x86/hvm/svm/svm.c | 2 +-
xen/arch/x86/hvm/svm/svmdebug.c | 2 ++
xen/arch/x86/hvm/svm/vmcb.c | 2 +-
xen/arch/x86/include/asm/hvm/svm/vmcb.h | 18 +++++++++---------
5 files changed, 20 insertions(+), 18 deletions(-)
--
2.44.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] x86/svm: Drop the _enabled suffix from vmcb bits
2024-03-07 21:39 [PATCH 0/2] x86/svm : Misc changes for few vmcb bits Vaishali Thakkar
@ 2024-03-07 21:40 ` Vaishali Thakkar
2024-03-07 23:22 ` Andrew Cooper
2024-03-08 7:29 ` Jan Beulich
2024-03-07 21:40 ` [PATCH 2/2] x86/svmdebug: Print sev and sev_es " Vaishali Thakkar
1 sibling, 2 replies; 8+ messages in thread
From: Vaishali Thakkar @ 2024-03-07 21:40 UTC (permalink / raw)
To: xen-devel; +Cc: jbeulich, andrew.cooper3, roger.pau, wl, Vaishali Thakkar
The suffix is redundant for np/sev/sev-es bits. Drop it
to avoid adding extra code volume.
Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Vaishali Thakkar <vaishali.thakkar@vates.tech>i
---
xen/arch/x86/hvm/svm/nestedsvm.c | 14 +++++++-------
xen/arch/x86/hvm/svm/svm.c | 2 +-
xen/arch/x86/hvm/svm/vmcb.c | 2 +-
xen/arch/x86/include/asm/hvm/svm/vmcb.h | 18 +++++++++---------
4 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c
index e4e01add8c..7e285cf85a 100644
--- a/xen/arch/x86/hvm/svm/nestedsvm.c
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c
@@ -571,7 +571,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs)
if ( nestedhvm_paging_mode_hap(v) )
{
/* host nested paging + guest nested paging. */
- n2vmcb->_np_enable = 1;
+ n2vmcb->_np = 1;
nestedsvm_vmcb_set_nestedp2m(v, ns_vmcb, n2vmcb);
@@ -585,7 +585,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs)
else if ( paging_mode_hap(v->domain) )
{
/* host nested paging + guest shadow paging. */
- n2vmcb->_np_enable = 1;
+ n2vmcb->_np = 1;
/* Keep h_cr3 as it is. */
n2vmcb->_h_cr3 = n1vmcb->_h_cr3;
/* When l1 guest does shadow paging
@@ -601,7 +601,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs)
else
{
/* host shadow paging + guest shadow paging. */
- n2vmcb->_np_enable = 0;
+ n2vmcb->_np = 0;
n2vmcb->_h_cr3 = 0x0;
/* TODO: Once shadow-shadow paging is in place come back to here
@@ -706,7 +706,7 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_regs *regs,
}
/* nested paging for the guest */
- svm->ns_hap_enabled = !!ns_vmcb->_np_enable;
+ svm->ns_hap_enabled = !!ns_vmcb->_np;
/* Remember the V_INTR_MASK in hostflags */
svm->ns_hostflags.fields.vintrmask = !!ns_vmcb->_vintr.fields.intr_masking;
@@ -1084,7 +1084,7 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu_user_regs *regs)
if ( nestedhvm_paging_mode_hap(v) )
{
/* host nested paging + guest nested paging. */
- ns_vmcb->_np_enable = n2vmcb->_np_enable;
+ ns_vmcb->_np = n2vmcb->_np;
ns_vmcb->_cr3 = n2vmcb->_cr3;
/* The vmcb->h_cr3 is the shadowed h_cr3. The original
* unshadowed guest h_cr3 is kept in ns_vmcb->h_cr3,
@@ -1093,7 +1093,7 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu_user_regs *regs)
else if ( paging_mode_hap(v->domain) )
{
/* host nested paging + guest shadow paging. */
- ns_vmcb->_np_enable = 0;
+ ns_vmcb->_np = 0;
/* Throw h_cr3 away. Guest is not allowed to set it or
* it can break out, otherwise (security hole!) */
ns_vmcb->_h_cr3 = 0x0;
@@ -1104,7 +1104,7 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu_user_regs *regs)
else
{
/* host shadow paging + guest shadow paging. */
- ns_vmcb->_np_enable = 0;
+ ns_vmcb->_np = 0;
ns_vmcb->_h_cr3 = 0x0;
/* The vmcb->_cr3 is the shadowed cr3. The original
* unshadowed guest cr3 is kept in ns_vmcb->_cr3,
diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index b551eac807..1b38f6a494 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -473,7 +473,7 @@ static int svm_vmcb_restore(struct vcpu *v, struct hvm_hw_cpu *c)
if ( paging_mode_hap(v->domain) )
{
- vmcb_set_np_enable(vmcb, 1);
+ vmcb_set_np(vmcb, 1);
vmcb_set_g_pat(vmcb, MSR_IA32_CR_PAT_RESET /* guest PAT */);
vmcb_set_h_cr3(vmcb, pagetable_get_paddr(p2m_get_pagetable(p2m)));
}
diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c
index 282fe7cdbe..a8dd87ca36 100644
--- a/xen/arch/x86/hvm/svm/vmcb.c
+++ b/xen/arch/x86/hvm/svm/vmcb.c
@@ -133,7 +133,7 @@ static int construct_vmcb(struct vcpu *v)
if ( paging_mode_hap(v->domain) )
{
- vmcb->_np_enable = 1; /* enable nested paging */
+ vmcb->_np = 1; /* enable nested paging */
vmcb->_g_pat = MSR_IA32_CR_PAT_RESET; /* guest PAT */
vmcb->_h_cr3 = pagetable_get_paddr(
p2m_get_pagetable(p2m_get_hostp2m(v->domain)));
diff --git a/xen/arch/x86/include/asm/hvm/svm/vmcb.h b/xen/arch/x86/include/asm/hvm/svm/vmcb.h
index 91221ff4e2..76507576ba 100644
--- a/xen/arch/x86/include/asm/hvm/svm/vmcb.h
+++ b/xen/arch/x86/include/asm/hvm/svm/vmcb.h
@@ -473,12 +473,12 @@ struct vmcb_struct {
intinfo_t exit_int_info; /* offset 0x88 */
union { /* offset 0x90 - cleanbit 4 */
struct {
- bool _np_enable :1;
- bool _sev_enable :1;
- bool _sev_es_enable :1;
- bool _gmet :1;
- bool _np_sss :1;
- bool _vte :1;
+ bool _np :1;
+ bool _sev :1;
+ bool _sev_es :1;
+ bool _gmet :1;
+ bool _np_sss :1;
+ bool _vte :1;
};
uint64_t _np_ctrl;
};
@@ -645,9 +645,9 @@ VMCB_ACCESSORS(msrpm_base_pa, iopm)
VMCB_ACCESSORS(guest_asid, asid)
VMCB_ACCESSORS(vintr, tpr)
VMCB_ACCESSORS(np_ctrl, np)
-VMCB_ACCESSORS_(np_enable, bool, np)
-VMCB_ACCESSORS_(sev_enable, bool, np)
-VMCB_ACCESSORS_(sev_es_enable, bool, np)
+VMCB_ACCESSORS_(np, bool, np)
+VMCB_ACCESSORS_(sev, bool, np)
+VMCB_ACCESSORS_(sev_es, bool, np)
VMCB_ACCESSORS_(gmet, bool, np)
VMCB_ACCESSORS_(vte, bool, np)
VMCB_ACCESSORS(h_cr3, np)
--
2.44.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] x86/svmdebug: Print sev and sev_es vmcb bits
2024-03-07 21:39 [PATCH 0/2] x86/svm : Misc changes for few vmcb bits Vaishali Thakkar
2024-03-07 21:40 ` [PATCH 1/2] x86/svm: Drop the _enabled suffix from " Vaishali Thakkar
@ 2024-03-07 21:40 ` Vaishali Thakkar
2024-03-07 23:34 ` Andrew Cooper
1 sibling, 1 reply; 8+ messages in thread
From: Vaishali Thakkar @ 2024-03-07 21:40 UTC (permalink / raw)
To: xen-devel; +Cc: jbeulich, andrew.cooper3, roger.pau, wl, Vaishali Thakkar
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(+)
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",
--
2.44.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] x86/svm: Drop the _enabled suffix from vmcb bits
2024-03-07 21:40 ` [PATCH 1/2] x86/svm: Drop the _enabled suffix from " Vaishali Thakkar
@ 2024-03-07 23:22 ` Andrew Cooper
2024-03-08 5:58 ` Vaishali Thakkar
2024-03-08 7:29 ` Jan Beulich
1 sibling, 1 reply; 8+ messages in thread
From: Andrew Cooper @ 2024-03-07 23:22 UTC (permalink / raw)
To: Vaishali Thakkar, xen-devel; +Cc: jbeulich, roger.pau, wl
On 07/03/2024 9:40 pm, Vaishali Thakkar wrote:
> The suffix is redundant for np/sev/sev-es bits. Drop it
> to avoid adding extra code volume.
>
> Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Vaishali Thakkar <vaishali.thakkar@vates.tech>i
Typo on the end of your email address?
> diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c
> index e4e01add8c..7e285cf85a 100644
> --- a/xen/arch/x86/hvm/svm/nestedsvm.c
> +++ b/xen/arch/x86/hvm/svm/nestedsvm.c
> @@ -706,7 +706,7 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_regs *regs,
> }
>
> /* nested paging for the guest */
> - svm->ns_hap_enabled = !!ns_vmcb->_np_enable;
> + svm->ns_hap_enabled = !!ns_vmcb->_np;
Because the type of is bool, the !! can be dropped too while changing
this line.
It seems that this was missing cleanup from f57ae00635 "SVM: split
_np_enable VMCB field".
Anyway, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> and I'm
happy to fix on commit.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] x86/svmdebug: Print sev and sev_es vmcb bits
2024-03-07 21:40 ` [PATCH 2/2] x86/svmdebug: Print sev and sev_es " Vaishali Thakkar
@ 2024-03-07 23:34 ` Andrew Cooper
2024-03-08 6:02 ` Vaishali Thakkar
0 siblings, 1 reply; 8+ messages in thread
From: Andrew Cooper @ 2024-03-07 23:34 UTC (permalink / raw)
To: Vaishali Thakkar, xen-devel; +Cc: jbeulich, roger.pau, wl
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] x86/svm: Drop the _enabled suffix from vmcb bits
2024-03-07 23:22 ` Andrew Cooper
@ 2024-03-08 5:58 ` Vaishali Thakkar
0 siblings, 0 replies; 8+ messages in thread
From: Vaishali Thakkar @ 2024-03-08 5:58 UTC (permalink / raw)
To: Andrew Cooper, xen-devel; +Cc: jbeulich, roger.pau, wl
On 3/8/24 00:22, Andrew Cooper wrote:
> On 07/03/2024 9:40 pm, Vaishali Thakkar wrote:
>> The suffix is redundant for np/sev/sev-es bits. Drop it
>> to avoid adding extra code volume.
>>
>> Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
>> Signed-off-by: Vaishali Thakkar <vaishali.thakkar@vates.tech>i
>
> Typo on the end of your email address?
Oops, thanks for catching it.
>> diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c
>> index e4e01add8c..7e285cf85a 100644
>> --- a/xen/arch/x86/hvm/svm/nestedsvm.c
>> +++ b/xen/arch/x86/hvm/svm/nestedsvm.c
>> @@ -706,7 +706,7 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_regs *regs,
>> }
>>
>> /* nested paging for the guest */
>> - svm->ns_hap_enabled = !!ns_vmcb->_np_enable;
>> + svm->ns_hap_enabled = !!ns_vmcb->_np;
>
> Because the type of is bool, the !! can be dropped too while changing
> this line.
Thanks for the review. As I'm sending the revised patchset anyway,
will fix both things in this patch too.
> It seems that this was missing cleanup from f57ae00635 "SVM: split
> _np_enable VMCB field".
>
> Anyway, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> and I'm
> happy to fix on commit.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] x86/svmdebug: Print sev and sev_es vmcb bits
2024-03-07 23:34 ` Andrew Cooper
@ 2024-03-08 6:02 ` Vaishali Thakkar
0 siblings, 0 replies; 8+ messages in thread
From: Vaishali Thakkar @ 2024-03-08 6:02 UTC (permalink / raw)
To: Andrew Cooper, xen-devel; +Cc: jbeulich, roger.pau, wl
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] x86/svm: Drop the _enabled suffix from vmcb bits
2024-03-07 21:40 ` [PATCH 1/2] x86/svm: Drop the _enabled suffix from " Vaishali Thakkar
2024-03-07 23:22 ` Andrew Cooper
@ 2024-03-08 7:29 ` Jan Beulich
1 sibling, 0 replies; 8+ messages in thread
From: Jan Beulich @ 2024-03-08 7:29 UTC (permalink / raw)
To: Vaishali Thakkar; +Cc: andrew.cooper3, roger.pau, wl, xen-devel
On 07.03.2024 22:40, Vaishali Thakkar wrote:
> --- a/xen/arch/x86/hvm/svm/nestedsvm.c
> +++ b/xen/arch/x86/hvm/svm/nestedsvm.c
> @@ -571,7 +571,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs)
> if ( nestedhvm_paging_mode_hap(v) )
> {
> /* host nested paging + guest nested paging. */
> - n2vmcb->_np_enable = 1;
> + n2vmcb->_np = 1;
Given the field is bool, "true" here and elsewhere as well as ...
> @@ -601,7 +601,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs)
> else
> {
> /* host shadow paging + guest shadow paging. */
> - n2vmcb->_np_enable = 0;
> + n2vmcb->_np = 0;
... "false" here (and once again further down)?
Jan
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-03-08 7:30 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-07 21:39 [PATCH 0/2] x86/svm : Misc changes for few vmcb bits Vaishali Thakkar
2024-03-07 21:40 ` [PATCH 1/2] x86/svm: Drop the _enabled suffix from " Vaishali Thakkar
2024-03-07 23:22 ` Andrew Cooper
2024-03-08 5:58 ` Vaishali Thakkar
2024-03-08 7:29 ` Jan Beulich
2024-03-07 21:40 ` [PATCH 2/2] x86/svmdebug: Print sev and sev_es " Vaishali Thakkar
2024-03-07 23:34 ` Andrew Cooper
2024-03-08 6:02 ` Vaishali Thakkar
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.