All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: Yi Sun <yi.y.sun@linux.intel.com>
Cc: kevin.tian@intel.com, wei.liu2@citrix.com,
	he.chen@linux.intel.com, andrew.cooper3@citrix.com,
	dario.faggioli@citrix.com, ian.jackson@eu.citrix.com,
	mengxu@cis.upenn.edu, xen-devel@lists.xenproject.org,
	chao.p.peng@linux.intel.com, roger.pau@citrix.com
Subject: Re: [PATCH v9 10/25] x86: refactor psr: L3 CAT: set value: assemble features value array.
Date: Tue, 28 Mar 2017 04:39:13 -0600	[thread overview]
Message-ID: <58DA59710200007800148FD2@prv-mh.provo.novell.com> (raw)
In-Reply-To: <20170328101823.GQ17458@yi.y.sun>

>>> On 28.03.17 at 12:18, <yi.y.sun@linux.intel.com> wrote:
> On 17-03-28 03:20:05, Jan Beulich wrote:
>> >>> On 28.03.17 at 11:11, <yi.y.sun@linux.intel.com> wrote:
>> > On 17-03-28 02:36:05, Jan Beulich wrote:
>> >> >>> On 28.03.17 at 10:05, <yi.y.sun@linux.intel.com> wrote:
>> >> > On 17-03-28 11:12:43, Yi Sun wrote:
>> >> >> On 17-03-27 04:17:28, Jan Beulich wrote:
>> >> >> > >>> On 16.03.17 at 12:08, <yi.y.sun@linux.intel.com> wrote:
>> >> >> > > --- a/xen/arch/x86/psr.c
>> >> >> > > +++ b/xen/arch/x86/psr.c
>> >> > [...]
>> >> > 
>> >> >> > >  static int gather_val_array(uint32_t val[],
>> >> >> > > @@ -589,7 +672,34 @@ static int gather_val_array(uint32_t val[],
>> >> >> > >                              const struct psr_socket_info *info,
>> >> >> > >                              unsigned int old_cos)
>> >> >> > >  {
>> >> >> > > -    return -EINVAL;
>> >> >> > > +    const struct feat_node *feat;
>> >> >> > > +    unsigned int i;
>> >> >> > > +
>> >> >> > > +    if ( !val )
>> >> >> > > +        return -EINVAL;
>> >> >> > > +
>> >> >> > > +    /* Get all features current values according to old_cos. */
>> >> >> > > +    for ( i = 0; i < PSR_SOCKET_MAX_FEAT; i++ )
>> >> >> > > +    {
>> >> >> > > +        if ( !info->features[i] )
>> >> >> > > +            continue;
>> >> >> > > +
>> >> >> > > +        feat = info->features[i];
>> >> >> > > +
>> >> >> > > +        if ( old_cos > feat->ops.get_cos_max(feat) )
>> >> >> > > +            old_cos = 0;
>> >> >> > > +
>> >> >> > > +        /* value getting order is same as feature array */
>> >> >> > > +        feat->ops.get_old_val(val, feat, old_cos);
>> >> >> > > +
>> >> >> > > +        array_len -= feat->cos_num;
>> >> >> > 
>> >> >> > So this I should really have asked about on a much earlier patch,
>> >> >> > but I've recognize the oddity only now: Why is cos_num
>> >> >> > per-feature-node instead of per-feature? This should really be a
>> >> >> > field in struct feat_ops (albeit the name "ops" then will be slightly
>> >> >> > misleading, but I think that's tolerable if you can't think of a better
>> >> >> > name).
>> >> >> > 
>> >> >> Ok, I got your meaning. How about 'feat_props'? No matter operations or
>> >> >> variables are all properties of the feature.
>> >> >> 
>> >> > One more thing here. If we move 'cos_max' into 'feat_ops', we cannot 
>> > declare
>> >> > 'feat_ops' as const. Because we have to assign value to 'cos_max' in
>> >> > cat_init_feature().
>> >> 
>> >> I don't see a problem with this. It's only the static variable which
>> >> can't be const then anymore. The pointer used everywhere else
>> >> easily can be, afaict.
>> >> 
>> > Because I want to assign the l3_cat_props to feat->props before executing
>> > cat_init_feature(). The codes sequence is below. Then, in 
>> > cat_init_feature(),
>> > I can use 'feat' but not 'l3_cat_props' which is feature specific.
>> > 
>> > static void cat_init_feature(...)
>> > {
>> > ......
>> >     feat->info.cbm_len = (regs->a & CAT_CBM_LEN_MASK) + 1;
>> >     feat->props->cos_max = min(opt_cos_max, regs->d & CAT_COS_MAX_MASK);
>> > ......
>> > }
>> > 
>> > static struct feat_props l3_cat_props = {
>> >     .cos_num = 1,
>> > };
>> > 
>> > static void psr_cpu_init(void)
>> > {
>> > ......
>> >         feat->props = &l3_cat_props;
>> >         cat_init_feature(&regs, feat, info, PSR_SOCKET_L3_CAT);
>> > ......
>> > }
>> 
>> static void psr_cpu_init(void)
>> {
>> ......
>>         cat_init_feature(&regs, &l3_cat_props, feat, info, PSR_SOCKET_L3_CAT);
>>         feat->props = &l3_cat_props;
>> ......
>> }
>> 
>> > Then, back to the origin of this. I think feature-node is feature itself.
>> > Everything in it is feature specific thing. Is it necessary to move values
>> > into a sub-structure, 'feat_props'? If not doing this, we can keep
>> > 'feat_ops' to only handle callback functions.
>> 
>> I'm not sure I understand what you're trying to tell me. I can only
>> repeat what I've said before: The amount of feature specific
>> callbacks should be reduced to the minimum necessary - the more
>> generic code, the less code overall to maintain.
>> 
> My key point is: can we keep 'cos_num' and 'cos_max' into 'feat_node' but not
> 'feat_ops'? Because I think 'feat_node' represents a feature. It can keep
> all feature specific things.

Let me ask the question this way - for a given feature, can
cos_max and cos_num vary between individual nodes created
for this feature? If they can, the values need to be per-node.
If they can't, there's no point in replicating them in every node.

> If you still think it is not good, can we define 'struct feat_props' without
> const? Then, I can keep above code sequence.

Sure - I've already outlined how that would work with keeping const
in most places.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-03-28 10:39 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-16 11:07 [PATCH v9 00/25] Enable L2 Cache Allocation Technology & Refactor psr.c Yi Sun
2017-03-16 11:07 ` [PATCH v9 01/25] docs: create Cache Allocation Technology (CAT) and Code and Data Prioritization (CDP) feature document Yi Sun
2017-03-16 11:07 ` [PATCH v9 02/25] x86: refactor psr: remove L3 CAT/CDP codes Yi Sun
2017-03-16 11:07 ` [PATCH v9 03/25] x86: refactor psr: implement main data structures Yi Sun
2017-03-24 16:19   ` Jan Beulich
2017-03-27  2:38     ` Yi Sun
2017-03-27  6:20       ` Jan Beulich
2017-03-27  7:12         ` Yi Sun
2017-03-27  7:37           ` Jan Beulich
2017-03-16 11:07 ` [PATCH v9 04/25] x86: move cpuid_count_leaf from cpuid.c to processor.h Yi Sun
2017-03-24 16:22   ` Jan Beulich
2017-03-16 11:07 ` [PATCH v9 05/25] x86: refactor psr: L3 CAT: implement CPU init and free flow Yi Sun
2017-03-24 16:52   ` Jan Beulich
2017-03-27  4:41     ` Yi Sun
2017-03-27  6:34       ` Jan Beulich
2017-03-27  8:16         ` Yi Sun
2017-03-27  8:43           ` Jan Beulich
2017-03-16 11:07 ` [PATCH v9 06/25] x86: refactor psr: L3 CAT: implement Domain init/free and schedule flows Yi Sun
2017-03-16 11:07 ` [PATCH v9 07/25] x86: refactor psr: L3 CAT: implement get hw info flow Yi Sun
2017-03-27  9:07   ` Jan Beulich
2017-03-27 12:24     ` Yi Sun
2017-03-27 12:51       ` Jan Beulich
2017-03-27 13:19         ` Yi Sun
2017-03-27 13:32           ` Jan Beulich
2017-03-16 11:07 ` [PATCH v9 08/25] x86: refactor psr: L3 CAT: implement get value flow Yi Sun
2017-03-27  9:23   ` Jan Beulich
2017-03-27 12:59     ` Yi Sun
2017-03-27 13:34       ` Jan Beulich
2017-03-28  2:13         ` Yi Sun
2017-03-28  8:10           ` Jan Beulich
2017-03-16 11:07 ` [PATCH v9 09/25] x86: refactor psr: L3 CAT: set value: implement framework Yi Sun
2017-03-27  9:59   ` Jan Beulich
2017-03-28  1:21     ` Yi Sun
2017-03-28  8:21       ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 10/25] x86: refactor psr: L3 CAT: set value: assemble features value array Yi Sun
2017-03-27 10:17   ` Jan Beulich
2017-03-28  3:12     ` Yi Sun
2017-03-28  8:05       ` Yi Sun
2017-03-28  8:36         ` Jan Beulich
2017-03-28  9:11           ` Yi Sun
2017-03-28  9:20             ` Jan Beulich
2017-03-28 10:18               ` Yi Sun
2017-03-28 10:39                 ` Jan Beulich [this message]
2017-03-28  8:34       ` Jan Beulich
2017-03-28 10:12         ` Yi Sun
2017-03-28 10:36           ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 11/25] x86: refactor psr: L3 CAT: set value: implement cos finding flow Yi Sun
2017-03-27 10:28   ` Jan Beulich
2017-03-28  3:26     ` Yi Sun
2017-03-28  8:41       ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 12/25] x86: refactor psr: L3 CAT: set value: implement cos id picking flow Yi Sun
2017-03-27 10:37   ` Jan Beulich
2017-03-28  4:58     ` Yi Sun
2017-03-28  8:45       ` Jan Beulich
2017-03-28 10:31         ` Yi Sun
2017-03-28 10:40           ` Jan Beulich
2017-03-28 11:59             ` Yi Sun
2017-03-28 12:20               ` Jan Beulich
2017-03-29  1:20                 ` Yi Sun
2017-03-29  1:36                   ` Yi Sun
2017-03-29  9:57                     ` Jan Beulich
2017-03-30  1:37                       ` Yi Sun
2017-03-30  1:39                         ` Yi Sun
2017-03-30 11:55                         ` Jan Beulich
2017-03-30 12:10                           ` Yi Sun
2017-03-31  8:47                             ` Jan Beulich
2017-03-31  9:12                               ` Yi Sun
2017-03-31  9:18                                 ` Yi Sun
2017-03-31 10:19                                 ` Jan Beulich
2017-03-31 12:40                                   ` Yi Sun
2017-03-31 12:51                                     ` Jan Beulich
2017-03-31 13:22                                       ` Yi Sun
2017-03-31 14:35                                         ` Jan Beulich
2017-03-31 14:46                                           ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 13/25] x86: refactor psr: L3 CAT: set value: implement write msr flow Yi Sun
2017-03-27 10:46   ` Jan Beulich
2017-03-28  5:06     ` Yi Sun
2017-03-28  8:48       ` Jan Beulich
2017-03-28 10:20         ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 14/25] x86: refactor psr: CDP: implement CPU init and free flow Yi Sun
2017-03-27 13:58   ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 15/25] x86: refactor psr: CDP: implement get hw info flow Yi Sun
2017-03-27 14:08   ` Jan Beulich
2017-03-28  5:13     ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 16/25] x86: refactor psr: CDP: implement get value flow Yi Sun
2017-03-16 11:08 ` [PATCH v9 17/25] x86: refactor psr: CDP: implement set value callback functions Yi Sun
2017-03-27 14:17   ` Jan Beulich
2017-03-28  5:14     ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 18/25] x86: L2 CAT: implement CPU init and free flow Yi Sun
2017-03-16 11:08 ` [PATCH v9 19/25] x86: L2 CAT: implement get hw info flow Yi Sun
2017-03-27 14:38   ` Jan Beulich
2017-03-28  5:16     ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 20/25] x86: L2 CAT: implement get value flow Yi Sun
2017-03-27 14:39   ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 21/25] x86: L2 CAT: implement set " Yi Sun
2017-03-27 14:40   ` Jan Beulich
2017-03-16 11:08 ` [PATCH v9 22/25] tools: L2 CAT: support get HW info for L2 CAT Yi Sun
2017-03-16 11:08 ` [PATCH v9 23/25] tools: L2 CAT: support show cbm " Yi Sun
2017-03-16 11:08 ` [PATCH v9 24/25] tools: L2 CAT: support set " Yi Sun
2017-03-28 14:04   ` Wei Liu
2017-03-29  1:21     ` Yi Sun
2017-03-16 11:08 ` [PATCH v9 25/25] docs: add L2 CAT description in docs Yi Sun
2017-03-16 11:20 ` [PATCH v9 00/25] Enable L2 Cache Allocation Technology & Refactor psr.c Jan Beulich
2017-03-17  1:29   ` Yi Sun
2017-03-17  7:25     ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58DA59710200007800148FD2@prv-mh.provo.novell.com \
    --to=jbeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=dario.faggioli@citrix.com \
    --cc=he.chen@linux.intel.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=kevin.tian@intel.com \
    --cc=mengxu@cis.upenn.edu \
    --cc=roger.pau@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    --cc=yi.y.sun@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.