From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Peng Subject: Re: [PATCH v8 02/13] x86: detect and initialize Intel CAT feature Date: Fri, 29 May 2015 10:40:16 +0800 Message-ID: <20150529024016.GB18422@pengc-linux.bj.intel.com> References: <1432197704-20816-1-git-send-email-chao.p.peng@linux.intel.com> <1432197704-20816-3-git-send-email-chao.p.peng@linux.intel.com> <55672C2F020000780007E960@mail.emea.novell.com> Reply-To: Chao Peng Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <55672C2F020000780007E960@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: wei.liu2@citrix.com, Ian.Campbell@citrix.com, stefano.stabellini@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, Ian.Jackson@eu.citrix.com, xen-devel@lists.xen.org, will.auld@intel.com, keir@xen.org, dgdegra@tycho.nsa.gov List-Id: xen-devel@lists.xenproject.org On Thu, May 28, 2015 at 01:54:39PM +0100, Jan Beulich wrote: > >>> On 21.05.15 at 10:41, wrote: > > + > > + if ( !cpu_has(c, X86_FEATURE_CAT) ) > > + return; > > + > > + socket = cpu_to_socket(cpu); > > + if ( test_bit(socket, cat_socket_enable) ) > > + return; > > + > > + cpuid_count(PSR_CPUID_LEVEL_CAT, 0, &eax, &ebx, &ecx, &edx); > > While one would hope that X86_FEATURE_CAT implies the respective > CPUID leaf being available, I think explicitly checking this should still > be done just like is the case elsewhere. Against cpuid_level? > > > + if ( ebx & PSR_RESOURCE_TYPE_L3 ) > > + { > > + cpuid_count(PSR_CPUID_LEVEL_CAT, 1, &eax, &ebx, &ecx, &edx); > > + info = cat_socket_info + socket; > > + info->cbm_len = (eax & 0x1f) + 1; > > + info->cos_max = min(opt_cos_max, edx & 0xffff); > > + > > + set_bit(socket, cat_socket_enable); > > + printk(XENLOG_INFO "CAT: enabled on socket %u, cos_max:%u, cbm_len:%u\n", > > + socket, info->cos_max, info->cbm_len); > > + } > > +} > > + > > +static void cat_cpu_fini(unsigned int cpu) > > +{ > > + unsigned int socket = cpu_to_socket(cpu); > > + > > + if ( !socket_cpumask[socket] || cpumask_empty(socket_cpumask[socket]) ) > > + clear_bit(socket, cat_socket_enable); > > +} > > This being called from the CPU_DEAD notification, you now depend > on cpu_smpboot_free) to run ahead of you. Which isn't the case > afaict, and even if it happened to be that way you shouldn't rely > on it without explicitly enforcing ordering between the two by > setting the priority of on of them to a non-default value. Yes, seems changing the priority of psr_cpu_callback to 1 is enough. > > > +static void __init init_psr_cat(void) > > +{ > > + if ( opt_cos_max < 1 ) > > + { > > + printk(XENLOG_INFO "CAT: disabled, cos_max is too small\n"); > > + return; > > + } > > Is opt_cos_max == 1 really useful for anything? That means two COSes are available. cos=0 is reserved and cos=1 can still be used anyway. Chao