From patchwork Mon Jan 23 19:42:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Darren Stevens X-Patchwork-Id: 718741 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v6hjc0kxhz9t0q for ; Tue, 24 Jan 2017 06:49:56 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3v6hjb6jcrzDqfh for ; Tue, 24 Jan 2017 06:49:55 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org X-Greylist: delayed 324 seconds by postgrey-1.36 at bilbo; Tue, 24 Jan 2017 06:48:57 AEDT Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.134]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3v6hhT57mczDqJ7 for ; Tue, 24 Jan 2017 06:48:57 +1100 (AEDT) Received: from mintppc.lan ([86.156.215.177]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.163]) with ESMTPA (Nemesis) id 0M323z-1cCqHt0eoB-00stdq; Mon, 23 Jan 2017 20:42:58 +0100 From: Darren Stevens To: linuxppc-dev@lists.ozlabs.org Date: Mon, 23 Jan 2017 19:42:54 +0000 (GMT) Message-ID: <497a1d88a93.7082e0e9@auth.smtp.1and1.co.uk> User-Agent: YAM/2.9p1 (AmigaOS4; PPC; rv:20140418r7798) Subject: [PATCH] powerpc: Add missing error check to prom_find_boot_cpu() MIME-Version: 1.0 Content-type: multipart/mixed; boundary="--=_BOUNDARY.6f03750017b43ca.8c" X-Provags-ID: V03:K0:gYlwbIB8u3/ug4kSJu8sVyNwZQVOyyMAx+XKzWKayoLJidNFrNL frAFxLH9PvK5Amo0+V20Lyq8CjuajL7DXXXzjAFIdXkuGpnt6RNaHzksspRVYUHboG65ZRy 1xyIpwKRNASiIr+1z8u9971XP5JhtDByvdgQUOIKUFewKiD3phHU6iOvL0cpqdZQjN6hTvW +quuSYha/A/LVt7UjGS8w== X-UI-Out-Filterresults: notjunk:1; V01:K0:dyHqnJKSMqw=:m1L2YKdxFfkq7bRZDQpMKK 55vPq6tU5Rmmih5bOunPn+FYKHEQ1/btJKiAohJfcVXqIKmb4emN6BmtxGLOpALuKCRybi279 JVOXTw7vULnzSbVf3EyczPoMC7TO8yvH/Q2yisrPCULIGrQqphq3N8oF7aCUF+DRRHD9UfSKl 1MVqGqcV7W15RXeLXsMeCggktaGOsNREyYmuRsEDPaMUKA1UItPO9tD75U0HO6VWbK2ckhdap K8MaulWkxygZTssDJma3cWcbyz5asUYbUwEb+QIvOMjqK81PVbAIlOh6A42/pxKAmX4r3SvMl vT3ygrYaVVwc+mv8URMwGaszOnkYdbwViip8anPHDilMwD7jsdxpWOIhcYPlLatZ7nGclkh9H 2gjU+MT6Z5ejLbi+PpLDMohUzBq8GgQveqUY22O+huC2p3Nx0OR1rNTbtQoj1S95PdiD+GrRC dw9AO/AHecpLZWCDbVxJVEpeibyV8GH6pboA8zFDSdUyc2cZ1yJGIQdSmdZ90E4ZT8FXYPXUu /qZ0UXKnZtJTKAl92DOtWtFoHkS8By8PbjYYhu0CX1wfDShwzr0Ajfa6ve4E4XIsX3vxzWNTs H5MTFRonmpcTDrpEx9mKXuQc7pe5EkDN5hCdc1pCxB+jd3Ff9htq40RdyqeGVtpRsnqOQkS2M kQ7M6Pr3Ww6oUwXDcqedgMT7zkkmn21gBIcMUWNk0ZXo73qtVzhRDHv8llbySvl3cBi4= X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pat Wall , rtd@a-eon.com, aperez@alexperez.com, Christian Zigotzky Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" prom_init.c calls 'instance-to-package' twice, but the return is not checked during prom_find_boot_cpu(). The result is then passed to prom_getprop, which could be PROM_ERROR. Add a return check to prevent this. This was found on a pasemi system, where CFE doesn't have a working 'instance-to package' prom call. Before Commit 5c0484e25ec0 ('powerpc: Endian safe trampoline') the area around addr 0 as mostly 0's and this doesn't cause a problem. Once the macro 'FIXUP_ENDIAN' has been added to head_64.S, the low memory area now has non-zero values, which cause the prom_getprop call to hang. Signed-off-by: Darren Stevens diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index ec47a93..ac83eb0 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -2834,6 +2834,9 @@ static void __init prom_find_boot_cpu(void) cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu); + if (!PHANDLE_VALID(cpu_pkg)) + return; + prom_getprop(cpu_pkg, "reg", &rval, sizeof(rval)); prom.cpu = be32_to_cpu(rval);