Lines Matching refs:pinst

178 	struct padata_instance *pinst = ps->pinst;  in padata_do_parallel()  local
188 if (!(pinst->flags & PADATA_INIT) || pinst->flags & PADATA_INVALID) in padata_do_parallel()
206 if ((pinst->flags & PADATA_RESET)) in padata_do_parallel()
227 queue_work(pinst->parallel_wq, &pw->pw_work); in padata_do_parallel()
286 struct padata_instance *pinst = pd->ps->pinst; in padata_reorder() local
323 queue_work_on(cb_cpu, pinst->serial_wq, &squeue->work); in padata_reorder()
340 queue_work(pinst->serial_wq, &pd->reorder_work); in padata_reorder()
424 static int padata_setup_cpumasks(struct padata_instance *pinst) in padata_setup_cpumasks() argument
434 cpumask_copy(attrs->cpumask, pinst->cpumask.pcpu); in padata_setup_cpumasks()
435 err = apply_workqueue_attrs(pinst->parallel_wq, attrs); in padata_setup_cpumasks()
568 struct padata_instance *pinst = ps->pinst; in padata_alloc_pd() local
590 cpumask_and(pd->cpumask.pcpu, pinst->cpumask.pcpu, cpu_online_mask); in padata_alloc_pd()
591 cpumask_and(pd->cpumask.cbcpu, pinst->cpumask.cbcpu, cpu_online_mask); in padata_alloc_pd()
624 static void __padata_start(struct padata_instance *pinst) in __padata_start() argument
626 pinst->flags |= PADATA_INIT; in __padata_start()
629 static void __padata_stop(struct padata_instance *pinst) in __padata_stop() argument
631 if (!(pinst->flags & PADATA_INIT)) in __padata_stop()
634 pinst->flags &= ~PADATA_INIT; in __padata_stop()
654 static int padata_replace(struct padata_instance *pinst) in padata_replace() argument
659 pinst->flags |= PADATA_RESET; in padata_replace()
661 list_for_each_entry(ps, &pinst->pslist, list) { in padata_replace()
669 list_for_each_entry_continue_reverse(ps, &pinst->pslist, list) in padata_replace()
673 pinst->flags &= ~PADATA_RESET; in padata_replace()
679 static bool padata_validate_cpumask(struct padata_instance *pinst, in padata_validate_cpumask() argument
683 pinst->flags |= PADATA_INVALID; in padata_validate_cpumask()
687 pinst->flags &= ~PADATA_INVALID; in padata_validate_cpumask()
691 static int __padata_set_cpumasks(struct padata_instance *pinst, in __padata_set_cpumasks() argument
698 valid = padata_validate_cpumask(pinst, pcpumask); in __padata_set_cpumasks()
700 __padata_stop(pinst); in __padata_set_cpumasks()
704 valid = padata_validate_cpumask(pinst, cbcpumask); in __padata_set_cpumasks()
706 __padata_stop(pinst); in __padata_set_cpumasks()
709 cpumask_copy(pinst->cpumask.pcpu, pcpumask); in __padata_set_cpumasks()
710 cpumask_copy(pinst->cpumask.cbcpu, cbcpumask); in __padata_set_cpumasks()
712 err = padata_setup_cpumasks(pinst) ?: padata_replace(pinst); in __padata_set_cpumasks()
715 __padata_start(pinst); in __padata_set_cpumasks()
730 int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, in padata_set_cpumask() argument
737 mutex_lock(&pinst->lock); in padata_set_cpumask()
741 serial_mask = pinst->cpumask.cbcpu; in padata_set_cpumask()
745 parallel_mask = pinst->cpumask.pcpu; in padata_set_cpumask()
752 err = __padata_set_cpumasks(pinst, parallel_mask, serial_mask); in padata_set_cpumask()
755 mutex_unlock(&pinst->lock); in padata_set_cpumask()
764 static int __padata_add_cpu(struct padata_instance *pinst, int cpu) in __padata_add_cpu() argument
769 err = padata_replace(pinst); in __padata_add_cpu()
771 if (padata_validate_cpumask(pinst, pinst->cpumask.pcpu) && in __padata_add_cpu()
772 padata_validate_cpumask(pinst, pinst->cpumask.cbcpu)) in __padata_add_cpu()
773 __padata_start(pinst); in __padata_add_cpu()
779 static int __padata_remove_cpu(struct padata_instance *pinst, int cpu) in __padata_remove_cpu() argument
784 if (!padata_validate_cpumask(pinst, pinst->cpumask.pcpu) || in __padata_remove_cpu()
785 !padata_validate_cpumask(pinst, pinst->cpumask.cbcpu)) in __padata_remove_cpu()
786 __padata_stop(pinst); in __padata_remove_cpu()
788 err = padata_replace(pinst); in __padata_remove_cpu()
794 static inline int pinst_has_cpu(struct padata_instance *pinst, int cpu) in pinst_has_cpu() argument
796 return cpumask_test_cpu(cpu, pinst->cpumask.pcpu) || in pinst_has_cpu()
797 cpumask_test_cpu(cpu, pinst->cpumask.cbcpu); in pinst_has_cpu()
802 struct padata_instance *pinst; in padata_cpu_online() local
805 pinst = hlist_entry_safe(node, struct padata_instance, cpu_online_node); in padata_cpu_online()
806 if (!pinst_has_cpu(pinst, cpu)) in padata_cpu_online()
809 mutex_lock(&pinst->lock); in padata_cpu_online()
810 ret = __padata_add_cpu(pinst, cpu); in padata_cpu_online()
811 mutex_unlock(&pinst->lock); in padata_cpu_online()
817 struct padata_instance *pinst; in padata_cpu_dead() local
820 pinst = hlist_entry_safe(node, struct padata_instance, cpu_dead_node); in padata_cpu_dead()
821 if (!pinst_has_cpu(pinst, cpu)) in padata_cpu_dead()
824 mutex_lock(&pinst->lock); in padata_cpu_dead()
825 ret = __padata_remove_cpu(pinst, cpu); in padata_cpu_dead()
826 mutex_unlock(&pinst->lock); in padata_cpu_dead()
833 static void __padata_free(struct padata_instance *pinst) in __padata_free() argument
837 &pinst->cpu_dead_node); in __padata_free()
838 cpuhp_state_remove_instance_nocalls(hp_online, &pinst->cpu_online_node); in __padata_free()
841 WARN_ON(!list_empty(&pinst->pslist)); in __padata_free()
843 free_cpumask_var(pinst->cpumask.pcpu); in __padata_free()
844 free_cpumask_var(pinst->cpumask.cbcpu); in __padata_free()
845 destroy_workqueue(pinst->serial_wq); in __padata_free()
846 destroy_workqueue(pinst->parallel_wq); in __padata_free()
847 kfree(pinst); in __padata_free()
857 struct padata_instance *pinst = kobj2pinst(kobj); in padata_sysfs_release() local
858 __padata_free(pinst); in padata_sysfs_release()
868 static ssize_t show_cpumask(struct padata_instance *pinst, in show_cpumask() argument
874 mutex_lock(&pinst->lock); in show_cpumask()
876 cpumask = pinst->cpumask.cbcpu; in show_cpumask()
878 cpumask = pinst->cpumask.pcpu; in show_cpumask()
882 mutex_unlock(&pinst->lock); in show_cpumask()
886 static ssize_t store_cpumask(struct padata_instance *pinst, in store_cpumask() argument
904 ret = padata_set_cpumask(pinst, mask_type, new_cpumask); in store_cpumask()
938 struct padata_instance *pinst; in padata_sysfs_show() local
942 pinst = kobj2pinst(kobj); in padata_sysfs_show()
945 ret = pentry->show(pinst, attr, buf); in padata_sysfs_show()
953 struct padata_instance *pinst; in padata_sysfs_store() local
957 pinst = kobj2pinst(kobj); in padata_sysfs_store()
960 ret = pentry->store(pinst, attr, buf, count); in padata_sysfs_store()
984 struct padata_instance *pinst; in padata_alloc() local
986 pinst = kzalloc(sizeof(struct padata_instance), GFP_KERNEL); in padata_alloc()
987 if (!pinst) in padata_alloc()
990 pinst->parallel_wq = alloc_workqueue("%s_parallel", WQ_UNBOUND, 0, in padata_alloc()
992 if (!pinst->parallel_wq) in padata_alloc()
997 pinst->serial_wq = alloc_workqueue("%s_serial", WQ_MEM_RECLAIM | in padata_alloc()
999 if (!pinst->serial_wq) in padata_alloc()
1002 if (!alloc_cpumask_var(&pinst->cpumask.pcpu, GFP_KERNEL)) in padata_alloc()
1004 if (!alloc_cpumask_var(&pinst->cpumask.cbcpu, GFP_KERNEL)) { in padata_alloc()
1005 free_cpumask_var(pinst->cpumask.pcpu); in padata_alloc()
1009 INIT_LIST_HEAD(&pinst->pslist); in padata_alloc()
1011 cpumask_copy(pinst->cpumask.pcpu, cpu_possible_mask); in padata_alloc()
1012 cpumask_copy(pinst->cpumask.cbcpu, cpu_possible_mask); in padata_alloc()
1014 if (padata_setup_cpumasks(pinst)) in padata_alloc()
1017 __padata_start(pinst); in padata_alloc()
1019 kobject_init(&pinst->kobj, &padata_attr_type); in padata_alloc()
1020 mutex_init(&pinst->lock); in padata_alloc()
1024 &pinst->cpu_online_node); in padata_alloc()
1026 &pinst->cpu_dead_node); in padata_alloc()
1031 return pinst; in padata_alloc()
1034 free_cpumask_var(pinst->cpumask.pcpu); in padata_alloc()
1035 free_cpumask_var(pinst->cpumask.cbcpu); in padata_alloc()
1037 destroy_workqueue(pinst->serial_wq); in padata_alloc()
1040 destroy_workqueue(pinst->parallel_wq); in padata_alloc()
1042 kfree(pinst); in padata_alloc()
1053 void padata_free(struct padata_instance *pinst) in padata_free() argument
1055 kobject_put(&pinst->kobj); in padata_free()
1066 struct padata_shell *padata_alloc_shell(struct padata_instance *pinst) in padata_alloc_shell() argument
1075 ps->pinst = pinst; in padata_alloc_shell()
1084 mutex_lock(&pinst->lock); in padata_alloc_shell()
1086 list_add(&ps->list, &pinst->pslist); in padata_alloc_shell()
1087 mutex_unlock(&pinst->lock); in padata_alloc_shell()
1108 mutex_lock(&ps->pinst->lock); in padata_free_shell()
1111 mutex_unlock(&ps->pinst->lock); in padata_free_shell()