[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <jhjk10oi33m.mognet@arm.com>
Date: Wed, 03 Jun 2020 16:25:01 +0100
From: Valentin Schneider <valentin.schneider@....com>
To: Benjamin Gaignard <benjamin.gaignard@...com>
Cc: hugues.fruchet@...com, mchehab@...nel.org,
mcoquelin.stm32@...il.com, alexandre.torgue@...com,
linux-media@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
vincent.guittot@...aro.org, rjw@...ysocki.net
Subject: Re: [PATCH v2 2/3] media: stm32-dcmi: Set minimum cpufreq requirement
On 03/06/20 13:45, Benjamin Gaignard wrote:
> +static void dcmi_set_min_frequency(struct stm32_dcmi *dcmi, u64 freq)
> +{
> + struct cpufreq_policy *p;
> + int cpu;
> +
> + for_each_cpu(cpu, irq_get_affinity_mask(dcmi->irq)) {
> + p = per_cpu(policy, cpu);
> + if (!p)
> + continue;
> +
> + freq_qos_update_request(&per_cpu(qos_req, cpu), freq);
> + }
> +}
> +
You may want to use a "visited" cpumask as I suggested in the previous
thread, since a policy can cover more than one CPU (IOW, a frequency domain
can span more than one CPU). It's not required per-se, AFAICT, but it makes
things a bit neater.
I also think you'll have to use the affinity notifier
(irq_set_affinity_notifier()), since AFAICT userspace can change the
affinity of that IRQ. I suppose you'll want something like:
- Check if we currently are in streaming mode
- Clear the QoS request for CPUs that were previously boosted but that
aren't in the new mask
- Add the request for the new CPUs.
You'll probably need serialize the reading of the mask in the regular
dcmi_set_min_frequency() as well. I concur all of that is somewhat
annoying, but AFAICT that's required for a sturdy implementation.
> static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
> {
> struct stm32_dcmi *dcmi = vb2_get_drv_priv(vq);
Powered by blists - more mailing lists