Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp529768ybb; Thu, 28 Mar 2019 07:16:02 -0700 (PDT) X-Google-Smtp-Source: APXvYqz5F+q3yJOJbfQLrtOEIoJt2cLTYuThPhE2yANUKX1b6IKHfn+P4aM15vLGGUPCMjtoEbXm X-Received: by 2002:a17:902:a98b:: with SMTP id bh11mr43020597plb.63.1553782562881; Thu, 28 Mar 2019 07:16:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553782562; cv=none; d=google.com; s=arc-20160816; b=yTrIMw5i7Tq2rDB4iWbJvzXGvNiwb8Px4AU1bxbl9ydN7bFmZp1Zfua2RhNU86irrJ yJe6HP2KHbFsslIfaQTB68UmswpYSC22IfebIEzj1gEC/Tk0zhupv4GEUkoMk+H/Zw7a l2J8whNegmhSCv0CkYtogWLeIp3V0yDwOweqS2qlQamqbLbEv4uPQySgwJTRRXWtJN4t c/kCjUOgpKbSqdnyOPRDinzunFPwXVj0BYsJ7MMQzO2hYYQiDY3K/1niJDVP7nq9MV/t Zzns1rc6x+D19HvtLGOUhcHlS9nrvLGSW0hFGA0p7+cjQHXh+djwzydAv84CEjJqGL0k CgMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:mime-version:dkim-signature; bh=Dk3hdTbij2Au0MH5knobY1JlxJKgLSyinoZspJf6oLc=; b=mYg19hyNpBPR7AVVwmrR7kJeSSLBUEydbrp1LTa+QeyV7LwKRlmIJUTOvKPzODzk6a 2HhT+3hz0pXBBR8DiSMZhQ+qO7HRYkL7YUOK+k+extugHm548ZIGsjbIJ9ErlFho7IXa JxA3SKdb1pMRTvoRZlO9wJSwyOBb5l+pv4sYI/fwxoLvHirvSdHcm1KfOZeS8UKD+/43 y538wh7GsdxRUbgkS3EEdWvG7c958Vl1lPs18H4q/R1yvln4Cfa+zaAxJxQHqfRTFrRW UWSavWLtyG8WY96Sm/BYv5Kha0GKRIJ8THOuYDtFrf8Jq733JrR7UIzE+UvVzw7HLJHn TbOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mprWfI9i; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r4si21122395plo.416.2019.03.28.07.15.46; Thu, 28 Mar 2019 07:16:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mprWfI9i; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726839AbfC1OOZ (ORCPT + 99 others); Thu, 28 Mar 2019 10:14:25 -0400 Received: from mail-vs1-f68.google.com ([209.85.217.68]:40015 "EHLO mail-vs1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726150AbfC1OOZ (ORCPT ); Thu, 28 Mar 2019 10:14:25 -0400 Received: by mail-vs1-f68.google.com with SMTP id f22so8499214vso.7 for ; Thu, 28 Mar 2019 07:14:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc :content-transfer-encoding; bh=Dk3hdTbij2Au0MH5knobY1JlxJKgLSyinoZspJf6oLc=; b=mprWfI9i8VxhHngvvbaXfhphznpR93dnJ0i0FqQDr1gC930tbL8FSi09J0xPNIX3q8 M+LAx9sLYCDKoTViVqkX5XeTPBRaWAiO881yqbzaFUS1/bX2zP0WVLyV9CF9gOzX9ptO oHq+c+ST4A4z0LpG0RqeUxQ+YxOdEYqeSTBQTf6mxxgwN+fMMZplGMYzCUy0eR67YU8j NFyt0d5N9lx5YsydPl4II0oUN5NXRSxoNroaFqZDAJ75ciq3JQDKqmakRJE5hfMoW7Gb 2RbIUv8Mv3yzn5ZRbTRnozgBbidk3VYaO1VKL3wUY1qYNwgzvrU/VmRaOBEcnyoxHUmc d82w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc :content-transfer-encoding; bh=Dk3hdTbij2Au0MH5knobY1JlxJKgLSyinoZspJf6oLc=; b=Ynjuq2+SlIO227Uaf82DlbwRGK1u8bah8VCJF0sNmqzDOtQ5JHsSmI2eQkPv81dO/u hXC3DSr1QXyfYb6OnQBa3WHQCZXF3Qdh4714LD1wcgBcZde3AzEKxz8dJuQxBO+g96DI M3iyLg9KDFI9DbJQQ2TNjPAYwbAECAzhVqZtTn7x7ZdmovWqeBQIDId/zP3XaWTrkkp0 Bzuqz/YyUzXm9G5VgXsu8IOPSdLkj8m7CsKTWZQyb2XRvQihTWrIDMnPdwlMJCf8+A4J mv4uDskO7uQxalY5mdh/8Yh/hyaMMoRernwk7A+vw1SvwsyZOtznfowOa33tYACHBTuY xzwA== X-Gm-Message-State: APjAAAVvxK6Z1eVqmek+15iDetxkMMPpzcNKfOnYSRrmRrMa2I0eqzIo TILcCu4R+Nk4AeA2jKb48WT3GSSvKwW7M9S0c0wgXg== X-Received: by 2002:a67:eeda:: with SMTP id o26mr8610425vsp.209.1553782463767; Thu, 28 Mar 2019 07:14:23 -0700 (PDT) MIME-Version: 1.0 From: Alexander Potapenko Date: Thu, 28 Mar 2019 15:14:12 +0100 Message-ID: Subject: Potentially missing "memory" clobbers in bitops.h for x86 To: Paul McKenney , Peter Zijlstra , "H. Peter Anvin" , Ingo Molnar Cc: LKML , Dmitriy Vyukov , James Y Knight Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, arch/x86/include/asm/bitops.h defines clear_bit(nr, addr) for non-constant |nr| values as follows: void clear_bit(long nr, volatile unsigned long *addr) { asm volatile("lock; btr %1,%0" : "+m"(*(volatile long *)addr) : "Ir" (nr)); } (https://elixir.bootlin.com/linux/latest/source/arch/x86/include/asm/bitops= .h#L111) According to the comments in the file, |nr| may be arbitrarily large. However the assembly constraints only imply that the first unsigned long value at |addr| is written to. This may result in the compiler ignoring the effect of the asm directive. Consider the following example (https://godbolt.org/z/naTmjn): #include void clear_bit(long nr, volatile unsigned long *addr) { asm volatile("lock; btr %1,%0" : "+m"(*(volatile long *)addr) : "Ir" (nr)); } unsigned long foo() { unsigned long addr[2] =3D {1, 2}; clear_bit(65, addr); return addr[0] + addr[1]; } int main() { printf("foo: %lu\n", foo()); } Depending on the optimization level, the program may print either 1 (for -O0 and -O1) or 3 (for -O2 and -O3). This is because on higher optimization levels GCC assumes that addr[1] is unchanged and directly propagates the constant to the result. I suspect the definitions of clear_bit() and similar functions are lacking the "memory" clobber. But the whole file tends to be very picky about whether this clobber needs to be applied in each case, so in the case of a performance penalty we may need to consider alternative approaches to fixing this code. --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg