Re: Fwd: Fwd: X stopped working with 5.14 on iBook
From: Christophe Leroy <hidden>
Date: 2021-11-05 17:27:58
Le 05/11/2021 à 00:36, Finn Thain a écrit :
On Thu, 4 Nov 2021, Christophe Leroy wrote:quoted
Le 02/11/2021 à 03:20, Finn Thain a écrit :quoted
Hi Christopher, After many builds and tests, Stan and I were able to determine that this regression only affects builds with CONFIG_USER_NS=y. That is, d3ccc9781560 + CONFIG_USER_NS=y --> fail d3ccc9781560 + CONFIG_USER_NS=n --> okay d3ccc9781560~ + CONFIG_USER_NS=y --> okay d3ccc9781560~ + CONFIG_USER_NS=n --> okay Stan also tested a PowerMac G3 system and found that the regression is not present there. Thus far, only PowerMac G4 systems are known to be affected (Stan's Cube and Riccardo's PowerBook). I asked Stan to try v5.15-rc after reverting commit d3ccc9781560. Unexpectedly, this build had the same issue. So, it appears there are multiple bad commits that produce this Xorg failure, of which d3ccc9781560 is just the first. But there's no easy way to identify the other bad commits using bisection. So I've addressed this message to you. Can you help fix this regression?I'm wondering if this commit is really the cause of the problem. Are you using GCC 11 ? If yes, I think it could be a false positive, fixed by https://github.com/linuxppc/linux/commit/7315e457d6bc Can you try with GCC 10 or older ?AFAIK, all of Stan's builds were made with gcc 10.quoted
Can you cherry pick 7315e457d6bc ("powerpc/uaccess: Fix __get_user() with CONFIG_CC_HAS_ASM_GOTO_OUTPUT") on top of d3ccc9781560 and see what happens ?$ git checkout d3ccc9781560 $ git cherry-pick 7315e457d6bc Auto-merging arch/powerpc/include/asm/uaccess.h CONFLICT (content): Merge conflict in arch/powerpc/include/asm/uaccess.h error: could not apply 7315e457d6bc... powerpc/uaccess: Fix __get_user() with CONFIG_CC_HAS_ASM_GOTO_OUTPUT There is no __get_user_asm2_goto in this tree, and __get_user_asm2 already has the "=&r" constraint: #define __get_user_asm2(x, addr, err) \ __asm__ __volatile__( \ "1: lwz%X2 %1, %2\n" \ "2: lwz%X2 %L1, %L2\n" \ "3:\n" \ ".section .fixup,\"ax\"\n" \ "4: li %0,%3\n" \ " li %1,0\n" \ " li %1+1,0\n" \ " b 3b\n" \ ".previous\n" \ EX_TABLE(1b, 4b) \ EX_TABLE(2b, 4b) \ : "=r" (err), "=&r" (x) \ : "m" (*addr), "i" (-EFAULT), "0" (err))
You are right, __get_user_asm2_goto() was added later. I think I found the issue. __get_user_sigset() is wrong for 32 bits. Could you change its content to return __get_user(*(u64*)&dst->sig[0], (u64 __user *)&src->sig[0]); If it works, for the mainline also change unsafe_get_user_sigset() Christophe