[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 3/3] x86emul: consolidate CR4 handling
>>> On 03.12.18 at 20:37, <andrew.cooper3@xxxxxxxxxx> wrote: > On 06/11/2018 13:45, Jan Beulich wrote: >> Now that there's an almost unconditional CR4 read right at the beginning >> of x86_emulate(), centralize its reading there and use result and value >> everywhere else without further invoking the hook. >> >> Subsequently we may want to consider having the callers provide >> whichever value they deem appropriate in their contexts, to avoid >> invoking the hook altogether for this purpose. >> >> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > > I'm afraid that I am still unconvinced that cr4_rc is a clever move. > > It would be far more simple to require callers to provide it in > x86_emulate_ctxt. I'll look into this another time, but I'm afraid this will result in a behavioral change in particular for the callers which currently don't supply a read_cr hook. Furthermore I'd then question the purpose of that hook altogether: To be consistent, we then should pass in all CRs. At which point the question arises whether DRs and MSRs and XCRn shouldn't also be passed in, instead of getting obtained via callbacks. >> @@ -4000,13 +4000,10 @@ x86_emulate( >> if ( (_regs.eflags & X86_EFLAGS_VM) && >> MASK_EXTR(_regs.eflags, X86_EFLAGS_IOPL) != 3 ) >> { >> - cr4 = 0; >> - if ( op_bytes == 2 && ops->read_cr ) >> - { >> - rc = ops->read_cr(4, &cr4, ctxt); >> - if ( rc != X86EMUL_OKAY ) >> - goto done; >> - } >> + if ( op_bytes == 2 ) >> + check_cr4(); >> + else >> + cr4 = 0; > > This clobbers cr4, which is a latent bug if any of the retire logic > wants to start using the value. Yes, I did realize this when writing this code, but at this point I can't see any such case (at least for the particular instructions where such clobbering does happen), even if taking a purely abstract perspective. Hence I'm considering this acceptable. > This code is only like this because you've overloaded the value in CR4 > to include an implicit "opsize == 16", and results in exceedingly > complicated logic to follow. "Exceedingly complicated" is a matter of perception - adding several more op_bytes checks is what looked to me to complicate / obscure things more than would be desirable. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |