Lines Matching refs:cpu
71 int cpu; in cpu_bringup() local
82 cpu = smp_processor_id(); in cpu_bringup()
83 smp_store_cpu_info(cpu); in cpu_bringup()
84 cpu_data(cpu).x86_max_cores = 1; in cpu_bringup()
85 set_cpu_sibling_map(cpu); in cpu_bringup()
89 notify_cpu_starting(cpu); in cpu_bringup()
91 set_cpu_online(cpu, true); in cpu_bringup()
93 cpu_set_state_online(cpu); /* Implies full memory barrier. */ in cpu_bringup()
104 asmlinkage __visible void cpu_bringup_and_idle(int cpu) in cpu_bringup_and_idle() argument
109 xen_pvh_secondary_vcpu_init(cpu); in cpu_bringup_and_idle()
115 static void xen_smp_intr_free(unsigned int cpu) in xen_smp_intr_free() argument
117 if (per_cpu(xen_resched_irq, cpu).irq >= 0) { in xen_smp_intr_free()
118 unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu).irq, NULL); in xen_smp_intr_free()
119 per_cpu(xen_resched_irq, cpu).irq = -1; in xen_smp_intr_free()
120 kfree(per_cpu(xen_resched_irq, cpu).name); in xen_smp_intr_free()
121 per_cpu(xen_resched_irq, cpu).name = NULL; in xen_smp_intr_free()
123 if (per_cpu(xen_callfunc_irq, cpu).irq >= 0) { in xen_smp_intr_free()
124 unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu).irq, NULL); in xen_smp_intr_free()
125 per_cpu(xen_callfunc_irq, cpu).irq = -1; in xen_smp_intr_free()
126 kfree(per_cpu(xen_callfunc_irq, cpu).name); in xen_smp_intr_free()
127 per_cpu(xen_callfunc_irq, cpu).name = NULL; in xen_smp_intr_free()
129 if (per_cpu(xen_debug_irq, cpu).irq >= 0) { in xen_smp_intr_free()
130 unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu).irq, NULL); in xen_smp_intr_free()
131 per_cpu(xen_debug_irq, cpu).irq = -1; in xen_smp_intr_free()
132 kfree(per_cpu(xen_debug_irq, cpu).name); in xen_smp_intr_free()
133 per_cpu(xen_debug_irq, cpu).name = NULL; in xen_smp_intr_free()
135 if (per_cpu(xen_callfuncsingle_irq, cpu).irq >= 0) { in xen_smp_intr_free()
136 unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu).irq, in xen_smp_intr_free()
138 per_cpu(xen_callfuncsingle_irq, cpu).irq = -1; in xen_smp_intr_free()
139 kfree(per_cpu(xen_callfuncsingle_irq, cpu).name); in xen_smp_intr_free()
140 per_cpu(xen_callfuncsingle_irq, cpu).name = NULL; in xen_smp_intr_free()
145 if (per_cpu(xen_irq_work, cpu).irq >= 0) { in xen_smp_intr_free()
146 unbind_from_irqhandler(per_cpu(xen_irq_work, cpu).irq, NULL); in xen_smp_intr_free()
147 per_cpu(xen_irq_work, cpu).irq = -1; in xen_smp_intr_free()
148 kfree(per_cpu(xen_irq_work, cpu).name); in xen_smp_intr_free()
149 per_cpu(xen_irq_work, cpu).name = NULL; in xen_smp_intr_free()
152 static int xen_smp_intr_init(unsigned int cpu) in xen_smp_intr_init() argument
157 resched_name = kasprintf(GFP_KERNEL, "resched%d", cpu); in xen_smp_intr_init()
159 cpu, in xen_smp_intr_init()
166 per_cpu(xen_resched_irq, cpu).irq = rc; in xen_smp_intr_init()
167 per_cpu(xen_resched_irq, cpu).name = resched_name; in xen_smp_intr_init()
169 callfunc_name = kasprintf(GFP_KERNEL, "callfunc%d", cpu); in xen_smp_intr_init()
171 cpu, in xen_smp_intr_init()
178 per_cpu(xen_callfunc_irq, cpu).irq = rc; in xen_smp_intr_init()
179 per_cpu(xen_callfunc_irq, cpu).name = callfunc_name; in xen_smp_intr_init()
181 debug_name = kasprintf(GFP_KERNEL, "debug%d", cpu); in xen_smp_intr_init()
182 rc = bind_virq_to_irqhandler(VIRQ_DEBUG, cpu, xen_debug_interrupt, in xen_smp_intr_init()
187 per_cpu(xen_debug_irq, cpu).irq = rc; in xen_smp_intr_init()
188 per_cpu(xen_debug_irq, cpu).name = debug_name; in xen_smp_intr_init()
190 callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu); in xen_smp_intr_init()
192 cpu, in xen_smp_intr_init()
199 per_cpu(xen_callfuncsingle_irq, cpu).irq = rc; in xen_smp_intr_init()
200 per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name; in xen_smp_intr_init()
209 callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu); in xen_smp_intr_init()
211 cpu, in xen_smp_intr_init()
218 per_cpu(xen_irq_work, cpu).irq = rc; in xen_smp_intr_init()
219 per_cpu(xen_irq_work, cpu).name = callfunc_name; in xen_smp_intr_init()
224 xen_smp_intr_free(cpu); in xen_smp_intr_init()
314 unsigned cpu; in xen_smp_prepare_cpus() local
348 for (cpu = nr_cpu_ids - 1; !cpu_possible(cpu); cpu--) in xen_smp_prepare_cpus()
350 set_cpu_possible(cpu, false); in xen_smp_prepare_cpus()
353 for_each_possible_cpu(cpu) in xen_smp_prepare_cpus()
354 set_cpu_present(cpu, true); in xen_smp_prepare_cpus()
358 cpu_initialize_context(unsigned int cpu, struct task_struct *idle) in cpu_initialize_context() argument
365 cpumask_set_cpu(cpu, cpu_callout_mask); in cpu_initialize_context()
366 if (cpumask_test_and_set_cpu(cpu, xen_cpu_initialized_map)) in cpu_initialize_context()
373 gdt = get_cpu_gdt_table(cpu); in cpu_initialize_context()
410 ctxt->gs_base_kernel = per_cpu_offset(cpu); in cpu_initialize_context()
417 per_cpu(xen_cr3, cpu) = __pa(swapper_pg_dir); in cpu_initialize_context()
427 ctxt->user_regs.rdi = cpu; in cpu_initialize_context()
433 if (HYPERVISOR_vcpu_op(VCPUOP_initialise, cpu, ctxt)) in cpu_initialize_context()
440 static int xen_cpu_up(unsigned int cpu, struct task_struct *idle) in xen_cpu_up() argument
444 common_cpu_up(cpu, idle); in xen_cpu_up()
446 xen_setup_runstate_info(cpu); in xen_cpu_up()
447 xen_setup_timer(cpu); in xen_cpu_up()
448 xen_init_lock_cpu(cpu); in xen_cpu_up()
454 rc = cpu_check_up_prepare(cpu); in xen_cpu_up()
459 per_cpu(xen_vcpu, cpu)->evtchn_upcall_mask = 1; in xen_cpu_up()
461 rc = cpu_initialize_context(cpu, idle); in xen_cpu_up()
465 rc = xen_smp_intr_init(cpu); in xen_cpu_up()
469 rc = HYPERVISOR_vcpu_op(VCPUOP_up, cpu, NULL); in xen_cpu_up()
472 while (cpu_report_state(cpu) != CPU_ONLINE) in xen_cpu_up()
485 unsigned int cpu = smp_processor_id(); in xen_cpu_disable() local
486 if (cpu == 0) in xen_cpu_disable()
495 static void xen_cpu_die(unsigned int cpu) in xen_cpu_die() argument
497 while (xen_pv_domain() && HYPERVISOR_vcpu_op(VCPUOP_is_up, cpu, NULL)) { in xen_cpu_die()
502 if (common_cpu_die(cpu) == 0) { in xen_cpu_die()
503 xen_smp_intr_free(cpu); in xen_cpu_die()
504 xen_uninit_lock_cpu(cpu); in xen_cpu_die()
505 xen_teardown_timer(cpu); in xen_cpu_die()
529 static void xen_cpu_die(unsigned int cpu) in xen_cpu_die() argument
542 int cpu = smp_processor_id(); in stop_self() local
548 set_cpu_online(cpu, false); in stop_self()
550 HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL); in stop_self()
559 static void xen_smp_send_reschedule(int cpu) in xen_smp_send_reschedule() argument
561 xen_send_IPI_one(cpu, XEN_RESCHEDULE_VECTOR); in xen_smp_send_reschedule()
567 unsigned cpu; in __xen_send_IPI_mask() local
569 for_each_cpu_and(cpu, mask, cpu_online_mask) in __xen_send_IPI_mask()
570 xen_send_IPI_one(cpu, vector); in __xen_send_IPI_mask()
575 int cpu; in xen_smp_send_call_function_ipi() local
580 for_each_cpu(cpu, mask) { in xen_smp_send_call_function_ipi()
581 if (xen_vcpu_stolen(cpu)) { in xen_smp_send_call_function_ipi()
588 static void xen_smp_send_call_function_single_ipi(int cpu) in xen_smp_send_call_function_single_ipi() argument
590 __xen_send_IPI_mask(cpumask_of(cpu), in xen_smp_send_call_function_single_ipi()
654 unsigned cpu; in xen_send_IPI_mask_allbutself() local
661 for_each_cpu_and(cpu, mask, cpu_online_mask) { in xen_send_IPI_mask_allbutself()
662 if (this_cpu == cpu) in xen_send_IPI_mask_allbutself()
665 xen_send_IPI_one(cpu, xen_vector); in xen_send_IPI_mask_allbutself()
735 static int xen_hvm_cpu_up(unsigned int cpu, struct task_struct *tidle) in xen_hvm_cpu_up() argument
743 if (cpu_report_state(cpu) == CPU_DEAD_FROZEN) { in xen_hvm_cpu_up()
744 xen_smp_intr_free(cpu); in xen_hvm_cpu_up()
745 xen_uninit_lock_cpu(cpu); in xen_hvm_cpu_up()
753 rc = xen_smp_intr_init(cpu); in xen_hvm_cpu_up()
756 rc = native_cpu_up(cpu, tidle); in xen_hvm_cpu_up()
765 xen_init_lock_cpu(cpu); in xen_hvm_cpu_up()