[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 03/25] x86: refactor psr: implement main data structures.
On 17-04-03 09:50:34, Jan Beulich wrote: > >>> On 01.04.17 at 15:53, <yi.y.sun@xxxxxxxxxxxxxxx> wrote: > > I was about to ack this, but there are a few more things which bother > me. > Do you mean ack to this patch 3 or whole patch set? Thanks! > > --- > > v10: > > - remove initialization for 'PSR_SOCKET_L3_CAT'. > > (suggested by Jan Beulich) > > - rename 'feat_ops' to 'feat_props'. > > (suggested by Jan Beulich) > > - move 'cbm_len' to 'feat_props' because it is feature independent so > > far. > > (suggested by Jan Beulich) > > - move 'cos_max' to 'feat_props' because it is feature independent. > > (suggested by Jan Beulich) > > - move 'cos_num' to 'feat_props' because it is feature independent. > > (suggested by Jan Beulich) > > - remove union 'info' and struct 'psr_cat_hw_info'. > > - remove 'get_cos_max' from 'feat_props'. > > (suggested by Jan Beulich) > > - remove 'feat_mask' from 'psr_socket_info' because we can use > > 'features[]' > > to check if any feature is initialized. > > (suggested by Jan Beulich) > > - move 'ref_lock' above 'cos_ref'. > > (suggested by Jan Beulich) > > The movement done is fine for the moment, but it would have been > even better if you had moved it ahead of the other array too. > Got it. > > +enum psr_feat_type { > > + PSR_SOCKET_L3_CAT, > > + PSR_SOCKET_L3_CDP, > > + PSR_SOCKET_L2_CAT, > > + PSR_SOCKET_MAX_FEAT, > > +}; > > It's not really logical to have the first three here - they should have > been added by their respective patches. Which gets me back to > the question of the usefulness of a patch like this one: Without the > following patches, everything being added here is unused. Iirc the > original version of this patch was quite a bit larger, better justifying > to break out all of this. The size it has shrunk to by now is a pretty > good indication that it should have been folded altogether. > Ok, I will add item one by one in related feature's patch. But can I keep this patch 3? This patch outlines the infrastructure and I demonstrated how I analyze the data structures in commit message. If I split these data structures into pieces and implement them into different patches, I am afraid to lose the completeness. > Also I think we've had the discussion about the difference between > "max" and "num" already: The former normally indicates an inclusive > upper bound, while the latter would usually be an exclusive one. > Clearly the above naming doesn't match up with this. > Ok, may change it to 'PSR_SOCKET_FEAT_NUM'. > > +/* > > + * This structure represents one feature. > > + * feat_props - Feature properties, including operation callback functions > > + and feature common values. > > + * cos_reg_val - Array to store the values of COS registers. One entry > > stores > > + * the value of one COS register. > > + * For L3 CAT and L2 CAT, one entry corresponds to one > > COS_ID. > > + * For CDP, two entries correspond to one COS_ID. E.g. > > + * COS_ID=0 corresponds to cos_reg_val[0] (Data) and > > + * cos_reg_val[1] (Code). > > + */ > > +struct feat_node { > > + /* > > + * This structure defines feature operation callback functions. Every > > + * feature enabled MUST implement such callback functions and register > > + * them to props. > > + * > > + * Feature specific behaviors will be encapsulated into these callback > > + * functions. Then, the main flows will not be changed when introducing > > + * a new feature. > > + * > > + * Feature independent HW info and common values are also defined in > > it. > > + */ > > + const struct feat_props { > > + /* > > + * cos_num, cos_max and cbm_len are common values for all features > > + * so far. > > + * cos_num - COS registers number that feature uses for one COS ID. > > + * It is defined in SDM. > > + * cos_max - The max COS registers number got through CPUID. > > + * cbm_len - The length of CBM got through CPUID. > > + */ > > + unsigned int cos_num; > > + unsigned int cos_max; > > + unsigned int cbm_len; > > + } *props; > > Let's think the data arrangement changes done so far a little further: > Why do we need this pointer per-node (i.e. once per socket)? Now > that we have a well established order of features used to index > struct psr_socket_info's features[], why can't the same indexing be > used to obtain the props pointer from a static (single instance) array > of props pointers? > Hmm, yes, we can declare a static standalone array of props pointers for all features and all sockets. It does not belong to 'feat_node' or 'socket_info'. > Otoh I'm not sure you really meant to move all three data members > into there, if you still have reason to believe that different sockets > may have different values for cos_max and/or cbm_len. I.e. these > might better be members of struct feat_node (just not placed in a > union, as you had them in v9). > We still believe there may be chances that different sockets may have different configurations. So, I would prefer to keep cos_max/cbm_len in 'feat_node'. Because this Friday is the code freeze date, can I quickly make the changes according to above comments and submit a new version if you do not have further oppinion? Thanks! BRs, Sun Yi _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |