[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 07/15] x86: implement set value flow for MBA
On 17-09-26 10:39:31, Roger Pau Monn� wrote: > On Sat, Sep 23, 2017 at 09:48:16AM +0000, Yi Sun wrote: > > @@ -274,29 +277,6 @@ static enum psr_feat_type psr_type_to_feat_type(enum > > psr_type type) > > return feat_type; > > } > > > > -static bool psr_check_cbm(unsigned int cbm_len, unsigned long cbm) > > -{ > > - unsigned int first_bit, zero_bit; > > - > > - /* Set bits should only in the range of [0, cbm_len]. */ > > - if ( cbm & (~0ul << cbm_len) ) > > - return false; > > - > > - /* At least one bit need to be set. */ > > - if ( cbm == 0 ) > > - return false; > > - > > - first_bit = find_first_bit(&cbm, cbm_len); > > - zero_bit = find_next_zero_bit(&cbm, cbm_len, first_bit); > > - > > - /* Set bits should be contiguous. */ > > - if ( zero_bit < cbm_len && > > - find_next_bit(&cbm, cbm_len, zero_bit) < cbm_len ) > > - return false; > > - > > - return true; > > -} > > - > > /* Implementation of allocation features' functions. */ > > static bool cat_init_feature(const struct cpuid_leaf *regs, > > struct feat_node *feat, > > @@ -426,11 +406,36 @@ static bool cat_get_feat_info(const struct feat_node > > *feat, > > return true; > > } > > > > +static bool cat_check_cbm(const struct feat_node *feat, unsigned long cbm) > > +{ > > + unsigned int first_bit, zero_bit; > > + unsigned int cbm_len = feat->cat.cbm_len; > > + > > + /* > > + * Set bits should only in the range of [0, cbm_len]. > > + * And, at least one bit need to be set. > > + */ > > + if ( cbm & (~0ul << cbm_len) || cbm == 0 ) > > + return false; > > + > > + first_bit = find_first_bit(&cbm, cbm_len); > > + zero_bit = find_next_zero_bit(&cbm, cbm_len, first_bit); > > + > > + /* Set bits should be contiguous. */ > > + if ( zero_bit < cbm_len && > > + find_next_bit(&cbm, cbm_len, zero_bit) < cbm_len ) > > + return false; > > + > > + return true; > > +} > > Why do you need to move the code apart from renaming it? > Because it is CAT specific function now. I moved it into CAT section. '/* Implementation of allocation features' functions. */' > > @@ -1210,25 +1237,39 @@ static unsigned int get_socket_cpu(unsigned int > > socket) > > struct cos_write_info > > { > > unsigned int cos; > > - struct feat_node *feature; > > + struct feat_node **features; > > const uint32_t *val; > > - const struct feat_props *props; > > + unsigned int array_len; > > + const struct feat_props **props; > > Why do you need props here, from the usage below it's just pointing > to feat_props, which is already available in this context. > I may drop it. > > }; > > > > static void do_write_psr_msrs(void *data) > > { > > const struct cos_write_info *info = data; > > - struct feat_node *feat = info->feature; > > - const struct feat_props *props = info->props; > > - unsigned int i, cos = info->cos, cos_num = props->cos_num; > > + unsigned int i, index = 0, cos = info->cos; > > + const uint32_t *val_array = info->val; > > > > - for ( i = 0; i < cos_num; i++ ) > > + for ( i = 0; i < ARRAY_SIZE(feat_props); i++ ) > > { > > - if ( feat->cos_reg_val[cos * cos_num + i] != info->val[i] ) > > + struct feat_node *feat = info->features[i]; > > + const struct feat_props *props = info->props[i]; > > If you use ARRAY_SIZE(feat_props), the above should be feat_props[i]. Ok. > Also I'm worried about the size of the props array, isn't there a > possibility that the props array is smaller than the feature array? > No, every member is inserted into props array if the feature is initialized successfully and inserted into feature array. So, they are 1:1. > > Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |