|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 11/25] x86: refactor psr: L3 CAT: set value: implement cos finding flow.
>>> On 28.03.17 at 05:26, <yi.y.sun@xxxxxxxxxxxxxxx> wrote:
> On 17-03-27 04:28:23, Jan Beulich wrote:
>> >>> On 16.03.17 at 12:08, <yi.y.sun@xxxxxxxxxxxxxxx> wrote:
>> > --- a/xen/arch/x86/psr.c
>> > +++ b/xen/arch/x86/psr.c
> [...]
>
>> > +static int cat_compare_val(const uint32_t val[],
>> > + const struct feat_node *feat,
>> > + unsigned int cos)
>> > +{
>> > + /*
>> > + * Different features' cos_max are different. If cos id of the feature
>> > + * being set exceeds other feature's cos_max, the val of other feature
>> > + * must be default value. HW supports such case.
>> > + */
>> > + if ( cos > feat->info.cat_info.cos_max )
>> > + {
>> > + /* cos_reg_val[0] is the default value. */
>> > + if ( val[0] != feat->cos_reg_val[0] )
>> > + return -EINVAL;
>>
>> As you can see, with cos_max moved into the generic portion of the
>> feature node, this entire check can move into the caller.
>>
> CDP has different behavior in this callback function. We need to check
> val[0]
> and val[1] like below:
> static int l3_cdp_compare_val(...)
> {
> if ( cos > feat->info.cat_info.cos_max )
> {
> if ( val[0] != get_cdp_data(feat, 0) ||
> val[1] != get_cdp_code(feat, 0) )
> return -EINVAL;
>
> /* Find */
> return 1;
> }
>
> if ( val[0] == get_cdp_data(feat, cos) &&
> val[1] == get_cdp_code(feat, cos) )
> /* Find */
> return 1;
> ......
> }
There's no difference other than there being two values checked
here. Moving this to generic code should be easily possible as long
as the get_val() hook is flexible enough. Once again, please think
thoroughly about where to draw the line between generic code
and feature specific hooks - the latter should be reduced to a
minimum.
>> > + return 1;
>> > + }
>> > +
>> > + if ( val[0] == feat->cos_reg_val[cos] )
>> > + /* Find */
>> > + return 1;
>> > +
>> > + /* Not find */
>> > + return 0;
>> > +}
>>
>> Or actually, the entire function then becomes feature independent,
>> as it seems. And I think I did suggest that already during review of
>> an earlier version.
>>
> Per above explanation, I think we have to keep this callback function.
Per above explanation, I think you don't need to keep this callback
function.
>> > + int find = 0;
>>
>> "found" again, or even simply "rc"? Also I think this would better
>> move into the outer for() scope.
>>
> Ok, will use 'found' and move it.
Please check its use(s): It should be "found" only if that's the
meaning it always has. It's type being int (rather than bool)
suggests otherwise ...
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |