From: Gerd Hoffmann <kraxel@redhat.com> To: Hillf Danton <hdanton@sina.com> Cc: Jaak Ristioja <jaak@ristioja.ee>, Dave Airlie <airlied@redhat.com>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, virtualization@lists.linux-foundation.org, spice-devel@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: Xorg indefinitely hangs in kernelspace Date: Mon, 9 Sep 2019 07:52:19 +0200 [thread overview] Message-ID: <20190909055219.q44k27cczwkuio3z@sirius.home.kraxel.org> (raw) In-Reply-To: <20190906055322.17900-1-hdanton@sina.com> Hi, --verbose please. Do you see the same hang? Does the patch fix it? > --- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c > +++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c > @@ -97,8 +97,9 @@ int ttm_eu_reserve_buffers(struct ww_acq > struct list_head *dups, bool del_lru) [ ... ] > + if (locked) > + ttm_eu_backoff_reservation_reverse(list, entry); Hmm, I think the patch is wrong. As far I know it is the qxl drivers's job to call ttm_eu_backoff_reservation(). Doing that automatically in ttm will most likely break other ttm users. So I guess the call is missing in the qxl driver somewhere, most likely in some error handling code path given that this bug is a relatively rare event. There is only a single ttm_eu_reserve_buffers() call in qxl. So how about this? ----------------------- cut here -------------------- diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c index 312216caeea2..2f9950fa0b8d 100644 --- a/drivers/gpu/drm/qxl/qxl_release.c +++ b/drivers/gpu/drm/qxl/qxl_release.c @@ -262,18 +262,20 @@ int qxl_release_reserve_list(struct qxl_release *release, bool no_intr) ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos, !no_intr, NULL, true); if (ret) - return ret; + goto err_backoff; list_for_each_entry(entry, &release->bos, tv.head) { struct qxl_bo *bo = to_qxl_bo(entry->tv.bo); ret = qxl_release_validate_bo(bo); - if (ret) { - ttm_eu_backoff_reservation(&release->ticket, &release->bos); - return ret; - } + if (ret) + goto err_backoff; } return 0; + +err_backoff: + ttm_eu_backoff_reservation(&release->ticket, &release->bos); + return ret; } void qxl_release_backoff_reserve_list(struct qxl_release *release) ----------------------- cut here -------------------- cheers, Gerd
WARNING: multiple messages have this Message-ID (diff)
From: Gerd Hoffmann <kraxel@redhat.com> To: Hillf Danton <hdanton@sina.com> Cc: David Airlie <airlied@linux.ie>, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, Daniel Vetter <daniel@ffwll.ch>, spice-devel@lists.freedesktop.org, Jaak Ristioja <jaak@ristioja.ee>, Dave Airlie <airlied@redhat.com> Subject: Re: Xorg indefinitely hangs in kernelspace Date: Mon, 9 Sep 2019 07:52:19 +0200 [thread overview] Message-ID: <20190909055219.q44k27cczwkuio3z@sirius.home.kraxel.org> (raw) In-Reply-To: <20190906055322.17900-1-hdanton@sina.com> Hi, --verbose please. Do you see the same hang? Does the patch fix it? > --- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c > +++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c > @@ -97,8 +97,9 @@ int ttm_eu_reserve_buffers(struct ww_acq > struct list_head *dups, bool del_lru) [ ... ] > + if (locked) > + ttm_eu_backoff_reservation_reverse(list, entry); Hmm, I think the patch is wrong. As far I know it is the qxl drivers's job to call ttm_eu_backoff_reservation(). Doing that automatically in ttm will most likely break other ttm users. So I guess the call is missing in the qxl driver somewhere, most likely in some error handling code path given that this bug is a relatively rare event. There is only a single ttm_eu_reserve_buffers() call in qxl. So how about this? ----------------------- cut here -------------------- diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c index 312216caeea2..2f9950fa0b8d 100644 --- a/drivers/gpu/drm/qxl/qxl_release.c +++ b/drivers/gpu/drm/qxl/qxl_release.c @@ -262,18 +262,20 @@ int qxl_release_reserve_list(struct qxl_release *release, bool no_intr) ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos, !no_intr, NULL, true); if (ret) - return ret; + goto err_backoff; list_for_each_entry(entry, &release->bos, tv.head) { struct qxl_bo *bo = to_qxl_bo(entry->tv.bo); ret = qxl_release_validate_bo(bo); - if (ret) { - ttm_eu_backoff_reservation(&release->ticket, &release->bos); - return ret; - } + if (ret) + goto err_backoff; } return 0; + +err_backoff: + ttm_eu_backoff_reservation(&release->ticket, &release->bos); + return ret; } void qxl_release_backoff_reserve_list(struct qxl_release *release) ----------------------- cut here -------------------- cheers, Gerd
next prev parent reply other threads:[~2019-09-09 5:53 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-09-06 5:53 Xorg indefinitely hangs in kernelspace Hillf Danton 2019-09-06 20:27 ` [Spice-devel] " Frediano Ziglio 2019-09-06 20:27 ` Frediano Ziglio 2019-09-07 2:00 ` Hillf Danton 2019-09-07 2:00 ` Hillf Danton 2019-09-07 2:00 ` Hillf Danton 2019-09-07 2:00 ` [Spice-devel] " Hillf Danton 2019-09-09 5:52 ` Gerd Hoffmann [this message] 2019-09-09 5:52 ` Gerd Hoffmann 2019-09-09 7:13 ` Hillf Danton 2019-09-09 7:13 ` Hillf Danton 2019-09-09 7:13 ` Hillf Danton -- strict thread matches above, loose matches on Subject: below -- 2019-09-09 12:12 Hillf Danton 2019-08-06 18:00 Jaak Ristioja 2019-09-05 7:14 ` Gerd Hoffmann 2019-09-05 7:14 ` Gerd Hoffmann 2019-09-05 12:34 ` Jaak Ristioja 2019-09-05 12:34 ` Jaak Ristioja 2019-09-24 9:12 ` Jaak Ristioja 2019-09-24 9:12 ` Jaak Ristioja 2019-09-05 7:14 ` Gerd Hoffmann
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190909055219.q44k27cczwkuio3z@sirius.home.kraxel.org \ --to=kraxel@redhat.com \ --cc=airlied@linux.ie \ --cc=airlied@redhat.com \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=hdanton@sina.com \ --cc=jaak@ristioja.ee \ --cc=linux-kernel@vger.kernel.org \ --cc=spice-devel@lists.freedesktop.org \ --cc=virtualization@lists.linux-foundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.