Hi Fenghua, On 28/08/2025 02:29, Fenghua Yu wrote: > On 8/22/25 08:29, James Morse wrote: >> An MSC is a container of resources, each identified by their RIS index. >> Some RIS are described by firmware to provide their position in the system. >> Others are discovered when the driver probes the hardware. >> >> To configure a resource it needs to be found by its class, e.g. 'L2'. >> There are two kinds of grouping, a class is a set of components, which >> are visible to user-space as there are likely to be multiple instances >> of the L2 cache. (e.g. one per cluster or package) >> >> struct mpam_components are a set of struct mpam_vmsc. A vMSC groups the >> RIS in an MSC that control the same logical piece of hardware. (e.g. L2). >> This is to allow hardware implementations where two controls are presented >> as different RIS. Re-combining these RIS allows their feature bits to >> be or-ed. This structure is not visible outside mpam_devices.c >> >> struct mpam_vmsc are then a set of struct mpam_msc_ris, which are not >> visible as each L2 cache may be composed of individual slices which need >> to be configured the same as the hardware is not able to distribute the >> configuration. >> >> Add support for creating and destroying these structures. >> >> A gfp is passed as the structures may need creating when a new RIS entry >> is discovered when probing the MSC. >> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c >> index 71a1fb1a9c75..5baf2a8786fb 100644 >> --- a/drivers/resctrl/mpam_devices.c >> +++ b/drivers/resctrl/mpam_devices.c > [SNIP] >> +static struct mpam_vmsc * >> +mpam_vmsc_alloc(struct mpam_component *comp, struct mpam_msc *msc, gfp_t gfp) >> +{ >> + struct mpam_vmsc *vmsc; >> + >> + lockdep_assert_held(&mpam_list_lock); >> + >> + vmsc = kzalloc(sizeof(*vmsc), gfp); >> + if (!comp) > > s/if (!cmp)/if (!vmsc)/ > > >> + return ERR_PTR(-ENOMEM); Yup, that's a copy-and-paste typo. Fixed, Thanks, James