Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754294AbbKWQZ7 (ORCPT ); Mon, 23 Nov 2015 11:25:59 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:55925 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754023AbbKWQZz (ORCPT ); Mon, 23 Nov 2015 11:25:55 -0500 From: Arnd Bergmann To: linux-arch@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, rmk@arm.linux.org.uk, josh@joshtriplett.org Subject: [RFC] asm-generic: default BUG_ON(x) to "if(x) BUG()" Date: Mon, 23 Nov 2015 17:25:28 +0100 Message-ID: <5868782.RxZY0W5S4d@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:91T674MzArZiu/CLUzYdniKUjhpegefSZxiOFNXYV8yerAAS7oG owJ1e4GPSvvzdMo5/7uo4s3HA2ijLjLHeijIv1ObIAH0d4bh0XGw7hj4MImZMT3DkPujD/g xOisHHsOfbNtwOWuzBFt+yDgAw/PIL2CD05BvQdgiFygQ5dyXDtbOIxIib7l3Rp3mIEUEPK dEKIqtghxUp0rjI8Sz+ZA== X-UI-Out-Filterresults: notjunk:1;V01:K0:ZVCRhfMcm20=:vqbTdCbA+Br1RhUcKqQmfZ CsRkYTBLdVoV2i+TXR3QywoD2n0OPcXWeGuNJ5GEIOQ+KDb4yUOxQtWjPxea/hQ5Q+pH/HPiY jTQ8R8WNv+wJ2dXUvmCfNHJSD63I0cIcT9yacFgMFNhwMODKH/fueunDNBJt1qfqyKMJZ/gZA 8Q3F9oH8hPT/JfcAxJncrYmXlaNlP6t9Nn7EICY48R9ic7xGr8pxStkgDrq8W2pjvNvfZf8s6 LFp3kulYDa2fi8F44LhU57q30xi989rK0hgnOcZESfVaUFSCfa7VhPvqdLCQT8G/ZgenyNpW5 HZwBs0xRMnARTQKyvW4e2Pkbu93QMb1vjzH0ihE70oJQCH+NIJDNTaUKHI6HVswlBWxlyig6F TqtR49RupZHCFwuPeZZtbgUklclp574UbNHAW2kKQ8mBcZwhBQezbBzmeBEJBEk3RzdHVjq5y /1GjxcsdmB0jcSnFOT1yGLr5d8mdYwN6Js/Hrd292AJe7a0ylA0RbCDGKpOmzPELb9ulV09Wp xBhYUqvip4W2tC94BJ5fqbglovqjLqr4fjLkJV+9OVb20rFDwtQQ2nrW8A6RD459rK/LBwVbx AkbG50F1Fwa4ipPkiBJw8bGMzAu6r9WAp2ZqAgMyaV3ce4BhE63zLwltG6e3Lj5sU+BGhTrCg AKi7mKlh9oL/pCz2KfFknwNSfpbYN4k0xLKvxb8hCmK+51ThhBKCCxhs5NMva8xc+2PPlRDSH /Y5fuuAFr7x/Zmeh Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3466 Lines: 69 When CONFIG_BUG is disabled, BUG_ON() will only evaluate the condition, but will not actually stop the current thread. GCC warns about a couple of BUG_ON() users where this actually leads to further undefined behavior: include/linux/ceph/osdmap.h: In function 'ceph_can_shift_osds': include/linux/ceph/osdmap.h:54:1: warning: control reaches end of non-void function fs/ext4/inode.c: In function 'ext4_map_blocks': fs/ext4/inode.c:548:5: warning: 'retval' may be used uninitialized in this function drivers/mfd/db8500-prcmu.c: In function 'prcmu_config_clkout': drivers/mfd/db8500-prcmu.c:762:10: warning: 'div_mask' may be used uninitialized in this function drivers/mfd/db8500-prcmu.c:769:13: warning: 'mask' may be used uninitialized in this function drivers/mfd/db8500-prcmu.c:757:7: warning: 'bits' may be used uninitialized in this function drivers/tty/serial/8250/8250_core.c: In function 'univ8250_release_irq': drivers/tty/serial/8250/8250_core.c:252:18: warning: 'i' may be used uninitialized in this function drivers/tty/serial/8250/8250_core.c:235:19: note: 'i' was declared here There is an obvious conflict of interest here: on the one hand, someone who disables CONFIG_BUG() will want the kernel to be as small as possible and doesn't care about printing error messages to a console that nobody looks at. On the other hand, running into a BUG_ON() condition means that something has gone wrong, and we probably want to also stop doing things that might cause data corruption. This patch picks the second choice, and changes the NOP to BUG(), which normally stops the execution of the current thread in some form (endless loop or a trap). This follows the logic we applied in a4b5d580e078 ("bug: Make BUG() always stop the machine"). For ARM multi_v7_defconfig, the size slightly increases: section CONFIG_BUG=y CONFIG_BUG=n CONFIG_BUG=n+patch .text 8320248 | 8180944 | 8207688 .rodata 3633720 | 3567144 | 3570648 __bug_table 32508 | --- | --- __modver 692 | 1584 | 2176 .init.text 558132 | 548300 | 550088 .exit.text 12380 | 12256 | 12380 .data 1016672 | 1016064 | 1016128 Total 14622556 | 14374510 | 14407326 So instead of saving 1.70% of the total image size, we only save 1.48% by turning off CONFIG_BUG, but in return we can ensure that we don't run into cases of uninitialized variable or return code uses when something bad happens. Aside from that, we significantly reduce the number of warnings in randconfig builds, which makes it easier to fix the warnings about other problems. Signed-off-by: Arnd Bergmann diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 630dd2372238..58bd1f08c5c7 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h @@ -142,7 +142,7 @@ extern void warn_slowpath_null(const char *file, const int line); #endif #ifndef HAVE_ARCH_BUG_ON -#define BUG_ON(condition) do { if (condition) ; } while (0) +#define BUG_ON(condition) do { if (condition) BUG(); } while (0) #endif #ifndef HAVE_ARCH_WARN_ON -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/