Quoting Viresh Kumar (2013-08-01 22:02:37) > More lists cc'd > > On Thu, Aug 1, 2013 at 6:08 PM, Michael Giardino > <giardino@xxxxxxxxxxxxxx> wrote: > > Hi, > > > > I hope this is the right spot to ask this. > > > > Is there any way to change the cpu frequency using the cpufreq driver > > from within an hrtimer callback function? I encounter a kernel panic > > at cpufreq.c line 255 (260 in 3.9.5) It is not just about the notifiers. Performing a clock rate change and voltage regulator transition (DVFS) is not a short operation on many ARM platforms. Relocking a PLL and waiting for a regulator to step and stabilize can take well over 100 milliseconds and some of those functions might sleep. Some ARM platform do not manage this directly and talk to a power management micro controller, so we could probably do that with interrupts disabled if it's just a matter of writing to some memory-mapped registers. I don't know how Intel does it with ACPI but I assume that they don't block waiting for things to happen based on a recent G+ post I read[1]. I have even less of a clue how the other architectures out there do it. So the question in general is whether we should assume that we may sleep or block during a CPU frequency scaling operation. The short answer seems to be "yes" since some platforms need this today. Perhaps CPUfreq could allow for differentiating between platforms that need to sleep/block and those that do not? Regards, Mike [1] https://plus.google.com/114657443111661859546/posts/dLn9T4ehywL > > > > void __cpufreq_notify_transition(struct cpufreq_policy *policy, > > 253 struct cpufreq_freqs *freqs, unsigned int state) > > 254 { > > 255 BUG_ON(irqs_disabled()); > > > > > > I'm assuming this is due to the cpufreq_notify_transition needs > > interrupts to notify? Is there a way around this? It appears that > > acpi-cpufreq.c is calling the notifier both before and after the > > transition (CPUFREQ_PRECHANGE and CPUFREQ_POSTCHANGE). > > > > Are there any frequency change functions that can operate without interrupts? > > > > The background is this: > > > > For the past few days I have been trying to get to the bottom of a > > problem involving a nonSMP governor I have written. The goal of this > > governor is to change the frequency on a predefined schedule (in the > > ms scale). The basic breakdown is this: > > > > 1. The external scheduler computes schedules and then passes them to > > the governor (with much code appropriated from the userspace governor) > > via an exported function. > > 2. The governor sets the frequency, then sets a timer to call the next > > frequency change when it goes off > > > > In order to do this, I was using hrtimers. These timer's callback > > functions run with interrupts disabled. > > > > Michael Giardino > > <giardino@xxxxxxxxxxxxxx> > > <michael.giardino@xxxxxxxxx> > > -- > > To unsubscribe from this list: send the line "unsubscribe cpufreq" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > _______________________________________________ > linaro-kernel mailing list > linaro-kernel@xxxxxxxxxxxxxxxx > http://lists.linaro.org/mailman/listinfo/linaro-kernel -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html