On Wed, Nov 19, 2025 at 01:38:24PM +0530, Shrikanth Hegde wrote: > Hi Greg. > > On 11/19/25 1:12 PM, Greg KH wrote: > > On Wed, Nov 19, 2025 at 11:50:59AM +0530, Shrikanth Hegde wrote: > > > This is helper patch which could be used to set the range of CPUs as > > > paravirt. One could make use of this for quick testing of this infra > > > instead of writing arch specific code. > > > > > > This is currently not meant be merged, since paravirt sysfs file is meant > > > to be Read-Only. > > > > > > echo 100-200,600-700 > /sys/devices/system/cpu/paravirt > > > cat /sys/devices/system/cpu/paravirt > > > 100-200,600-700 > > > > > > echo > /sys/devices/system/cpu/paravirt > > > cat /sys/devices/system/cpu/paravirt > > > > > > Signed-off-by: Shrikanth Hegde <[email protected]> > > > --- > > > drivers/base/cpu.c | 48 ++++++++++++++++++++++++++++++++++++++++++++-- > > > 1 file changed, 46 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c > > > index 59ceae217b22..043e4f4ce1a9 100644 > > > --- a/drivers/base/cpu.c > > > +++ b/drivers/base/cpu.c > > > @@ -375,12 +375,57 @@ static int cpu_uevent(const struct device *dev, > > > struct kobj_uevent_env *env) > > > #endif > > > #ifdef CONFIG_PARAVIRT > > > +static ssize_t store_paravirt_cpus(struct device *dev, > > > + struct device_attribute *attr, > > > + const char *buf, size_t count) > > > +{ > > > + cpumask_var_t temp_mask; > > > + int retval = 0; > > > + > > > + if (!alloc_cpumask_var(&temp_mask, GFP_KERNEL)) > > > + return -ENOMEM; > > > + > > > + retval = cpulist_parse(buf, temp_mask); > > > + if (retval) > > > + goto free_mask; > > > + > > > + /* ALL cpus can't be marked as paravirt */ > > > + if (cpumask_equal(temp_mask, cpu_online_mask)) { > > > + retval = -EINVAL; > > > + goto free_mask; > > > + } > > > + if (cpumask_weight(temp_mask) > num_online_cpus()) { > > > + retval = -EINVAL; > > > + goto free_mask; > > > + } > > > + > > > + /* No more paravirt cpus */ > > > + if (cpumask_empty(temp_mask)) { > > > + cpumask_copy((struct cpumask *)&__cpu_paravirt_mask, temp_mask); > > > + } else { > > > + cpumask_copy((struct cpumask *)&__cpu_paravirt_mask, temp_mask); > > > + > > > + /* Enable tick on nohz_full cpu */ > > > + int cpu; > > > + for_each_cpu(cpu, temp_mask) { > > > + if (tick_nohz_full_cpu(cpu)) > > > + tick_nohz_dep_set_cpu(cpu, TICK_DEP_BIT_SCHED); > > > + } > > > + } > > > + > > > + retval = count; > > > + > > > +free_mask: > > > + free_cpumask_var(temp_mask); > > > + return retval; > > > +} > > > + > > > static ssize_t print_paravirt_cpus(struct device *dev, > > > struct device_attribute *attr, char > > > *buf) > > > { > > > return sysfs_emit(buf, "%*pbl\n", > > > cpumask_pr_args(cpu_paravirt_mask)); > > > } > > > -static DEVICE_ATTR(paravirt, 0444, print_paravirt_cpus, NULL); > > > +static DEVICE_ATTR(paravirt, 0644, print_paravirt_cpus, > > > store_paravirt_cpus); > > > > DEVICE_ATTR_RW()? > > ok. > > > > > And where is the documentation update for this sysfs file change? > > > > [RFC PATCH v4 11/17] has the documentation of this sysfs file. > https://lore.kernel.org/all/[email protected]/
So a rfc patch has the documentation for a change that you don't want to have applied? This is an odd series, how are we supposed to review this? > This is a helper patch. This helps to verify functionality of any combination > of CPUs being marked as paravirt which helped me to test some corner cases. I don't think I have ever seen a "helper patch" to know what to do with it :( thanks, greg k-h
