[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 3/7] x86: detect and initialize Intel CAT feature
>>> On 19.03.15 at 11:41, <chao.p.peng@xxxxxxxxxxxxxxx> wrote: > --- a/docs/misc/xen-command-line.markdown > +++ b/docs/misc/xen-command-line.markdown > @@ -1090,9 +1090,9 @@ This option can be specified more than once (up to 8 > times at present). > > `= <integer>` > > ### psr (Intel) > -> `= List of ( cmt:<boolean> | rmid_max:<integer> )` > +> `= List of ( cmt:<boolean> | rmid_max:<integer> | cat:<boolean> | > num_sockets:<interger> )` > > -> Default: `psr=cmt:0,rmid_max:255` > +> Default: `psr=cmt:0,rmid_max:255,cat:0,num_sockets:0(Detect at boot time)` This "Detect at boot time" clearly doesn't belong on the "Default:" line. > @@ -1112,6 +1117,16 @@ The following resources are available: > total/local memory bandwidth. Follow the same options with Cache Monitoring > Technology. > > +* Cache Alllocation Technology (Broadwell and later). Information regarding > + the cache allocation. > + * `cat` instructs Xen to enable/disable Cache Allocation Technology. > + * `num_sockets` indicates the number of available sockets for CAT feature > + detection. All the sockets up to num_sockets will be checked for CAT > + feature. The value is normally detected at boot time automatically if not > + specified(0). While the value may need to be specified manually for CPU > + hot-plug scenario in which case the automatic sockets number detection > may > + be not correct. As mentioned before, the hotplug case should be taken care of as much as possible to avoid someone having to use the option. I.e. this ... > +static unsigned int get_max_socket(void) > +{ > + unsigned int cpu, socket = 0; > + > + for_each_present_cpu(cpu) > + if ( socket < cpu_to_socket(cpu) ) > + socket = cpu_to_socket(cpu); > + > + return socket; > +} ... is too simplistic. > @@ -204,9 +233,66 @@ void psr_ctxt_switch_to(struct domain *d) > psr_assoc_reg_write(psra, reg); > } > > +static void cat_cpu_init(unsigned int cpu) > +{ > + unsigned int eax, ebx, ecx, edx; > + struct psr_cat_socket_info *info; > + unsigned int socket; > + const struct cpuinfo_x86 *c; > + > + socket = cpu_to_socket(cpu); > + if ( socket >= opt_num_sockets ) > + { > + printk(XENLOG_WARNING "CAT: disabled on socket %d as num_sockets is > %d\n", > + socket, opt_num_sockets); > + return; > + } > + > + info = cat_socket_info + socket; > + > + /* Avoid initializing more than one times for the same socket. */ > + if ( test_and_set_bool(info->initialized) ) > + return; > + > + c = cpu_data + cpu; > + if ( !cpu_has(c, X86_FEATURE_CAT) ) > + return; > + > + cpuid_count(0x10, 0, &eax, &ebx, &ecx, &edx); > + if ( ebx & PSR_RESOURCE_TYPE_L3 ) > + { > + cpuid_count(0x10, 1, &eax, &ebx, &ecx, &edx); If numbers like the 0x10 here repeat, please give them names so one can associate all uses with one another. > static void psr_cpu_init(unsigned int cpu) > { > - psr_assoc_init(); > + if ( cat_socket_info ) > + cat_cpu_init(cpu); > + > + if ( psr_cmt_enabled() ) > + psr_assoc_init(); So the previous patch put the same conditional inside psr_assoc_init(). Please don't add such obviously redundant checks. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |