diff options
Diffstat (limited to 'kernel/workqueue.c')
| -rw-r--r-- | kernel/workqueue.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 6f74cab2bd5a..51177ffe16f1 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -5792,9 +5792,13 @@ static int workqueue_apply_unbound_cpumask(const cpumask_var_t unbound_cpumask)  	list_for_each_entry(wq, &workqueues, list) {  		if (!(wq->flags & WQ_UNBOUND))  			continue; +  		/* creating multiple pwqs breaks ordering guarantee */ -		if (wq->flags & __WQ_ORDERED) -			continue; +		if (!list_empty(&wq->pwqs)) { +			if (wq->flags & __WQ_ORDERED_EXPLICIT) +				continue; +			wq->flags &= ~__WQ_ORDERED; +		}  		ctx = apply_wqattrs_prepare(wq, wq->unbound_attrs, unbound_cpumask);  		if (IS_ERR(ctx)) { |