Message ID | CAAxE2A5LsHiQARHQFHDnOoO-D2iU-K_i55QSrzkoHenKur+z1w@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
The patch does indeed fix the crashes. The cutscenes run through now without problems. Thank you very much. Am 01.08.2014 um 13:36 schrieb Marek Olšák: > Does the attached libdrm patch fix the issue for you? > > Marek > > On Fri, Aug 1, 2014 at 1:16 PM, Marek Olšák <maraeo@gmail.com> wrote: >> Not in this case. You added a fail path to a function which isn't >> supposed to fail under these circumstances. No wonder Mesa couldn't >> cope with it. It really has nothing to do with your original issue. >> >> Marek >> >> On Fri, Aug 1, 2014 at 9:25 AM, Jochen Rollwagen <joro-2013@t-online.de> wrote: >>> I've built the latest libdrm and replaced the assertion in radeon_cs_gem.c. >>> with >>> >>> if (!boi->space_accounted) return -EINVAL; >>> >>> I now get the following crash in the cutscene: >>> >>> >>> CS section size missmatch start at (r200_state_init.c,ctx_emit_cs,487) 28 vs >>> 24 >>> CS section end at (r200_state_init.c,ctx_emit_cs,520) >>> CS section size missmatch start at (r200_state_init.c,tex_emit_mm,572) 13 vs >>> 11 >>> CS section end at (r200_state_init.c,tex_emit_mm,588) >>> drmRadeonCmdBuffer: -22. Kernel failed to parse or rejected command stream. >>> See dmesg for more info. >>> >>> >>> dmesg output is: >>> >>> [ 1232.744676] [drm:radeon_cs_packet_next_reloc] *ERROR* No packet3 for >>> relocati >>> on for packet at 34. >>> [ 1232.744691] [drm] ib[34]=0x00000712 >>> [ 1232.744694] [drm] ib[35]=0x00010340 >>> [ 1232.744698] [drm:r200_packet0_check] *ERROR* No reloc for ib[33]=0x1C40 >>> [ 1232.744701] [drm] ib[32]=0x00000710 >>> [ 1232.744704] [drm] ib[33]=0x00000000 >>> [ 1232.744707] [drm:radeon_cs_ib_chunk] *ERROR* Invalid command stream ! >>> >>> So it's really a mesa bug :-( >>> >>> >>> >>> Am 27.07.2014 um 14:47 schrieb Marek Olšák: >>>> I think the problem is the driver hasn't called >>>> >>>> radeon_cs_space_add_persistent_bo. >>>> >>>> Marek >>>> >>>> On Fri, Jul 25, 2014 at 6:32 PM, Jochen Rollwagen <joro-2013@t-online.de> >>>> wrote: >>>>> I've recently ported the peopsxgl OpenGL-GPU-Plugin for the pcsx >>>>> Playstation1 Emulator to the Powerpc-architecture. When running certain >>>>> games (for instance "Vagrant Stories") during longer cut-scenes i get a >>>>> reproducible crash of the radeon drm driver (i.e. it always crashes at >>>>> certain points in the scene) with the following message (in german): >>>>> >>>>> pcsx: radeon_cs_gem.c:181: cs_gem_write_reloc: Zusicherung >>>>> »boi->space_accounted« nicht erfüllt. >>>>> Abgebrochen (Speicherabzug geschrieben) >>>>> >>>>> This happens with all the latest 3.10, 3.12 and 3.14 kernels. >>>>> >>>>> Other than that i'm running the latest xorg-ati driver, libdrm and mesa >>>>> from >>>>> git on a Mac Mini G4 (PowerPC). >>>>> >>>>> OpenGL vendor string: Mesa Project >>>>> OpenGL renderer string: Mesa DRI R200 (RV280 5962) TCL DRI2 >>>>> OpenGL version string: 1.3 Mesa 10.1.6 (git-42f86ef) >>>>> >>>>> I guess the issue is memory/vm/swap-related since the machine only has 1 >>>>> gb >>>>> RAM. The GPU has 64 MB VRAM. >>>>> >>>>> Any ideas what i could do to avoid these crashes ? >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> dri-devel mailing list >>>>> dri-devel@lists.freedesktop.org >>>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel >>>
From a9410a10d2b0986b93d76d1e14c545d64c4e70bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> Date: Fri, 1 Aug 2014 13:30:50 +0200 Subject: [PATCH] radeon: allow write_reloc with unaccounted buffers to cope with Mesa bug --- radeon/radeon_cs_gem.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/radeon/radeon_cs_gem.c b/radeon/radeon_cs_gem.c index b87c6b1..bcfa05b 100644 --- a/radeon/radeon_cs_gem.c +++ b/radeon/radeon_cs_gem.c @@ -178,6 +178,15 @@ static int cs_gem_write_reloc(struct radeon_cs_int *cs, uint32_t idx; unsigned i; + if (!boi->space_accounted) { + struct radeon_cs *rcs = (struct radeon_cs*)cs; + int r; + + radeon_cs_space_add_persistent_bo(rcs, bo, read_domain, write_domain); + r = radeon_cs_space_check(rcs); + if (r) + return r; + } assert(boi->space_accounted); /* check domains */ -- 1.9.1