Lines Matching refs:pcpu

79 struct pcpu {
88 static struct pcpu pcpu_devices[NR_CPUS];
119 * member of a pcpu data structure within the pcpu_devices array.
138 static int pcpu_sigp_retry(struct pcpu *pcpu, u8 order, u32 parm)
143 cc = __pcpu_sigp(pcpu->address, order, parm, NULL);
152 static inline int pcpu_stopped(struct pcpu *pcpu)
156 if (__pcpu_sigp(pcpu->address, SIGP_SENSE,
162 static inline int pcpu_running(struct pcpu *pcpu)
164 if (__pcpu_sigp(pcpu->address, SIGP_SENSE_RUNNING,
172 * Find struct pcpu by cpu address.
174 static struct pcpu *pcpu_find_address(const struct cpumask *mask, u16 address)
184 static void pcpu_ec_call(struct pcpu *pcpu, int ec_bit)
188 if (test_and_set_bit(ec_bit, &pcpu->ec_mask))
190 order = pcpu_running(pcpu) ? SIGP_EXTERNAL_CALL : SIGP_EMERGENCY_SIGNAL;
191 pcpu->ec_clk = get_tod_clock_fast();
192 pcpu_sigp_retry(pcpu, order, 0);
195 static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
222 pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, __pa(lc));
235 static void pcpu_free_lowcore(struct pcpu *pcpu)
241 cpu = pcpu - pcpu_devices;
246 pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, 0);
256 static void pcpu_prepare_secondary(struct pcpu *pcpu, int cpu)
282 static void pcpu_attach_task(struct pcpu *pcpu, struct task_struct *tsk)
287 cpu = pcpu - pcpu_devices;
301 static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data)
306 cpu = pcpu - pcpu_devices;
312 pcpu_sigp_retry(pcpu, SIGP_RESTART, 0);
318 * Call function via PSW restart on pcpu and stop the current cpu.
325 static void pcpu_delegate(struct pcpu *pcpu,
332 lc = lowcore_ptr[pcpu - pcpu_devices];
335 if (pcpu->address == source_cpu) {
340 pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
341 pcpu_sigp_retry(pcpu, SIGP_CPU_RESET, 0);
361 : : "d" (pcpu->address), "d" (source_cpu),
392 struct pcpu *pcpu;
395 pcpu = pcpu_find_address(cpu_online_mask, stap());
396 if (!pcpu)
398 pcpu = pcpu_devices + cpumask_first(cpu_online_mask);
399 pcpu_delegate(pcpu, func, data, (unsigned long) restart_stack);
468 struct pcpu *pcpu = pcpu_devices + cpu;
469 set_bit(ec_stop_cpu, &pcpu->ec_mask);
470 while (__pcpu_sigp(pcpu->address, SIGP_EMERGENCY_SIGNAL,
577 struct pcpu *pcpu;
580 pcpu = pcpu_devices + cpu;
583 if (__pcpu_sigp_relax(pcpu->address, SIGP_STORE_STATUS_AT_ADDRESS,
591 if (__pcpu_sigp_relax(pcpu->address, SIGP_STORE_ADDITIONAL_STATUS,
727 struct pcpu *pcpu;
739 pcpu = pcpu_devices + cpu;
740 pcpu->address = address + i;
742 pcpu->state = CPU_STATE_CONFIGURED;
744 pcpu->state = CPU_STATE_STANDBY;
876 struct pcpu *pcpu = pcpu_devices + cpu;
879 if (pcpu->state != CPU_STATE_CONFIGURED)
881 if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
885 rc = pcpu_alloc_lowcore(pcpu, cpu);
893 pcpu_prepare_secondary(pcpu, cpu);
894 pcpu_attach_task(pcpu, tidle);
895 pcpu_start_fn(pcpu, smp_start_secondary, NULL);
937 struct pcpu *pcpu;
940 pcpu = pcpu_devices + cpu;
941 while (!pcpu_stopped(pcpu))
943 pcpu_free_lowcore(pcpu);
980 struct pcpu *pcpu = pcpu_devices;
983 pcpu->state = CPU_STATE_CONFIGURED;
1022 struct pcpu *pcpu;
1039 pcpu = pcpu_devices + cpu;
1043 if (pcpu->state != CPU_STATE_CONFIGURED)
1045 rc = sclp_core_deconfigure(pcpu->address >> smp_cpu_mt_shift);
1051 pcpu[i].state = CPU_STATE_STANDBY;
1058 if (pcpu->state != CPU_STATE_STANDBY)
1060 rc = sclp_core_configure(pcpu->address >> smp_cpu_mt_shift);
1066 pcpu[i].state = CPU_STATE_CONFIGURED;