[PATCH] drm/ttm: Schedule out if possibe in bo delayed delete worker
Lucas Stach
l.stach at pengutronix.de
Thu Apr 9 13:25:45 UTC 2020
Am Donnerstag, den 09.04.2020, 14:35 +0200 schrieb Christian König:
> Am 09.04.20 um 03:31 schrieb xinhui pan:
> > The delayed delete list is per device which might be very huge. And in
> > a heavy workload test, the list might always not be empty. That will
> > trigger any RCU stall warnings or softlockups in non-preemptible kernels
> > Lets do schedule out if possible in that case.
>
> Mhm, I'm not sure if that is actually allowed. This is called from a
> work item and those are not really supposed to be scheduled away.
Huh? Workitems can schedule out just fine, otherwise they would be
horribly broken when it comes to sleeping locks. The workqueue code
even has measures to keep the workqueues at the expected concurrency
level by starting other workitems when one of them goes to sleep.
Regards,
Lucas
> Maybe rather change the while into while (!list_empty(&bdev->ddestroy)
> && !should_reschedule(0)).
>
> Christian.
>
> > Signed-off-by: xinhui pan <xinhui.pan at amd.com>
> > ---
> > drivers/gpu/drm/ttm/ttm_bo.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> > index 9e07c3f75156..b8d853cab33b 100644
> > --- a/drivers/gpu/drm/ttm/ttm_bo.c
> > +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> > @@ -541,6 +541,7 @@ static bool ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)
> > }
> >
> > ttm_bo_put(bo);
> > + cond_resched();
> > spin_lock(&glob->lru_lock);
> > }
> > list_splice_tail(&removed, &bdev->ddestroy);
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list