Messages in this thread | | | Subject | Re: [PATCH 8/9] padata: unbind parallel jobs from specific CPUs | From | Daniel Jordan <> | Date | Thu, 22 Aug 2019 18:13:15 -0400 |
| |
On 8/22/19 12:13 AM, Herbert Xu wrote: > On Mon, Aug 12, 2019 at 08:52:23PM -0400, Daniel Jordan wrote: >> >> @@ -191,22 +184,25 @@ static struct padata_priv *padata_get_next(struct parallel_data *pd) >> padata = list_entry(reorder->list.next, >> struct padata_priv, list); >> >> - list_del_init(&padata->list); >> - atomic_dec(&pd->reorder_objects); >> + /* >> + * The check fails in the unlikely event that two or more >> + * parallel jobs have hashed to the same CPU and one of the >> + * later ones finishes first. >> + */ >> + if (padata->seq_nr == pd->processed) { >> + list_del_init(&padata->list); >> + atomic_dec(&pd->reorder_objects); > > Now that you've changed the test for whether there is work to be > done you also need to update the code at the end of padata_reorder > that checks whether there is work to do. Otherwise we can end up > in a busy loop that just wastes CPU cycles.
So we can, thanks for catching that.
| |