Message ID | CAPM=9txmSVnCVDZ6ni8GfqGSQqJkyuVb3PLf4dtYB0b4FdpraQ@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2014-02-05, 14:50:18 +1000, Dave Airlie wrote: > On Wed, Feb 5, 2014 at 8:53 AM, Sabrina Dubroca <sd@queasysnail.net> wrote: > > 2014-02-04, 13:20:54 +1000, Dave Airlie wrote: > >> On Tue, Feb 4, 2014 at 1:34 AM, Sabrina Dubroca <sd@queasysnail.net> wrote: > >> > When I boot 3.14-rc1 in qemu, I get the trace below. The console stops > >> > updating and I don't get a login prompt. I can login, but I can't see > >> > what I'm doing. I can login normally via SSH. > >> > > >> > If I revert the last commit in drivers/gpu/drm/cirrus: > >> > > >> > f4b4718b61d1d5a7442a4fd6863ea80c3a10e508 drm: ast,cirrus,mgag200: use drm_can_sleep > >> > > >> > the problem is solved. > >> > > >> > >> Hi does the attach patch fix it? > >> > >> Dave. > > > > > > Same problem. Didn't you reverse the logic on in_interrupt, compared > > to the old "if (!in_interrupt())" ? It looks like drm_can_sleep() is > > false when in_interrupt() is true. > > > > I modified your patch as below. Display doesn't freeze, but I still > > get the warning. > > Oh wow I totally screwed up there, you are right, logic inversion. > > Can you try the attached? > > without the in_interrupt addition. > > Dave. It works, thanks! No freeze, no warning. Sabrina
From c39a8bdd2586c616e9b3746db128180d4e0ca8ec Mon Sep 17 00:00:00 2001 From: Dave Airlie <airlied@redhat.com> Date: Wed, 5 Feb 2014 14:47:45 +1000 Subject: [PATCH] drm/mgag200,ast,cirrus: fix regression with drm_can_sleep conversion I totally sign inverted my way out of this one. Reported-by: "Sabrina Dubroca" <sd@queasysnail.net> Signed-off-by: Dave Airlie <airlied@redhat.com> --- drivers/gpu/drm/ast/ast_fb.c | 2 +- drivers/gpu/drm/cirrus/cirrus_fbdev.c | 2 +- drivers/gpu/drm/mgag200/mgag200_fb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c index 3f65dd6..a28640f 100644 --- a/drivers/gpu/drm/ast/ast_fb.c +++ b/drivers/gpu/drm/ast/ast_fb.c @@ -65,7 +65,7 @@ static void ast_dirty_update(struct ast_fbdev *afbdev, * then the BO is being moved and we should * store up the damage until later. */ - if (!drm_can_sleep()) + if (drm_can_sleep()) ret = ast_bo_reserve(bo, true); if (ret) { if (ret != -EBUSY) diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c index 2fd4a92..32bbba0 100644 --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c @@ -39,7 +39,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev, * then the BO is being moved and we should * store up the damage until later. */ - if (!drm_can_sleep()) + if (drm_can_sleep()) ret = cirrus_bo_reserve(bo, true); if (ret) { if (ret != -EBUSY) diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c index f9adc27..13b7dd8 100644 --- a/drivers/gpu/drm/mgag200/mgag200_fb.c +++ b/drivers/gpu/drm/mgag200/mgag200_fb.c @@ -41,7 +41,7 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev, * then the BO is being moved and we should * store up the damage until later. */ - if (!drm_can_sleep()) + if (drm_can_sleep()) ret = mgag200_bo_reserve(bo, true); if (ret) { if (ret != -EBUSY) -- 1.8.4.2