[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 04/23] x86: refactor psr: L3 CAT: implement main data structures, CPU init and free flows.
On 17-05-30 07:05:18, Jan Beulich wrote: > >>> On 03.05.17 at 10:44, <yi.y.sun@xxxxxxxxxxxxxxx> wrote: > > +/* > > + * PSR features are managed per socket. Below structure defines the members > > + * used to manage these features. > > + * ref_lock - A lock to protect cos_ref. > > + * features - A feature node array used to manage all features enabled. > > + * cos_ref - A reference count array to record how many domains are > > using the > > + * COS ID. Every entry of cos_ref corresponds to one COS ID. > > + */ > > +struct psr_socket_info { > > + bool feat_init; > > The comment above lacks a line for this field. > Will add it. Thanks! > > +static void free_socket_resources(unsigned int socket) > > +{ > > + unsigned int i; > > + struct psr_socket_info *info = socket_info + socket; > > + > > + if ( !info ) > > + return; > > + > > + /* > > + * Free resources of features. The global feature object, e.g. > > feat_l3_cat, > > + * may not be freed here if it is not added into array. It is simply > > being > > + * kept until the next CPU online attempt. > > + */ > > + for ( i = 0; i < PSR_SOCKET_FEAT_NUM; i++ ) > > + { > > + xfree(info->features[i]); > > + info->features[i] = NULL; > > + } > > If you iterate over arrays, please use ARRAY_SIZE() as the loop > boundary (and without knowing whether there are similar issues > elsewhere in the series, please consider the comment given for > all of it, just like any other comments usually are meant to apply > to similar issues elsewhere). > Ok, will check all loops. > > +static void __init init_psr(void) > > +{ > > + if ( opt_cos_max < 1 ) > > + { > > + printk(XENLOG_INFO "CAT: disabled, cos_max is too small\n"); > > + return; > > + } > > + > > + socket_info = xzalloc_array(struct psr_socket_info, nr_sockets); > > + > > + if ( !socket_info ) > > + { > > + printk(XENLOG_INFO "Failed to alloc socket_info!\n"); > > XENLOG_WARNING at least. > Ok. > > static void psr_cpu_init(void) > > { > > + struct psr_socket_info *info; > > + unsigned int socket; > > + unsigned int cpu = smp_processor_id(); > > + struct feat_node *feat; > > + struct cpuid_leaf regs; > > + > > + if ( !psr_alloc_feat_enabled() || !boot_cpu_has(X86_FEATURE_PQE) ) > > + goto assoc_init; > > + > > + if ( boot_cpu_data.cpuid_level < PSR_CPUID_LEVEL_CAT ) > > + { > > + setup_clear_cpu_cap(X86_FEATURE_PQE); > > + goto assoc_init; > > + } > > + > > + socket = cpu_to_socket(cpu); > > + info = socket_info + socket; > > + if ( info->feat_init ) > > + goto assoc_init; > > + > > + spin_lock_init(&info->ref_lock); > > + > > + cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 0, ®s); > > + if ( regs.b & PSR_RESOURCE_TYPE_L3 ) > > + { > > + cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 1, ®s); > > + > > + feat = feat_l3_cat; > > + feat_l3_cat = NULL; > > + l3_cat_props.type[0] = PSR_CBM_TYPE_L3; > > Why is this not a static initializer? If it was, the whole l3_cat_props > could be const. > Good point. Will modify it. > Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |