1 /* 2 * padata.c - generic interface to process data streams in parallel 3 * 4 * Copyright (C) 2008, 2009 secunet Security Networks AG 5 * Copyright (C) 2008, 2009 Steffen Klassert <steffen.klassert@secunet.com> 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms and conditions of the GNU General Public License, 9 * version 2, as published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14 * more details. 15 * 16 * You should have received a copy of the GNU General Public License along with 17 * this program; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 19 */ 20 21 #include <linux/export.h> 22 #include <linux/cpumask.h> 23 #include <linux/err.h> 24 #include <linux/cpu.h> 25 #include <linux/padata.h> 26 #include <linux/mutex.h> 27 #include <linux/sched.h> 28 #include <linux/slab.h> 29 #include <linux/sysfs.h> 30 #include <linux/rcupdate.h> 31 32 #define MAX_OBJ_NUM 1000 33 34 static int padata_index_to_cpu(struct parallel_data *pd, int cpu_index) 35 { 36 int cpu, target_cpu; 37 38 target_cpu = cpumask_first(pd->cpumask.pcpu); 39 for (cpu = 0; cpu < cpu_index; cpu++) 40 target_cpu = cpumask_next(target_cpu, pd->cpumask.pcpu); 41 42 return target_cpu; 43 } 44 45 static int padata_cpu_hash(struct parallel_data *pd) 46 { 47 int cpu_index; 48 49 /* 50 * Hash the sequence numbers to the cpus by taking 51 * seq_nr mod. number of cpus in use. 52 */ 53 54 spin_lock(&pd->seq_lock); 55 cpu_index = pd->seq_nr % cpumask_weight(pd->cpumask.pcpu); 56 pd->seq_nr++; 57 spin_unlock(&pd->seq_lock); 58 59 return padata_index_to_cpu(pd, cpu_index); 60 } 61 62 static void padata_parallel_worker(struct work_struct *parallel_work) 63 { 64 struct padata_parallel_queue *pqueue; 65 struct parallel_data *pd; 66 struct padata_instance *pinst; 67 LIST_HEAD(local_list); 68 69 local_bh_disable(); 70 pqueue = container_of(parallel_work, 71 struct padata_parallel_queue, work); 72 pd = pqueue->pd; 73 pinst = pd->pinst; 74 75 spin_lock(&pqueue->parallel.lock); 76 list_replace_init(&pqueue->parallel.list, &local_list); 77 spin_unlock(&pqueue->parallel.lock); 78 79 while (!list_empty(&local_list)) { 80 struct padata_priv *padata; 81 82 padata = list_entry(local_list.next, 83 struct padata_priv, list); 84 85 list_del_init(&padata->list); 86 87 padata->parallel(padata); 88 } 89 90 local_bh_enable(); 91 } 92 93 /** 94 * padata_do_parallel - padata parallelization function 95 * 96 * @pinst: padata instance 97 * @padata: object to be parallelized 98 * @cb_cpu: cpu the serialization callback function will run on, 99 * must be in the serial cpumask of padata(i.e. cpumask.cbcpu). 100 * 101 * The parallelization callback function will run with BHs off. 102 * Note: Every object which is parallelized by padata_do_parallel 103 * must be seen by padata_do_serial. 104 */ 105 int padata_do_parallel(struct padata_instance *pinst, 106 struct padata_priv *padata, int cb_cpu) 107 { 108 int target_cpu, err; 109 struct padata_parallel_queue *queue; 110 struct parallel_data *pd; 111 112 rcu_read_lock_bh(); 113 114 pd = rcu_dereference(pinst->pd); 115 116 err = -EINVAL; 117 if (!(pinst->flags & PADATA_INIT) || pinst->flags & PADATA_INVALID) 118 goto out; 119 120 if (!cpumask_test_cpu(cb_cpu, pd->cpumask.cbcpu)) 121 goto out; 122 123 err = -EBUSY; 124 if ((pinst->flags & PADATA_RESET)) 125 goto out; 126 127 if (atomic_read(&pd->refcnt) >= MAX_OBJ_NUM) 128 goto out; 129 130 err = 0; 131 atomic_inc(&pd->refcnt); 132 padata->pd = pd; 133 padata->cb_cpu = cb_cpu; 134 135 target_cpu = padata_cpu_hash(pd); 136 queue = per_cpu_ptr(pd->pqueue, target_cpu); 137 138 spin_lock(&queue->parallel.lock); 139 list_add_tail(&padata->list, &queue->parallel.list); 140 spin_unlock(&queue->parallel.lock); 141 142 queue_work_on(target_cpu, pinst->wq, &queue->work); 143 144 out: 145 rcu_read_unlock_bh(); 146 147 return err; 148 } 149 EXPORT_SYMBOL(padata_do_parallel); 150 151 /* 152 * padata_get_next - Get the next object that needs serialization. 153 * 154 * Return values are: 155 * 156 * A pointer to the control struct of the next object that needs 157 * serialization, if present in one of the percpu reorder queues. 158 * 159 * NULL, if all percpu reorder queues are empty. 160 * 161 * -EINPROGRESS, if the next object that needs serialization will 162 * be parallel processed by another cpu and is not yet present in 163 * the cpu's reorder queue. 164 * 165 * -ENODATA, if this cpu has to do the parallel processing for 166 * the next object. 167 */ 168 static struct padata_priv *padata_get_next(struct parallel_data *pd) 169 { 170 int cpu, num_cpus; 171 unsigned int next_nr, next_index; 172 struct padata_parallel_queue *queue, *next_queue; 173 struct padata_priv *padata; 174 struct padata_list *reorder; 175 176 num_cpus = cpumask_weight(pd->cpumask.pcpu); 177 178 /* 179 * Calculate the percpu reorder queue and the sequence 180 * number of the next object. 181 */ 182 next_nr = pd->processed; 183 next_index = next_nr % num_cpus; 184 cpu = padata_index_to_cpu(pd, next_index); 185 next_queue = per_cpu_ptr(pd->pqueue, cpu); 186 187 padata = NULL; 188 189 reorder = &next_queue->reorder; 190 191 if (!list_empty(&reorder->list)) { 192 padata = list_entry(reorder->list.next, 193 struct padata_priv, list); 194 195 spin_lock(&reorder->lock); 196 list_del_init(&padata->list); 197 atomic_dec(&pd->reorder_objects); 198 spin_unlock(&reorder->lock); 199 200 pd->processed++; 201 202 goto out; 203 } 204 205 queue = per_cpu_ptr(pd->pqueue, smp_processor_id()); 206 if (queue->cpu_index == next_queue->cpu_index) { 207 padata = ERR_PTR(-ENODATA); 208 goto out; 209 } 210 211 padata = ERR_PTR(-EINPROGRESS); 212 out: 213 return padata; 214 } 215 216 static void padata_reorder(struct parallel_data *pd) 217 { 218 int cb_cpu; 219 struct padata_priv *padata; 220 struct padata_serial_queue *squeue; 221 struct padata_instance *pinst = pd->pinst; 222 223 /* 224 * We need to ensure that only one cpu can work on dequeueing of 225 * the reorder queue the time. Calculating in which percpu reorder 226 * queue the next object will arrive takes some time. A spinlock 227 * would be highly contended. Also it is not clear in which order 228 * the objects arrive to the reorder queues. So a cpu could wait to 229 * get the lock just to notice that there is nothing to do at the 230 * moment. Therefore we use a trylock and let the holder of the lock 231 * care for all the objects enqueued during the holdtime of the lock. 232 */ 233 if (!spin_trylock_bh(&pd->lock)) 234 return; 235 236 while (1) { 237 padata = padata_get_next(pd); 238 239 /* 240 * All reorder queues are empty, or the next object that needs 241 * serialization is parallel processed by another cpu and is 242 * still on it's way to the cpu's reorder queue, nothing to 243 * do for now. 244 */ 245 if (!padata || PTR_ERR(padata) == -EINPROGRESS) 246 break; 247 248 /* 249 * This cpu has to do the parallel processing of the next 250 * object. It's waiting in the cpu's parallelization queue, 251 * so exit immediately. 252 */ 253 if (PTR_ERR(padata) == -ENODATA) { 254 del_timer(&pd->timer); 255 spin_unlock_bh(&pd->lock); 256 return; 257 } 258 259 cb_cpu = padata->cb_cpu; 260 squeue = per_cpu_ptr(pd->squeue, cb_cpu); 261 262 spin_lock(&squeue->serial.lock); 263 list_add_tail(&padata->list, &squeue->serial.list); 264 spin_unlock(&squeue->serial.lock); 265 266 queue_work_on(cb_cpu, pinst->wq, &squeue->work); 267 } 268 269 spin_unlock_bh(&pd->lock); 270 271 /* 272 * The next object that needs serialization might have arrived to 273 * the reorder queues in the meantime, we will be called again 274 * from the timer function if no one else cares for it. 275 */ 276 if (atomic_read(&pd->reorder_objects) 277 && !(pinst->flags & PADATA_RESET)) 278 mod_timer(&pd->timer, jiffies + HZ); 279 else 280 del_timer(&pd->timer); 281 282 return; 283 } 284 285 static void padata_reorder_timer(unsigned long arg) 286 { 287 struct parallel_data *pd = (struct parallel_data *)arg; 288 289 padata_reorder(pd); 290 } 291 292 static void padata_serial_worker(struct work_struct *serial_work) 293 { 294 struct padata_serial_queue *squeue; 295 struct parallel_data *pd; 296 LIST_HEAD(local_list); 297 298 local_bh_disable(); 299 squeue = container_of(serial_work, struct padata_serial_queue, work); 300 pd = squeue->pd; 301 302 spin_lock(&squeue->serial.lock); 303 list_replace_init(&squeue->serial.list, &local_list); 304 spin_unlock(&squeue->serial.lock); 305 306 while (!list_empty(&local_list)) { 307 struct padata_priv *padata; 308 309 padata = list_entry(local_list.next, 310 struct padata_priv, list); 311 312 list_del_init(&padata->list); 313 314 padata->serial(padata); 315 atomic_dec(&pd->refcnt); 316 } 317 local_bh_enable(); 318 } 319 320 /** 321 * padata_do_serial - padata serialization function 322 * 323 * @padata: object to be serialized. 324 * 325 * padata_do_serial must be called for every parallelized object. 326 * The serialization callback function will run with BHs off. 327 */ 328 void padata_do_serial(struct padata_priv *padata) 329 { 330 int cpu; 331 struct padata_parallel_queue *pqueue; 332 struct parallel_data *pd; 333 334 pd = padata->pd; 335 336 cpu = get_cpu(); 337 pqueue = per_cpu_ptr(pd->pqueue, cpu); 338 339 spin_lock(&pqueue->reorder.lock); 340 atomic_inc(&pd->reorder_objects); 341 list_add_tail(&padata->list, &pqueue->reorder.list); 342 spin_unlock(&pqueue->reorder.lock); 343 344 put_cpu(); 345 346 padata_reorder(pd); 347 } 348 EXPORT_SYMBOL(padata_do_serial); 349 350 static int padata_setup_cpumasks(struct parallel_data *pd, 351 const struct cpumask *pcpumask, 352 const struct cpumask *cbcpumask) 353 { 354 if (!alloc_cpumask_var(&pd->cpumask.pcpu, GFP_KERNEL)) 355 return -ENOMEM; 356 357 cpumask_and(pd->cpumask.pcpu, pcpumask, cpu_active_mask); 358 if (!alloc_cpumask_var(&pd->cpumask.cbcpu, GFP_KERNEL)) { 359 free_cpumask_var(pd->cpumask.cbcpu); 360 return -ENOMEM; 361 } 362 363 cpumask_and(pd->cpumask.cbcpu, cbcpumask, cpu_active_mask); 364 return 0; 365 } 366 367 static void __padata_list_init(struct padata_list *pd_list) 368 { 369 INIT_LIST_HEAD(&pd_list->list); 370 spin_lock_init(&pd_list->lock); 371 } 372 373 /* Initialize all percpu queues used by serial workers */ 374 static void padata_init_squeues(struct parallel_data *pd) 375 { 376 int cpu; 377 struct padata_serial_queue *squeue; 378 379 for_each_cpu(cpu, pd->cpumask.cbcpu) { 380 squeue = per_cpu_ptr(pd->squeue, cpu); 381 squeue->pd = pd; 382 __padata_list_init(&squeue->serial); 383 INIT_WORK(&squeue->work, padata_serial_worker); 384 } 385 } 386 387 /* Initialize all percpu queues used by parallel workers */ 388 static void padata_init_pqueues(struct parallel_data *pd) 389 { 390 int cpu_index, cpu; 391 struct padata_parallel_queue *pqueue; 392 393 cpu_index = 0; 394 for_each_cpu(cpu, pd->cpumask.pcpu) { 395 pqueue = per_cpu_ptr(pd->pqueue, cpu); 396 pqueue->pd = pd; 397 pqueue->cpu_index = cpu_index; 398 cpu_index++; 399 400 __padata_list_init(&pqueue->reorder); 401 __padata_list_init(&pqueue->parallel); 402 INIT_WORK(&pqueue->work, padata_parallel_worker); 403 atomic_set(&pqueue->num_obj, 0); 404 } 405 } 406 407 /* Allocate and initialize the internal cpumask dependend resources. */ 408 static struct parallel_data *padata_alloc_pd(struct padata_instance *pinst, 409 const struct cpumask *pcpumask, 410 const struct cpumask *cbcpumask) 411 { 412 struct parallel_data *pd; 413 414 pd = kzalloc(sizeof(struct parallel_data), GFP_KERNEL); 415 if (!pd) 416 goto err; 417 418 pd->pqueue = alloc_percpu(struct padata_parallel_queue); 419 if (!pd->pqueue) 420 goto err_free_pd; 421 422 pd->squeue = alloc_percpu(struct padata_serial_queue); 423 if (!pd->squeue) 424 goto err_free_pqueue; 425 if (padata_setup_cpumasks(pd, pcpumask, cbcpumask) < 0) 426 goto err_free_squeue; 427 428 padata_init_pqueues(pd); 429 padata_init_squeues(pd); 430 setup_timer(&pd->timer, padata_reorder_timer, (unsigned long)pd); 431 pd->seq_nr = 0; 432 atomic_set(&pd->reorder_objects, 0); 433 atomic_set(&pd->refcnt, 0); 434 pd->pinst = pinst; 435 spin_lock_init(&pd->lock); 436 437 return pd; 438 439 err_free_squeue: 440 free_percpu(pd->squeue); 441 err_free_pqueue: 442 free_percpu(pd->pqueue); 443 err_free_pd: 444 kfree(pd); 445 err: 446 return NULL; 447 } 448 449 static void padata_free_pd(struct parallel_data *pd) 450 { 451 free_cpumask_var(pd->cpumask.pcpu); 452 free_cpumask_var(pd->cpumask.cbcpu); 453 free_percpu(pd->pqueue); 454 free_percpu(pd->squeue); 455 kfree(pd); 456 } 457 458 /* Flush all objects out of the padata queues. */ 459 static void padata_flush_queues(struct parallel_data *pd) 460 { 461 int cpu; 462 struct padata_parallel_queue *pqueue; 463 struct padata_serial_queue *squeue; 464 465 for_each_cpu(cpu, pd->cpumask.pcpu) { 466 pqueue = per_cpu_ptr(pd->pqueue, cpu); 467 flush_work(&pqueue->work); 468 } 469 470 del_timer_sync(&pd->timer); 471 472 if (atomic_read(&pd->reorder_objects)) 473 padata_reorder(pd); 474 475 for_each_cpu(cpu, pd->cpumask.cbcpu) { 476 squeue = per_cpu_ptr(pd->squeue, cpu); 477 flush_work(&squeue->work); 478 } 479 480 BUG_ON(atomic_read(&pd->refcnt) != 0); 481 } 482 483 static void __padata_start(struct padata_instance *pinst) 484 { 485 pinst->flags |= PADATA_INIT; 486 } 487 488 static void __padata_stop(struct padata_instance *pinst) 489 { 490 if (!(pinst->flags & PADATA_INIT)) 491 return; 492 493 pinst->flags &= ~PADATA_INIT; 494 495 synchronize_rcu(); 496 497 get_online_cpus(); 498 padata_flush_queues(pinst->pd); 499 put_online_cpus(); 500 } 501 502 /* Replace the internal control structure with a new one. */ 503 static void padata_replace(struct padata_instance *pinst, 504 struct parallel_data *pd_new) 505 { 506 struct parallel_data *pd_old = pinst->pd; 507 int notification_mask = 0; 508 509 pinst->flags |= PADATA_RESET; 510 511 rcu_assign_pointer(pinst->pd, pd_new); 512 513 synchronize_rcu(); 514 515 if (!cpumask_equal(pd_old->cpumask.pcpu, pd_new->cpumask.pcpu)) 516 notification_mask |= PADATA_CPU_PARALLEL; 517 if (!cpumask_equal(pd_old->cpumask.cbcpu, pd_new->cpumask.cbcpu)) 518 notification_mask |= PADATA_CPU_SERIAL; 519 520 padata_flush_queues(pd_old); 521 padata_free_pd(pd_old); 522 523 if (notification_mask) 524 blocking_notifier_call_chain(&pinst->cpumask_change_notifier, 525 notification_mask, 526 &pd_new->cpumask); 527 528 pinst->flags &= ~PADATA_RESET; 529 } 530 531 /** 532 * padata_register_cpumask_notifier - Registers a notifier that will be called 533 * if either pcpu or cbcpu or both cpumasks change. 534 * 535 * @pinst: A poineter to padata instance 536 * @nblock: A pointer to notifier block. 537 */ 538 int padata_register_cpumask_notifier(struct padata_instance *pinst, 539 struct notifier_block *nblock) 540 { 541 return blocking_notifier_chain_register(&pinst->cpumask_change_notifier, 542 nblock); 543 } 544 EXPORT_SYMBOL(padata_register_cpumask_notifier); 545 546 /** 547 * padata_unregister_cpumask_notifier - Unregisters cpumask notifier 548 * registered earlier using padata_register_cpumask_notifier 549 * 550 * @pinst: A pointer to data instance. 551 * @nlock: A pointer to notifier block. 552 */ 553 int padata_unregister_cpumask_notifier(struct padata_instance *pinst, 554 struct notifier_block *nblock) 555 { 556 return blocking_notifier_chain_unregister( 557 &pinst->cpumask_change_notifier, 558 nblock); 559 } 560 EXPORT_SYMBOL(padata_unregister_cpumask_notifier); 561 562 563 /* If cpumask contains no active cpu, we mark the instance as invalid. */ 564 static bool padata_validate_cpumask(struct padata_instance *pinst, 565 const struct cpumask *cpumask) 566 { 567 if (!cpumask_intersects(cpumask, cpu_active_mask)) { 568 pinst->flags |= PADATA_INVALID; 569 return false; 570 } 571 572 pinst->flags &= ~PADATA_INVALID; 573 return true; 574 } 575 576 static int __padata_set_cpumasks(struct padata_instance *pinst, 577 cpumask_var_t pcpumask, 578 cpumask_var_t cbcpumask) 579 { 580 int valid; 581 struct parallel_data *pd; 582 583 valid = padata_validate_cpumask(pinst, pcpumask); 584 if (!valid) { 585 __padata_stop(pinst); 586 goto out_replace; 587 } 588 589 valid = padata_validate_cpumask(pinst, cbcpumask); 590 if (!valid) 591 __padata_stop(pinst); 592 593 out_replace: 594 pd = padata_alloc_pd(pinst, pcpumask, cbcpumask); 595 if (!pd) 596 return -ENOMEM; 597 598 cpumask_copy(pinst->cpumask.pcpu, pcpumask); 599 cpumask_copy(pinst->cpumask.cbcpu, cbcpumask); 600 601 padata_replace(pinst, pd); 602 603 if (valid) 604 __padata_start(pinst); 605 606 return 0; 607 } 608 609 /** 610 * padata_set_cpumasks - Set both parallel and serial cpumasks. The first 611 * one is used by parallel workers and the second one 612 * by the wokers doing serialization. 613 * 614 * @pinst: padata instance 615 * @pcpumask: the cpumask to use for parallel workers 616 * @cbcpumask: the cpumsak to use for serial workers 617 */ 618 int padata_set_cpumasks(struct padata_instance *pinst, cpumask_var_t pcpumask, 619 cpumask_var_t cbcpumask) 620 { 621 int err; 622 623 mutex_lock(&pinst->lock); 624 get_online_cpus(); 625 626 err = __padata_set_cpumasks(pinst, pcpumask, cbcpumask); 627 628 put_online_cpus(); 629 mutex_unlock(&pinst->lock); 630 631 return err; 632 633 } 634 EXPORT_SYMBOL(padata_set_cpumasks); 635 636 /** 637 * padata_set_cpumask: Sets specified by @cpumask_type cpumask to the value 638 * equivalent to @cpumask. 639 * 640 * @pinst: padata instance 641 * @cpumask_type: PADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding 642 * to parallel and serial cpumasks respectively. 643 * @cpumask: the cpumask to use 644 */ 645 int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, 646 cpumask_var_t cpumask) 647 { 648 struct cpumask *serial_mask, *parallel_mask; 649 int err = -EINVAL; 650 651 mutex_lock(&pinst->lock); 652 get_online_cpus(); 653 654 switch (cpumask_type) { 655 case PADATA_CPU_PARALLEL: 656 serial_mask = pinst->cpumask.cbcpu; 657 parallel_mask = cpumask; 658 break; 659 case PADATA_CPU_SERIAL: 660 parallel_mask = pinst->cpumask.pcpu; 661 serial_mask = cpumask; 662 break; 663 default: 664 goto out; 665 } 666 667 err = __padata_set_cpumasks(pinst, parallel_mask, serial_mask); 668 669 out: 670 put_online_cpus(); 671 mutex_unlock(&pinst->lock); 672 673 return err; 674 } 675 EXPORT_SYMBOL(padata_set_cpumask); 676 677 static int __padata_add_cpu(struct padata_instance *pinst, int cpu) 678 { 679 struct parallel_data *pd; 680 681 if (cpumask_test_cpu(cpu, cpu_active_mask)) { 682 pd = padata_alloc_pd(pinst, pinst->cpumask.pcpu, 683 pinst->cpumask.cbcpu); 684 if (!pd) 685 return -ENOMEM; 686 687 padata_replace(pinst, pd); 688 689 if (padata_validate_cpumask(pinst, pinst->cpumask.pcpu) && 690 padata_validate_cpumask(pinst, pinst->cpumask.cbcpu)) 691 __padata_start(pinst); 692 } 693 694 return 0; 695 } 696 697 /** 698 * padata_add_cpu - add a cpu to one or both(parallel and serial) 699 * padata cpumasks. 700 * 701 * @pinst: padata instance 702 * @cpu: cpu to add 703 * @mask: bitmask of flags specifying to which cpumask @cpu shuld be added. 704 * The @mask may be any combination of the following flags: 705 * PADATA_CPU_SERIAL - serial cpumask 706 * PADATA_CPU_PARALLEL - parallel cpumask 707 */ 708 709 int padata_add_cpu(struct padata_instance *pinst, int cpu, int mask) 710 { 711 int err; 712 713 if (!(mask & (PADATA_CPU_SERIAL | PADATA_CPU_PARALLEL))) 714 return -EINVAL; 715 716 mutex_lock(&pinst->lock); 717 718 get_online_cpus(); 719 if (mask & PADATA_CPU_SERIAL) 720 cpumask_set_cpu(cpu, pinst->cpumask.cbcpu); 721 if (mask & PADATA_CPU_PARALLEL) 722 cpumask_set_cpu(cpu, pinst->cpumask.pcpu); 723 724 err = __padata_add_cpu(pinst, cpu); 725 put_online_cpus(); 726 727 mutex_unlock(&pinst->lock); 728 729 return err; 730 } 731 EXPORT_SYMBOL(padata_add_cpu); 732 733 static int __padata_remove_cpu(struct padata_instance *pinst, int cpu) 734 { 735 struct parallel_data *pd = NULL; 736 737 if (cpumask_test_cpu(cpu, cpu_online_mask)) { 738 739 if (!padata_validate_cpumask(pinst, pinst->cpumask.pcpu) || 740 !padata_validate_cpumask(pinst, pinst->cpumask.cbcpu)) 741 __padata_stop(pinst); 742 743 pd = padata_alloc_pd(pinst, pinst->cpumask.pcpu, 744 pinst->cpumask.cbcpu); 745 if (!pd) 746 return -ENOMEM; 747 748 padata_replace(pinst, pd); 749 } 750 751 return 0; 752 } 753 754 /** 755 * padata_remove_cpu - remove a cpu from the one or both(serial and parallel) 756 * padata cpumasks. 757 * 758 * @pinst: padata instance 759 * @cpu: cpu to remove 760 * @mask: bitmask specifying from which cpumask @cpu should be removed 761 * The @mask may be any combination of the following flags: 762 * PADATA_CPU_SERIAL - serial cpumask 763 * PADATA_CPU_PARALLEL - parallel cpumask 764 */ 765 int padata_remove_cpu(struct padata_instance *pinst, int cpu, int mask) 766 { 767 int err; 768 769 if (!(mask & (PADATA_CPU_SERIAL | PADATA_CPU_PARALLEL))) 770 return -EINVAL; 771 772 mutex_lock(&pinst->lock); 773 774 get_online_cpus(); 775 if (mask & PADATA_CPU_SERIAL) 776 cpumask_clear_cpu(cpu, pinst->cpumask.cbcpu); 777 if (mask & PADATA_CPU_PARALLEL) 778 cpumask_clear_cpu(cpu, pinst->cpumask.pcpu); 779 780 err = __padata_remove_cpu(pinst, cpu); 781 put_online_cpus(); 782 783 mutex_unlock(&pinst->lock); 784 785 return err; 786 } 787 EXPORT_SYMBOL(padata_remove_cpu); 788 789 /** 790 * padata_start - start the parallel processing 791 * 792 * @pinst: padata instance to start 793 */ 794 int padata_start(struct padata_instance *pinst) 795 { 796 int err = 0; 797 798 mutex_lock(&pinst->lock); 799 800 if (pinst->flags & PADATA_INVALID) 801 err =-EINVAL; 802 803 __padata_start(pinst); 804 805 mutex_unlock(&pinst->lock); 806 807 return err; 808 } 809 EXPORT_SYMBOL(padata_start); 810 811 /** 812 * padata_stop - stop the parallel processing 813 * 814 * @pinst: padata instance to stop 815 */ 816 void padata_stop(struct padata_instance *pinst) 817 { 818 mutex_lock(&pinst->lock); 819 __padata_stop(pinst); 820 mutex_unlock(&pinst->lock); 821 } 822 EXPORT_SYMBOL(padata_stop); 823 824 #ifdef CONFIG_HOTPLUG_CPU 825 826 static inline int pinst_has_cpu(struct padata_instance *pinst, int cpu) 827 { 828 return cpumask_test_cpu(cpu, pinst->cpumask.pcpu) || 829 cpumask_test_cpu(cpu, pinst->cpumask.cbcpu); 830 } 831 832 833 static int padata_cpu_callback(struct notifier_block *nfb, 834 unsigned long action, void *hcpu) 835 { 836 int err; 837 struct padata_instance *pinst; 838 int cpu = (unsigned long)hcpu; 839 840 pinst = container_of(nfb, struct padata_instance, cpu_notifier); 841 842 switch (action) { 843 case CPU_ONLINE: 844 case CPU_ONLINE_FROZEN: 845 if (!pinst_has_cpu(pinst, cpu)) 846 break; 847 mutex_lock(&pinst->lock); 848 err = __padata_add_cpu(pinst, cpu); 849 mutex_unlock(&pinst->lock); 850 if (err) 851 return notifier_from_errno(err); 852 break; 853 854 case CPU_DOWN_PREPARE: 855 case CPU_DOWN_PREPARE_FROZEN: 856 if (!pinst_has_cpu(pinst, cpu)) 857 break; 858 mutex_lock(&pinst->lock); 859 err = __padata_remove_cpu(pinst, cpu); 860 mutex_unlock(&pinst->lock); 861 if (err) 862 return notifier_from_errno(err); 863 break; 864 865 case CPU_UP_CANCELED: 866 case CPU_UP_CANCELED_FROZEN: 867 if (!pinst_has_cpu(pinst, cpu)) 868 break; 869 mutex_lock(&pinst->lock); 870 __padata_remove_cpu(pinst, cpu); 871 mutex_unlock(&pinst->lock); 872 873 case CPU_DOWN_FAILED: 874 case CPU_DOWN_FAILED_FROZEN: 875 if (!pinst_has_cpu(pinst, cpu)) 876 break; 877 mutex_lock(&pinst->lock); 878 __padata_add_cpu(pinst, cpu); 879 mutex_unlock(&pinst->lock); 880 } 881 882 return NOTIFY_OK; 883 } 884 #endif 885 886 static void __padata_free(struct padata_instance *pinst) 887 { 888 #ifdef CONFIG_HOTPLUG_CPU 889 unregister_hotcpu_notifier(&pinst->cpu_notifier); 890 #endif 891 892 padata_stop(pinst); 893 padata_free_pd(pinst->pd); 894 free_cpumask_var(pinst->cpumask.pcpu); 895 free_cpumask_var(pinst->cpumask.cbcpu); 896 kfree(pinst); 897 } 898 899 #define kobj2pinst(_kobj) \ 900 container_of(_kobj, struct padata_instance, kobj) 901 #define attr2pentry(_attr) \ 902 container_of(_attr, struct padata_sysfs_entry, attr) 903 904 static void padata_sysfs_release(struct kobject *kobj) 905 { 906 struct padata_instance *pinst = kobj2pinst(kobj); 907 __padata_free(pinst); 908 } 909 910 struct padata_sysfs_entry { 911 struct attribute attr; 912 ssize_t (*show)(struct padata_instance *, struct attribute *, char *); 913 ssize_t (*store)(struct padata_instance *, struct attribute *, 914 const char *, size_t); 915 }; 916 917 static ssize_t show_cpumask(struct padata_instance *pinst, 918 struct attribute *attr, char *buf) 919 { 920 struct cpumask *cpumask; 921 ssize_t len; 922 923 mutex_lock(&pinst->lock); 924 if (!strcmp(attr->name, "serial_cpumask")) 925 cpumask = pinst->cpumask.cbcpu; 926 else 927 cpumask = pinst->cpumask.pcpu; 928 929 len = bitmap_scnprintf(buf, PAGE_SIZE, cpumask_bits(cpumask), 930 nr_cpu_ids); 931 if (PAGE_SIZE - len < 2) 932 len = -EINVAL; 933 else 934 len += sprintf(buf + len, "\n"); 935 936 mutex_unlock(&pinst->lock); 937 return len; 938 } 939 940 static ssize_t store_cpumask(struct padata_instance *pinst, 941 struct attribute *attr, 942 const char *buf, size_t count) 943 { 944 cpumask_var_t new_cpumask; 945 ssize_t ret; 946 int mask_type; 947 948 if (!alloc_cpumask_var(&new_cpumask, GFP_KERNEL)) 949 return -ENOMEM; 950 951 ret = bitmap_parse(buf, count, cpumask_bits(new_cpumask), 952 nr_cpumask_bits); 953 if (ret < 0) 954 goto out; 955 956 mask_type = !strcmp(attr->name, "serial_cpumask") ? 957 PADATA_CPU_SERIAL : PADATA_CPU_PARALLEL; 958 ret = padata_set_cpumask(pinst, mask_type, new_cpumask); 959 if (!ret) 960 ret = count; 961 962 out: 963 free_cpumask_var(new_cpumask); 964 return ret; 965 } 966 967 #define PADATA_ATTR_RW(_name, _show_name, _store_name) \ 968 static struct padata_sysfs_entry _name##_attr = \ 969 __ATTR(_name, 0644, _show_name, _store_name) 970 #define PADATA_ATTR_RO(_name, _show_name) \ 971 static struct padata_sysfs_entry _name##_attr = \ 972 __ATTR(_name, 0400, _show_name, NULL) 973 974 PADATA_ATTR_RW(serial_cpumask, show_cpumask, store_cpumask); 975 PADATA_ATTR_RW(parallel_cpumask, show_cpumask, store_cpumask); 976 977 /* 978 * Padata sysfs provides the following objects: 979 * serial_cpumask [RW] - cpumask for serial workers 980 * parallel_cpumask [RW] - cpumask for parallel workers 981 */ 982 static struct attribute *padata_default_attrs[] = { 983 &serial_cpumask_attr.attr, 984 ¶llel_cpumask_attr.attr, 985 NULL, 986 }; 987 988 static ssize_t padata_sysfs_show(struct kobject *kobj, 989 struct attribute *attr, char *buf) 990 { 991 struct padata_instance *pinst; 992 struct padata_sysfs_entry *pentry; 993 ssize_t ret = -EIO; 994 995 pinst = kobj2pinst(kobj); 996 pentry = attr2pentry(attr); 997 if (pentry->show) 998 ret = pentry->show(pinst, attr, buf); 999 1000 return ret; 1001 } 1002 1003 static ssize_t padata_sysfs_store(struct kobject *kobj, struct attribute *attr, 1004 const char *buf, size_t count) 1005 { 1006 struct padata_instance *pinst; 1007 struct padata_sysfs_entry *pentry; 1008 ssize_t ret = -EIO; 1009 1010 pinst = kobj2pinst(kobj); 1011 pentry = attr2pentry(attr); 1012 if (pentry->show) 1013 ret = pentry->store(pinst, attr, buf, count); 1014 1015 return ret; 1016 } 1017 1018 static const struct sysfs_ops padata_sysfs_ops = { 1019 .show = padata_sysfs_show, 1020 .store = padata_sysfs_store, 1021 }; 1022 1023 static struct kobj_type padata_attr_type = { 1024 .sysfs_ops = &padata_sysfs_ops, 1025 .default_attrs = padata_default_attrs, 1026 .release = padata_sysfs_release, 1027 }; 1028 1029 /** 1030 * padata_alloc_possible - Allocate and initialize padata instance. 1031 * Use the cpu_possible_mask for serial and 1032 * parallel workers. 1033 * 1034 * @wq: workqueue to use for the allocated padata instance 1035 */ 1036 struct padata_instance *padata_alloc_possible(struct workqueue_struct *wq) 1037 { 1038 return padata_alloc(wq, cpu_possible_mask, cpu_possible_mask); 1039 } 1040 EXPORT_SYMBOL(padata_alloc_possible); 1041 1042 /** 1043 * padata_alloc - allocate and initialize a padata instance and specify 1044 * cpumasks for serial and parallel workers. 1045 * 1046 * @wq: workqueue to use for the allocated padata instance 1047 * @pcpumask: cpumask that will be used for padata parallelization 1048 * @cbcpumask: cpumask that will be used for padata serialization 1049 */ 1050 struct padata_instance *padata_alloc(struct workqueue_struct *wq, 1051 const struct cpumask *pcpumask, 1052 const struct cpumask *cbcpumask) 1053 { 1054 struct padata_instance *pinst; 1055 struct parallel_data *pd = NULL; 1056 1057 pinst = kzalloc(sizeof(struct padata_instance), GFP_KERNEL); 1058 if (!pinst) 1059 goto err; 1060 1061 get_online_cpus(); 1062 if (!alloc_cpumask_var(&pinst->cpumask.pcpu, GFP_KERNEL)) 1063 goto err_free_inst; 1064 if (!alloc_cpumask_var(&pinst->cpumask.cbcpu, GFP_KERNEL)) { 1065 free_cpumask_var(pinst->cpumask.pcpu); 1066 goto err_free_inst; 1067 } 1068 if (!padata_validate_cpumask(pinst, pcpumask) || 1069 !padata_validate_cpumask(pinst, cbcpumask)) 1070 goto err_free_masks; 1071 1072 pd = padata_alloc_pd(pinst, pcpumask, cbcpumask); 1073 if (!pd) 1074 goto err_free_masks; 1075 1076 rcu_assign_pointer(pinst->pd, pd); 1077 1078 pinst->wq = wq; 1079 1080 cpumask_copy(pinst->cpumask.pcpu, pcpumask); 1081 cpumask_copy(pinst->cpumask.cbcpu, cbcpumask); 1082 1083 pinst->flags = 0; 1084 1085 #ifdef CONFIG_HOTPLUG_CPU 1086 pinst->cpu_notifier.notifier_call = padata_cpu_callback; 1087 pinst->cpu_notifier.priority = 0; 1088 register_hotcpu_notifier(&pinst->cpu_notifier); 1089 #endif 1090 1091 put_online_cpus(); 1092 1093 BLOCKING_INIT_NOTIFIER_HEAD(&pinst->cpumask_change_notifier); 1094 kobject_init(&pinst->kobj, &padata_attr_type); 1095 mutex_init(&pinst->lock); 1096 1097 return pinst; 1098 1099 err_free_masks: 1100 free_cpumask_var(pinst->cpumask.pcpu); 1101 free_cpumask_var(pinst->cpumask.cbcpu); 1102 err_free_inst: 1103 kfree(pinst); 1104 put_online_cpus(); 1105 err: 1106 return NULL; 1107 } 1108 EXPORT_SYMBOL(padata_alloc); 1109 1110 /** 1111 * padata_free - free a padata instance 1112 * 1113 * @padata_inst: padata instance to free 1114 */ 1115 void padata_free(struct padata_instance *pinst) 1116 { 1117 kobject_put(&pinst->kobj); 1118 } 1119 EXPORT_SYMBOL(padata_free); 1120