|
@@ -771,14 +771,16 @@ static int rdt_shareable_bits_show(struct kernfs_open_file *of,
|
|
|
* H - currently used by hardware only but available for software use
|
|
|
* S - currently used and shareable by software only
|
|
|
* E - currently used exclusively by one resource group
|
|
|
+ * P - currently pseudo-locked by one resource group
|
|
|
*/
|
|
|
static int rdt_bit_usage_show(struct kernfs_open_file *of,
|
|
|
struct seq_file *seq, void *v)
|
|
|
{
|
|
|
struct rdt_resource *r = of->kn->parent->priv;
|
|
|
- u32 sw_shareable, hw_shareable, exclusive;
|
|
|
+ u32 sw_shareable = 0, hw_shareable = 0;
|
|
|
+ u32 exclusive = 0, pseudo_locked = 0;
|
|
|
struct rdt_domain *dom;
|
|
|
- int i, hwb, swb, excl;
|
|
|
+ int i, hwb, swb, excl, psl;
|
|
|
enum rdtgrp_mode mode;
|
|
|
bool sep = false;
|
|
|
u32 *ctrl;
|
|
@@ -803,12 +805,15 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
|
|
|
case RDT_MODE_EXCLUSIVE:
|
|
|
exclusive |= *ctrl;
|
|
|
break;
|
|
|
+ case RDT_MODE_PSEUDO_LOCKSETUP:
|
|
|
/*
|
|
|
- * Temporarily handle pseudo-locking enums
|
|
|
- * to silence compile warnings until handling
|
|
|
- * added in later patches.
|
|
|
+ * RDT_MODE_PSEUDO_LOCKSETUP is possible
|
|
|
+ * here but not included since the CBM
|
|
|
+ * associated with this CLOSID in this mode
|
|
|
+ * is not initialized and no task or cpu can be
|
|
|
+ * assigned this CLOSID.
|
|
|
*/
|
|
|
- case RDT_MODE_PSEUDO_LOCKSETUP:
|
|
|
+ break;
|
|
|
case RDT_MODE_PSEUDO_LOCKED:
|
|
|
case RDT_NUM_MODES:
|
|
|
WARN(1,
|
|
@@ -817,9 +822,11 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
|
|
|
}
|
|
|
}
|
|
|
for (i = r->cache.cbm_len - 1; i >= 0; i--) {
|
|
|
+ pseudo_locked = dom->plr ? dom->plr->cbm : 0;
|
|
|
hwb = test_bit(i, (unsigned long *)&hw_shareable);
|
|
|
swb = test_bit(i, (unsigned long *)&sw_shareable);
|
|
|
excl = test_bit(i, (unsigned long *)&exclusive);
|
|
|
+ psl = test_bit(i, (unsigned long *)&pseudo_locked);
|
|
|
if (hwb && swb)
|
|
|
seq_putc(seq, 'X');
|
|
|
else if (hwb && !swb)
|
|
@@ -828,6 +835,8 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
|
|
|
seq_putc(seq, 'S');
|
|
|
else if (excl)
|
|
|
seq_putc(seq, 'E');
|
|
|
+ else if (psl)
|
|
|
+ seq_putc(seq, 'P');
|
|
|
else /* Unused bits remain */
|
|
|
seq_putc(seq, '0');
|
|
|
}
|
|
@@ -1147,6 +1156,15 @@ static int rdtgroup_size_show(struct kernfs_open_file *of,
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
|
|
|
+ if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) {
|
|
|
+ seq_printf(s, "%*s:", max_name_width, rdtgrp->plr->r->name);
|
|
|
+ size = rdtgroup_cbm_to_size(rdtgrp->plr->r,
|
|
|
+ rdtgrp->plr->d,
|
|
|
+ rdtgrp->plr->cbm);
|
|
|
+ seq_printf(s, "%d=%u\n", rdtgrp->plr->d->id, size);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
for_each_alloc_enabled_rdt_resource(r) {
|
|
|
seq_printf(s, "%*s:", max_name_width, r->name);
|
|
|
list_for_each_entry(d, &r->domains, list) {
|
|
@@ -1164,6 +1182,7 @@ static int rdtgroup_size_show(struct kernfs_open_file *of,
|
|
|
seq_putc(s, '\n');
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
rdtgroup_kn_unlock(of->kn);
|
|
|
|
|
|
return 0;
|