[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.