[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 15/21] libs/guest: obtain a compatible cpu policy from two input ones
On 22.04.2021 12:34, Roger Pau Monné wrote: > On Thu, Apr 22, 2021 at 11:58:45AM +0200, Jan Beulich wrote: >> On 22.04.2021 11:42, Roger Pau Monné wrote: >>> On Wed, Apr 14, 2021 at 03:49:02PM +0200, Jan Beulich wrote: >>>> On 13.04.2021 16:01, Roger Pau Monne wrote: >>>>> @@ -944,3 +945,130 @@ bool xc_cpu_policy_is_compatible(xc_interface *xch, >>>>> const xc_cpu_policy_t host, >>>>> >>>>> return false; >>>>> } >>>>> + >>>>> +static uint64_t level_msr(unsigned int index, uint64_t val1, uint64_t >>>>> val2) >>>>> +{ >>>>> + uint64_t val = val1 & val2;; >>>> >>>> For arbitrary MSRs this isn't going to do any good. If only very >>>> specific MSRs are assumed to make it here, I think this wants >>>> commenting on. >>> >>> I've added: "MSRs passed to level_msr are expected to be bitmaps of >>> features" >> >> How does such a comment help? I.e. how does the caller tell which MSRs >> to pass here and which to deal with anyother way? > > All MSRs should be passed to level_msr, but it's handling logic would > need to be expanded to support MSRs that are not feature bitmaps. > > It might be best to restore the previous switch and handle each MSR > specifically? I think so, yes. We need to be very careful with what a possible default case does there, though. >>>>> + xen_cpuid_leaf_t *out) >>>>> +{ >>>>> + *out = (xen_cpuid_leaf_t){ }; >>>>> + >>>>> + switch ( l1->leaf ) >>>>> + { >>>>> + case 0x1: >>>>> + case 0x80000001: >>>>> + out->c = l1->c & l2->c; >>>>> + out->d = l1->d & l2->d; >>>>> + return true; >>>>> + >>>>> + case 0xd: >>>>> + if ( l1->subleaf != 1 ) >>>>> + break; >>>>> + out->a = l1->a & l2->a; >>>>> + return true; >>>> >>>> Could you explain your thinking behind this (a code comment would >>>> likely help)? You effectively discard everything except subleaf 1 >>>> by returning false in that case, don't you? >>> >>> Yes, the intent is to only level the features bitfield found in >>> subleaf 1. >>> >>> I was planning for level_leaf so far in this series to deal with the >>> feature leaves part of the featureset only. I guess you would also >>> like to leverage other parts of the xstate leaf, like the max_size or >>> the supported bits in xss_{low,high}? >> >> The latter is clearly one of the things to consider, yes (alongside >> the respective bits in sub-leaf 0 for XCR0). Sub-leaves > 1 may also >> need dealing with ECX. Yet then again some or all of this may need >> handling elsewhere, not the least because of the unusual handling of >> leaf 0xd in the hypervisor. What gets checked and/or adjusted where >> needs to be settled upon, and then the different parts of code would >> imo better cross-reference each other. > > There's a comment in recalculate_xstate that mentions that Da1 leaf is > the only piece of information preserved, and that everything else is > derived from feature state. I don't think it makes sense to try to > level anything apart from Da1 if it's going to be discarded by > recalculate_xstate anyway? > > I can add a comment here regarding why only Da1 is taken into account > for leveling so far. Yes, this would help. Thanks. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |