Lines Matching refs:pcpu

2  * pcpu.c
3 * Management physical cpu in dom0, get pcpu info and provide sys interface
60 struct pcpu {
103 struct pcpu *cpu = container_of(dev, struct pcpu, dev);
112 struct pcpu *pcpu = container_of(dev, struct pcpu, dev);
124 ret = xen_pcpu_down(pcpu->cpu_id);
127 ret = xen_pcpu_up(pcpu->cpu_id);
172 struct pcpu *pcpu)
175 !xen_pcpu_online(pcpu->flags)) {
176 /* the pcpu is onlined */
177 pcpu->flags |= XEN_PCPU_FLAGS_ONLINE;
178 kobject_uevent(&pcpu->dev.kobj, KOBJ_ONLINE);
180 xen_pcpu_online(pcpu->flags)) {
181 /* The pcpu is offlined */
182 pcpu->flags &= ~XEN_PCPU_FLAGS_ONLINE;
183 kobject_uevent(&pcpu->dev.kobj, KOBJ_OFFLINE);
187 static struct pcpu *get_pcpu(uint32_t cpu_id)
189 struct pcpu *pcpu;
191 list_for_each_entry(pcpu, &xen_pcpus, list) {
192 if (pcpu->cpu_id == cpu_id)
193 return pcpu;
201 struct pcpu *pcpu = container_of(dev, struct pcpu, dev);
203 list_del(&pcpu->list);
204 kfree(pcpu);
207 static void unregister_and_remove_pcpu(struct pcpu *pcpu)
211 if (!pcpu)
214 dev = &pcpu->dev;
215 /* pcpu remove would be implicitly done */
219 static int register_pcpu(struct pcpu *pcpu)
224 if (!pcpu)
227 dev = &pcpu->dev;
229 dev->id = pcpu->cpu_id;
242 static struct pcpu *create_and_register_pcpu(struct xenpf_pcpuinfo *info)
244 struct pcpu *pcpu;
250 pcpu = kzalloc(sizeof(struct pcpu), GFP_KERNEL);
251 if (!pcpu)
254 INIT_LIST_HEAD(&pcpu->list);
255 pcpu->cpu_id = info->xen_cpuid;
256 pcpu->acpi_id = info->acpi_id;
257 pcpu->flags = info->flags;
259 /* Need hold on xen_pcpu_lock before pcpu list manipulations */
260 list_add_tail(&pcpu->list, &xen_pcpus);
262 err = register_pcpu(pcpu);
264 pr_warn("Failed to register pcpu%u\n", info->xen_cpuid);
268 return pcpu;
277 struct pcpu *pcpu = NULL;
293 pcpu = get_pcpu(cpu);
299 unregister_and_remove_pcpu(pcpu);
303 if (!pcpu) {
304 pcpu = create_and_register_pcpu(info);
305 if (IS_ERR_OR_NULL(pcpu))
308 pcpu_online_status(info, pcpu);
314 * Sync dom0's pcpu information with xen hypervisor's
323 struct pcpu *pcpu, *tmp;
333 list_for_each_entry_safe(pcpu, tmp, &xen_pcpus, list)
334 unregister_and_remove_pcpu(pcpu);
362 "xen-pcpu", NULL);
364 pr_warn("Failed to bind pcpu virq\n");
370 pr_warn("Failed to register pcpu subsys\n");
376 pr_warn("Failed to sync pcpu info\n");
393 const struct pcpu *pcpu;
397 list_for_each_entry(pcpu, &xen_pcpus, list)
398 if (pcpu->acpi_id == acpi_id) {
399 online = pcpu->flags & XEN_PCPU_FLAGS_ONLINE;