|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 04/11] x86/intel_pstate: relocate the driver register function
>>> On 11.06.15 at 10:27, <wei.w.wang@xxxxxxxxx> wrote:
> Register the CPU hotplug notifier when the driver is
> registered, and move the driver register function to
> the cpufreq.c.
The first half of the sentence fails to say why. And I suppose if you
explained that (to yourself) you'd figure that the change is wrong (or
at least altering behavior in a way that needs more explanation to
be verifiably correct): The calls to cpufreq_register_driver() sit in
__initcall handlers, yet what you replace is a presmp_initcall. I.e. all
APs being brought up at boot time won't get the callback invoked for
them anymore.
I suppose you tested your series on a system where the new driver
will kick in. You of course also need to test the case where this isn't
the case - everything needs to continue to function there.
> --- a/xen/drivers/cpufreq/cpufreq.c
> +++ b/xen/drivers/cpufreq/cpufreq.c
> @@ -630,12 +630,21 @@ static struct notifier_block cpu_nfb = {
> .notifier_call = cpu_callback
> };
>
> -static int __init cpufreq_presmp_init(void)
> +int cpufreq_register_driver(struct cpufreq_driver *driver_data)
> {
> void *cpu = (void *)(long)smp_processor_id();
> cpu_callback(&cpu_nfb, CPU_ONLINE, cpu);
> + if (!driver_data || !driver_data->init
> + || !driver_data->verify || !driver_data->exit
> + || (!driver_data->target == !driver_data->setpolicy))
Do you really want/need to enforce this policy (target set if and only
if setpolicy is not set) here? And if that's to uniformly hold, the two
could be put into a union...
Also - coding style.
> --- a/xen/include/acpi/cpufreq/cpufreq.h
> +++ b/xen/include/acpi/cpufreq/cpufreq.h
> @@ -171,32 +171,8 @@ struct cpufreq_driver {
>
> extern struct cpufreq_driver *cpufreq_driver;
>
> -static __inline__
> -int cpufreq_register_driver(struct cpufreq_driver *driver_data)
> -{
> - if (!driver_data ||
> - !driver_data->init ||
> - !driver_data->exit ||
> - !driver_data->verify ||
> - !driver_data->target)
> - return -EINVAL;
> -
> - if (cpufreq_driver)
> - return -EBUSY;
> -
> - cpufreq_driver = driver_data;
> - return 0;
> -}
> -
> -static __inline__
> -int cpufreq_unregister_driver(struct cpufreq_driver *driver)
> -{
> - if (!cpufreq_driver || (driver != cpufreq_driver))
> - return -EINVAL;
> -
> - cpufreq_driver = NULL;
> - return 0;
> -}
> +extern int cpufreq_register_driver(struct cpufreq_driver *driver_data);
> +extern int cpufreq_unregister_driver(struct cpufreq_driver *driver);
What's this declaration good for when there's no implementation?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |