[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87tufzhl56.ffs@tglx>
Date: Fri, 26 Nov 2021 00:26:45 +0100
From: Thomas Gleixner <tglx@...utronix.de>
To: Paolo Bonzini <pbonzini@...hat.com>, isaku.yamahata@...el.com,
Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
"H . Peter Anvin" <hpa@...or.com>,
Vitaly Kuznetsov <vkuznets@...hat.com>,
Wanpeng Li <wanpengli@...cent.com>,
Jim Mattson <jmattson@...gle.com>,
Joerg Roedel <joro@...tes.org>, erdemaktas@...gle.com,
Connor Kuehl <ckuehl@...hat.com>,
Sean Christopherson <seanjc@...gle.com>,
linux-kernel@...r.kernel.org, kvm@...r.kernel.org
Cc: isaku.yamahata@...il.com, Xiaoyao Li <xiaoyao.li@...el.com>
Subject: Re: [RFC PATCH v3 54/59] KVM: X86: Introduce initial_tsc_khz in
struct kvm_arch
Paolo,
On Thu, Nov 25 2021 at 23:13, Paolo Bonzini wrote:
> On 11/25/21 22:05, Thomas Gleixner wrote:
> If there are some patches that are actually independent, go ahead and
> submit them early. But more practically, for the bulk of the changes
> what you need to do is:
>
> 1) incorporate into patch 55 a version of tdx.c that essentially does
> KVM_BUG_ON or WARN_ON for each function. Temporarily keep the same huge
> patch that adds the remaining 2000 lines of tdx.c
There is absolutely no reason to populate anything upfront at all.
Why?
Simply because that whole muck cannot work until all pieces are in place.
That's the classic PoC vs. usable code situation. I.e. you know what
needs to be done from a PoC point of view and you have to get there by
building up the infrastructure piece by piece.
So why would you provide:
handle_A(...) { BUG(); }
..
handle_Z(...) { BUG(); }
with all the invocations in the common emulation dispatcher:
handle_stuff(reason)
{
switch(reason) {
case A: return handle_A();
...
case Z: return handle_Z();
default: BUG();
}
};
in the first place instead of providing:
1)
handle_stuff(reason)
{
switch(reason) {
default: BUG();
};
}
2)
handle_A(...)
{
return do_something_understandable()
}
handle_stuff(reason)
{
switch(reason) {
case A: return handle_A();
default: BUG();
}
$Z)
handle_Z(...)
{
return do_something_understandable()
}
handle_stuff(reason)
{
switch(reason) {
case A: return handle_A();
...
case Z: return handle_Z();
default: BUG();
}
where each of (1..$Z) is a single patch doing exactly _ONE_ thing at a
time and if there is some extra magic required like an additional export
for handle_Y() then this export patch is either part of the patch
dealing with $Y or just before that.
In both scenarious you cannot boot a TDX guest until you reached $Z, but
in the gradual one you and the reviewers have the pleasure of looking at
one thing at a time.
No?
Thanks,
tglx
Powered by blists - more mailing lists