Messages in this thread | | | Subject | Re: [PATCH V2 01/10] x86/CPU: Expose if cache is inclusive of lower level caches | From | Reinette Chatre <> | Date | Tue, 6 Aug 2019 11:53:40 -0700 |
| |
Hi Borislav,
On 8/6/2019 11:33 AM, Borislav Petkov wrote: > On Tue, Aug 06, 2019 at 11:13:22AM -0700, Reinette Chatre wrote: >> Some platforms being enabled in this round have SKUs with inclusive >> cache and also SKUs with non-inclusive cache. The non-inclusive cache >> SKUs do not support cache pseudo-locking and cannot be made to support >> cache pseudo-locking with software changes. Needing to know if cache is >> inclusive or not will thus remain a requirement to distinguish between >> these different SKUs. Supporting cache pseudo-locking on platforms with >> non inclusive cache will require new hardware features. > > Is there another way/CPUID bit or whatever to tell us whether the > platform supports cache pseudo-locking or is the cache inclusivity the > only one?
Unfortunately there are no hardware bits that software can use to determine if cache pseudo-locking is supported. The way software currently determines if cache pseudo-locking is supported is through initialization of the hardware prefetch disable bits. Cache pseudo-locking requires the hardware prefetch bits to be disabled (during the locking flow only), those cannot be discovered either and thus software hardcodes the hardware prefetch disable bits only for those platforms that support cache pseudo-locking.
What you will see in the code is this:
int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp) { ...
prefetch_disable_bits = get_prefetch_disable_bits(); if (prefetch_disable_bits == 0) { rdt_last_cmd_puts("Pseudo-locking not supported\n"); return -EINVAL; } ... }
In get_prefetch_disable_bits() the platforms that support cache pseudo-locking are hardcoded as part of configuring the hardware prefetch disable bits to use.
The current problem is that an upcoming platform has this difference between SKUs so a single platform-wide decision is not sufficient.
Reinette
| |