Lines Matching full:cpu
72 static int cpuctl_do_msr(int cpu, cpuctl_msr_args_t *data, u_long cmd,
74 static int cpuctl_do_cpuid(int cpu, cpuctl_cpuid_args_t *data,
76 static int cpuctl_do_cpuid_count(int cpu, cpuctl_cpuid_count_args_t *data,
78 static int cpuctl_do_eval_cpu_features(int cpu, struct thread *td);
79 static int cpuctl_do_update(int cpu, cpuctl_update_args_t *data,
81 static int update_intel(int cpu, cpuctl_update_args_t *args,
83 static int update_amd(int cpu, cpuctl_update_args_t *args, struct thread *td);
84 static int update_via(int cpu, cpuctl_update_args_t *args,
98 * This function checks if specified cpu enabled or not.
101 cpu_enabled(int cpu) in cpu_enabled() argument
104 return (pmc_cpu_is_disabled(cpu) == 0); in cpu_enabled()
108 * Check if the current thread is bound to a specific cpu.
122 * Switch to target cpu to run.
125 set_cpu(int cpu, struct thread *td) in set_cpu() argument
128 KASSERT(cpu >= 0 && cpu <= mp_maxid && cpu_enabled(cpu), in set_cpu()
129 ("[cpuctl,%d]: bad cpu number %d", __LINE__, cpu)); in set_cpu()
131 sched_bind(td, cpu); in set_cpu()
133 KASSERT(td->td_oncpu == cpu, in set_cpu()
134 ("[cpuctl,%d]: cannot bind to target cpu %d on cpu %d", __LINE__, in set_cpu()
135 cpu, td->td_oncpu)); in set_cpu()
143 ("[cpuctl,%d]: bad cpu number %d", __LINE__, oldcpu)); in restore_cpu()
156 int cpu, ret; in cpuctl_ioctl() local
158 cpu = dev2unit(dev); in cpuctl_ioctl()
159 if (cpu > mp_maxid || !cpu_enabled(cpu)) { in cpuctl_ioctl()
160 DPRINTF("[cpuctl,%d]: bad cpu number %d\n", __LINE__, cpu); in cpuctl_ioctl()
171 ret = cpuctl_do_msr(cpu, (cpuctl_msr_args_t *)data, cmd, td); in cpuctl_ioctl()
179 ret = cpuctl_do_msr(cpu, (cpuctl_msr_args_t *)data, cmd, td); in cpuctl_ioctl()
182 ret = cpuctl_do_cpuid(cpu, (cpuctl_cpuid_args_t *)data, td); in cpuctl_ioctl()
188 ret = cpuctl_do_update(cpu, (cpuctl_update_args_t *)data, td); in cpuctl_ioctl()
191 ret = cpuctl_do_cpuid_count(cpu, in cpuctl_ioctl()
195 ret = cpuctl_do_eval_cpu_features(cpu, td); in cpuctl_ioctl()
209 cpuctl_do_cpuid_count(int cpu, cpuctl_cpuid_count_args_t *data, in cpuctl_do_cpuid_count() argument
215 KASSERT(cpu >= 0 && cpu <= mp_maxid, in cpuctl_do_cpuid_count()
216 ("[cpuctl,%d]: bad cpu number %d", __LINE__, cpu)); in cpuctl_do_cpuid_count()
220 DPRINTF("[cpuctl,%d]: retrieving cpuid lev %#0x type %#0x for %d cpu\n", in cpuctl_do_cpuid_count()
221 __LINE__, data->level, data->level_type, cpu); in cpuctl_do_cpuid_count()
228 set_cpu(cpu, td); in cpuctl_do_cpuid_count()
235 cpuctl_do_cpuid(int cpu, cpuctl_cpuid_args_t *data, struct thread *td) in cpuctl_do_cpuid() argument
243 error = cpuctl_do_cpuid_count(cpu, &cdata, td); in cpuctl_do_cpuid()
252 cpuctl_do_msr(int cpu, cpuctl_msr_args_t *data, u_long cmd, struct thread *td) in cpuctl_do_msr() argument
259 KASSERT(cpu >= 0 && cpu <= mp_maxid, in cpuctl_do_msr()
260 ("[cpuctl,%d]: bad cpu number %d", __LINE__, cpu)); in cpuctl_do_msr()
266 DPRINTF("[cpuctl,%d]: operating on MSR %#0x for %d cpu\n", __LINE__, in cpuctl_do_msr()
267 data->msr, cpu); in cpuctl_do_msr()
274 set_cpu(cpu, td); in cpuctl_do_msr()
303 cpuctl_do_update(int cpu, cpuctl_update_args_t *data, struct thread *td) in cpuctl_do_update() argument
311 KASSERT(cpu >= 0 && cpu <= mp_maxid, in cpuctl_do_update()
312 ("[cpuctl,%d]: bad cpu number %d", __LINE__, cpu)); in cpuctl_do_update()
313 DPRINTF("[cpuctl,%d]: XXX %d", __LINE__, cpu); in cpuctl_do_update()
315 ret = cpuctl_do_cpuid(cpu, &args, td); in cpuctl_do_update()
323 ret = update_intel(cpu, data, td); in cpuctl_do_update()
325 ret = update_amd(cpu, data, td); in cpuctl_do_update()
328 ret = update_via(cpu, data, td); in cpuctl_do_update()
336 int cpu; member
346 if (PCPU_GET(cpuid) == d->cpu) in ucode_intel_load_rv()
351 update_intel(int cpu, cpuctl_update_args_t *args, struct thread *td) in update_intel() argument
380 set_cpu(cpu, td); in update_intel()
382 d.cpu = cpu; in update_intel()
414 update_amd(int cpu, cpuctl_update_args_t *args, struct thread *td) in update_amd() argument
448 update_via(int cpu, cpuctl_update_args_t *args, struct thread *td) in update_via() argument
478 set_cpu(cpu, td); in update_via()
508 DPRINTF("[cpu,%d]: rev0=%x rev1=%x res=%x\n", __LINE__, in update_via()
521 cpuctl_do_eval_cpu_features(int cpu, struct thread *td) in cpuctl_do_eval_cpu_features() argument
526 KASSERT(cpu >= 0 && cpu <= mp_maxid, in cpuctl_do_eval_cpu_features()
527 ("[cpuctl,%d]: bad cpu number %d", __LINE__, cpu)); in cpuctl_do_eval_cpu_features()
535 set_cpu(cpu, td); in cpuctl_do_eval_cpu_features()
557 int cpu; in cpuctl_open() local
559 cpu = dev2unit(dev); in cpuctl_open()
560 if (cpu > mp_maxid || !cpu_enabled(cpu)) { in cpuctl_open()
561 DPRINTF("[cpuctl,%d]: incorrect cpu number %d\n", __LINE__, in cpuctl_open()
562 cpu); in cpuctl_open()
573 int cpu; in cpuctl_modevent() local
581 CPU_FOREACH(cpu) in cpuctl_modevent()
582 if (cpu_enabled(cpu)) in cpuctl_modevent()
583 cpuctl_devs[cpu] = make_dev(&cpuctl_cdevsw, cpu, in cpuctl_modevent()
584 UID_ROOT, GID_KMEM, 0640, "cpuctl%d", cpu); in cpuctl_modevent()
587 CPU_FOREACH(cpu) { in cpuctl_modevent()
588 if (cpuctl_devs[cpu] != NULL) in cpuctl_modevent()
589 destroy_dev(cpuctl_devs[cpu]); in cpuctl_modevent()