[Intel-xe] [PATCH 1/2] drm/xe: add a new sysfs directory for gtidle properties

Andi Shyti andi.shyti at linux.intel.com
Thu Jun 15 09:49:14 UTC 2023


Hi Riana,

> > > +static u64 get_residency_ms(struct xe_gt_idle *gtidle, u64 cur_residency)
> > > +{
> > > +	u64 delta, overflow_residency, prev_residency;
> > > +
> > > +	overflow_residency = BIT_ULL(32);
> > > +
> > > +	/*
> > > +	 * Counter wrap handling
> > > +	 * Store previous hw counter values for counter wrap-around handling
> > > +	 * Relying on sufficient frequency of queries otherwise counters can still wrap.
> > > +	 */
> > > +	prev_residency = gtidle->prev_residency;
> > > +	gtidle->prev_residency = cur_residency;
> > > +
> > > +	/* delta */
> > > +	if (cur_residency >= prev_residency)
> > > +		delta = cur_residency - prev_residency;
> > > +	else
> > > +		delta = cur_residency + (overflow_residency - prev_residency);
> > > +
> > > +	/* Add delta to extended raw driver copy of idle residency */
> > > +	cur_residency = gtidle->cur_residency + delta;
> > > +	gtidle->cur_residency = cur_residency;
> > > +
> > > +	/* residency multiplier in ns, convert to ms */
> > > +	cur_residency = mul_u64_u32_div(cur_residency, gtidle->residency_multiplier, 1e6);
> > 
> > do we need to lock something here? Looks a bit racy to me.

> seq_read_iter takes a lock while calling sysfs_show
> https://elixir.bootlin.com/linux/latest/source/fs/seq_file.c#L171
> 
> This function is used only by idle_residency_show. So didn't add the lock

I was just thinking a lock around gtidle. the m->lock from
seq_read_iter is loking on the seq_file m so that consecutive
reads/writes cannot be made.

If gtidle is not used anywhere else, then I guess locking is
safe and for now "struct xe_gt_idle" is in sysfs (but still in
the xe_gt).

Andi

> > > +	return cur_residency;
> > > +}


More information about the Intel-xe mailing list