Subject: [PATCH v3 3/3] xen/arm: don't try to re-register vcpu_info on cpu_hotplug.

From: [email-masked] (Julien Grall)
Date: Mon, 19 Oct 2015 18:01:47 +0100

Hi Stefano,

On 19/10/15 17:55, Stefano Stabellini wrote:
> diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
> index 6c09cc4..074b1a2 100644
> --- a/arch/arm/xen/enlighten.c
> +++ b/arch/arm/xen/enlighten.c
> @@ -93,6 +93,17 @@ static void xen_percpu_init(void)
>  	int err;
>  	int cpu = get_cpu();
>  
> +	/* 
> +	 * VCPUOP_register_vcpu_info cannot be called twice for the same
> +	 * vcpu, so if vcpu_info is already registered, just get out. This
> +	 * can happen with cpu-hotplug.
> +	 */
> +	if (per_cpu(xen_vcpu, cpu) != NULL) {
> +		enable_percpu_irq(xen_events_irq, 0);
> +		put_cpu();
> +		return;

I might be too picky, but this function can be reworked to avoid
duplicating the code. Something like:

if (per_cpu(xen_vcpu, cpu) != NULL)
  goto skip_register_vcpu;

> +	}
> +
>  	pr_info("Xen: initializing cpu%d\n", cpu);
>  	vcpup = per_cpu_ptr(xen_vcpu_info, cpu);
>  
> @@ -131,6 +142,9 @@ static int xen_cpu_notification(struct notifier_block *self,
>  	case CPU_STARTING:
>  		xen_percpu_init();
>  		break;
> +	case CPU_DYING:
> +		disable_percpu_irq(xen_events_irq);
> +		break;
>  	default:
>  		break;
>  	}
> 

-- 
Julien Grall