| .. | .. |
|---|
| 687 | 687 | set_work_data(work, WORK_STRUCT_NO_POOL, 0); |
|---|
| 688 | 688 | } |
|---|
| 689 | 689 | |
|---|
| 690 | +static inline struct pool_workqueue *work_struct_pwq(unsigned long data) |
|---|
| 691 | +{ |
|---|
| 692 | + return (struct pool_workqueue *)(data & WORK_STRUCT_WQ_DATA_MASK); |
|---|
| 693 | +} |
|---|
| 694 | + |
|---|
| 690 | 695 | static struct pool_workqueue *get_work_pwq(struct work_struct *work) |
|---|
| 691 | 696 | { |
|---|
| 692 | 697 | unsigned long data = atomic_long_read(&work->data); |
|---|
| 693 | 698 | |
|---|
| 694 | 699 | if (data & WORK_STRUCT_PWQ) |
|---|
| 695 | | - return (void *)(data & WORK_STRUCT_WQ_DATA_MASK); |
|---|
| 700 | + return work_struct_pwq(data); |
|---|
| 696 | 701 | else |
|---|
| 697 | 702 | return NULL; |
|---|
| 698 | 703 | } |
|---|
| .. | .. |
|---|
| 720 | 725 | assert_rcu_or_pool_mutex(); |
|---|
| 721 | 726 | |
|---|
| 722 | 727 | if (data & WORK_STRUCT_PWQ) |
|---|
| 723 | | - return ((struct pool_workqueue *) |
|---|
| 724 | | - (data & WORK_STRUCT_WQ_DATA_MASK))->pool; |
|---|
| 728 | + return work_struct_pwq(data)->pool; |
|---|
| 725 | 729 | |
|---|
| 726 | 730 | pool_id = data >> WORK_OFFQ_POOL_SHIFT; |
|---|
| 727 | 731 | if (pool_id == WORK_OFFQ_POOL_NONE) |
|---|
| .. | .. |
|---|
| 742 | 746 | unsigned long data = atomic_long_read(&work->data); |
|---|
| 743 | 747 | |
|---|
| 744 | 748 | if (data & WORK_STRUCT_PWQ) |
|---|
| 745 | | - return ((struct pool_workqueue *) |
|---|
| 746 | | - (data & WORK_STRUCT_WQ_DATA_MASK))->pool->id; |
|---|
| 749 | + return work_struct_pwq(data)->pool->id; |
|---|
| 747 | 750 | |
|---|
| 748 | 751 | return data >> WORK_OFFQ_POOL_SHIFT; |
|---|
| 749 | 752 | } |
|---|