On Mon, 17 Oct 2016, Fenghua Yu wrote: > On Mon, Oct 17, 2016 at 03:45:32PM +0200, Thomas Gleixner wrote: > > I wonder whether this is the proper abstraction level. We might as well do > > the following: > > > > rdtresources[] = { > > { > > .name = "L3", > > }, > > { > > .name = "L3Data", > > }, > > { > > .name = "L3Code", > > }, > > > > and enable either L3 or L3Data+L3Code. Not sure if that makes things > > simpler, but it's definitely worth a thought or two. > > This way will be better than having cdp_enabled/capable for L3 and not > for L2.
So you need to change the struct to have capable and enabled > > static void rdt_get_config(int idx, struct rdt_resource *r) > > { > > union cpuid_0x10_1_eax eax; > > union cpuid_0x10_1_edx edx; > > u32 ebx, ecx; > > > > cpuid_count(0x00000010, idx, &eax.full, &ebx, &ecx, &edx.full); > > r->max_closid = edx.split.cos_max + 1; > > r->num_closid = r->max_closid; > > r->cbm_len = eax.split.cbm_len + 1; > > r->max_cbm = BIT_MASK(eax.split.cbm_len + 1) - 1; > > r->enabled = true; And set r->capable = true; here instead of r->enabled and set r->enabled at mount time for the resources depending on the mount flags. Thanks, tglx