[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v13 12/23] x86: refactor psr: L3 CAT: set value: implement write msr flow.
>>> Yi Sun <yi.y.sun@xxxxxxxxxxxxxxx> 07/06/17 4:07 AM >>> >v13: >- use 'skip_prior_features'. >- add 'const' for some variables. You didn't go quite far enough with this: >+struct cos_write_info >+{ >+ unsigned int cos; >+ struct feat_node *feature; >+ const uint32_t *val; With this, ... >static int write_psr_msrs(unsigned int socket, unsigned int cos, >uint32_t val[], unsigned int array_len, ... I can't see why this can't be const too. Of course that would then affect an earlier patch. >enum psr_feat_type feat_type) >{ >- return -ENOENT; >+ int ret; >+ struct psr_socket_info *info = get_socket_info(socket); >+ struct cos_write_info data = >+ { >+ .cos = cos, >+ .feature = info->features[feat_type], >+ .props = feat_props[feat_type], >+ }; >+ >+ if ( cos > info->features[feat_type]->cos_max ) >+ return -EINVAL; >+ >+ /* Skip to the feature's value head. */ >+ ret = skip_prior_features(&val, &array_len, feat_type); >+ if ( ret ) >+ return ret; >+ >+ if ( array_len < feat_props[feat_type]->cos_num ) >+ return -ENOSPC; >+ >+ data.val = val; >+ >+ if ( socket == cpu_to_socket(smp_processor_id()) ) >+ do_write_psr_msrs(&data); >+ else >+ { >+ unsigned int cpu = get_socket_cpu(socket); >+ >+ if ( cpu >= nr_cpu_ids ) >+ return -ENOTSOCK; >+ on_selected_cpus(cpumask_of(cpu), do_write_psr_msrs, &data, 1); How frequent an operation can this be? Considering that the actual MSR write(s) in the handler is (are) conditional I wonder whether it wouldn't be worthwhile trying to avoid the IPI altogether, by pre-checking whether any write actually needs doing. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |