diff options
| -rw-r--r-- | arch/arm/xen/enlighten.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 3dfa2b5c787d..13609e01f4b7 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c | |||
| @@ -152,11 +152,12 @@ int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, | |||
| 152 | } | 152 | } |
| 153 | EXPORT_SYMBOL_GPL(xen_unmap_domain_mfn_range); | 153 | EXPORT_SYMBOL_GPL(xen_unmap_domain_mfn_range); |
| 154 | 154 | ||
| 155 | static int __init xen_secondary_init(unsigned int cpu) | 155 | static void __init xen_percpu_init(void *unused) |
| 156 | { | 156 | { |
| 157 | struct vcpu_register_vcpu_info info; | 157 | struct vcpu_register_vcpu_info info; |
| 158 | struct vcpu_info *vcpup; | 158 | struct vcpu_info *vcpup; |
| 159 | int err; | 159 | int err; |
| 160 | int cpu = get_cpu(); | ||
| 160 | 161 | ||
| 161 | pr_info("Xen: initializing cpu%d\n", cpu); | 162 | pr_info("Xen: initializing cpu%d\n", cpu); |
| 162 | vcpup = per_cpu_ptr(xen_vcpu_info, cpu); | 163 | vcpup = per_cpu_ptr(xen_vcpu_info, cpu); |
| @@ -168,7 +169,7 @@ static int __init xen_secondary_init(unsigned int cpu) | |||
| 168 | BUG_ON(err); | 169 | BUG_ON(err); |
| 169 | per_cpu(xen_vcpu, cpu) = vcpup; | 170 | per_cpu(xen_vcpu, cpu) = vcpup; |
| 170 | 171 | ||
| 171 | return 0; | 172 | enable_percpu_irq(xen_events_irq, 0); |
| 172 | } | 173 | } |
| 173 | 174 | ||
| 174 | static void xen_restart(char str, const char *cmd) | 175 | static void xen_restart(char str, const char *cmd) |
| @@ -204,7 +205,6 @@ static int __init xen_guest_init(void) | |||
| 204 | const char *version = NULL; | 205 | const char *version = NULL; |
| 205 | const char *xen_prefix = "xen,xen-"; | 206 | const char *xen_prefix = "xen,xen-"; |
| 206 | struct resource res; | 207 | struct resource res; |
| 207 | int i; | ||
| 208 | 208 | ||
| 209 | node = of_find_compatible_node(NULL, NULL, "xen,xen"); | 209 | node = of_find_compatible_node(NULL, NULL, "xen,xen"); |
| 210 | if (!node) { | 210 | if (!node) { |
| @@ -261,8 +261,6 @@ static int __init xen_guest_init(void) | |||
| 261 | sizeof(struct vcpu_info)); | 261 | sizeof(struct vcpu_info)); |
| 262 | if (xen_vcpu_info == NULL) | 262 | if (xen_vcpu_info == NULL) |
| 263 | return -ENOMEM; | 263 | return -ENOMEM; |
| 264 | for_each_online_cpu(i) | ||
| 265 | xen_secondary_init(i); | ||
| 266 | 264 | ||
| 267 | gnttab_init(); | 265 | gnttab_init(); |
| 268 | if (!xen_initial_domain()) | 266 | if (!xen_initial_domain()) |
| @@ -287,11 +285,6 @@ static irqreturn_t xen_arm_callback(int irq, void *arg) | |||
| 287 | return IRQ_HANDLED; | 285 | return IRQ_HANDLED; |
| 288 | } | 286 | } |
| 289 | 287 | ||
| 290 | static __init void xen_percpu_enable_events(void *unused) | ||
| 291 | { | ||
| 292 | enable_percpu_irq(xen_events_irq, 0); | ||
| 293 | } | ||
| 294 | |||
| 295 | static int __init xen_init_events(void) | 288 | static int __init xen_init_events(void) |
| 296 | { | 289 | { |
| 297 | if (!xen_domain() || xen_events_irq < 0) | 290 | if (!xen_domain() || xen_events_irq < 0) |
| @@ -305,7 +298,7 @@ static int __init xen_init_events(void) | |||
| 305 | return -EINVAL; | 298 | return -EINVAL; |
| 306 | } | 299 | } |
| 307 | 300 | ||
| 308 | on_each_cpu(xen_percpu_enable_events, NULL, 0); | 301 | on_each_cpu(xen_percpu_init, NULL, 0); |
| 309 | 302 | ||
| 310 | return 0; | 303 | return 0; |
| 311 | } | 304 | } |
