[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: small fixes to pcpu platform op handling



On 24/11/2011 16:27, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:

> XENPF_get_cpuinfo should init the flags output field rather than only
> modify it.
> 
> XENPF_cpu_online must check for the input CPU number to be in range.
> 
> XENPF_cpu_offline must also do that, and should also reject attempts to
> offline CPU 0 (this fails in cpu_down() too, but preventing this here
> appears more correct given that the code here calls
> continue_hypercall_on_cpu(0, ...), which would be flawed if cpu_down()
> would ever allow bringing down CPU 0 (and a distinct error code is
> easier to deal with when debugging issues).
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- a/xen/arch/x86/platform_hypercall.c
> +++ b/xen/arch/x86/platform_hypercall.c
> @@ -449,13 +449,14 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>          if ( (g_info->xen_cpuid >= nr_cpu_ids) ||
>               !cpu_present(g_info->xen_cpuid) )
>          {
> -            g_info->flags |= XEN_PCPU_FLAGS_INVALID;
> +            g_info->flags = XEN_PCPU_FLAGS_INVALID;
>          }
>          else
>          {
>              g_info->apic_id = x86_cpu_to_apicid[g_info->xen_cpuid];
>              g_info->acpi_id = acpi_get_processor_id(g_info->xen_cpuid);
>              ASSERT(g_info->apic_id != BAD_APICID);
> +            g_info->flags = 0;
>              if (cpu_online(g_info->xen_cpuid))
>                  g_info->flags |= XEN_PCPU_FLAGS_ONLINE;
>          }
> @@ -472,7 +473,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>      {
>          int cpu = op->u.cpu_ol.cpuid;
>  
> -        if ( !cpu_present(cpu) )
> +        if ( cpu >= nr_cpu_ids || !cpu_present(cpu) )
>          {
>              ret = -EINVAL;
>              break;
> @@ -493,7 +494,13 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>      {
>          int cpu = op->u.cpu_ol.cpuid;
>  
> -        if ( !cpu_present(cpu) )
> +        if ( cpu == 0 )
> +        {
> +            ret = -EOPNOTSUPP;
> +            break;
> +        }
> +
> +        if ( cpu >= nr_cpu_ids || !cpu_present(cpu) )
>          {
>              ret = -EINVAL;
>              break;
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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