Hi Ashutosh, > > +static ssize_t > > +default_min_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) > > +{ > > + struct intel_gt *gt = kobj_to_gt(kobj->parent); > > + > > + return sysfs_emit(buf, "%d\n", gt->rps_defaults.min_freq); I guess this is %u. > > +} > > + > > +static struct kobj_attribute default_min_freq_mhz = > > +__ATTR(rps_min_freq_mhz, 0444, default_min_freq_mhz_show, NULL); > > + > > +static ssize_t > > +default_max_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) > > +{ > > + struct intel_gt *gt = kobj_to_gt(kobj->parent); > > + > > + return sysfs_emit(buf, "%d\n", gt->rps_defaults.max_freq); > > +} > > + > > +static struct kobj_attribute default_max_freq_mhz = > > +__ATTR(rps_max_freq_mhz, 0444, default_max_freq_mhz_show, NULL); > > + > > +static ssize_t > > +default_boost_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) > > +{ > > + struct intel_gt *gt = kobj_to_gt(kobj->parent); > > + > > + return sysfs_emit(buf, "%d\n", gt->rps_defaults.boost_freq); > > +} > > + > > +static struct kobj_attribute default_boost_freq_mhz = > > +__ATTR(rps_boost_freq_mhz, 0444, default_boost_freq_mhz_show, NULL); > > + > > +static const struct attribute * const rps_defaults_attrs[] = { > > + &default_min_freq_mhz.attr, > > + &default_max_freq_mhz.attr, > > + &default_boost_freq_mhz.attr, > > + NULL > > +}; Do you think this in the default group of kobj_gt_type like the gt_id? [...] > > +struct intel_rps_defaults { > > + u32 min_freq; > > + u32 max_freq; > > + u32 boost_freq; > > +}; > > + > > enum intel_submission_method { > > INTEL_SUBMISSION_RING, > > INTEL_SUBMISSION_ELSP, > > @@ -227,6 +233,10 @@ struct intel_gt { > > /* gt/gtN sysfs */ > > struct kobject sysfs_gt; > > + > > + /* sysfs defaults per gt */ > > + struct intel_rps_defaults rps_defaults; more of a matter of taste, but this looks natural to me to be in rps rather then in the gt. [...] Andi