Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1133064iob; Thu, 12 May 2022 11:53:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwP0bThpFpbJZ7vgRfRcpvy7IsTyHRg95GUFH6cDCAk0n8gOrA5O/WExI5nbjwSbS6c7FzI X-Received: by 2002:a65:6d09:0:b0:3aa:1ecf:8848 with SMTP id bf9-20020a656d09000000b003aa1ecf8848mr800612pgb.55.1652381624359; Thu, 12 May 2022 11:53:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652381624; cv=none; d=google.com; s=arc-20160816; b=bYyFKo5AeAF8UTKt+fUYkAK/ceurKQI51MNw3q4mK6wKUPg3NTXcHRKowZyOZbaZMm AFEu84k6uHozQUJjpY48/Q/DMaffBjS7g3dcpLnlTRkZ0i1bfDf2wtDlExwVs0IBmK/F lq0+ge5ErgOEm7XKcqm0Sb1OumW+HW1PXZc+fLec/4zlh6LVyCCxFrHfvYJKmTxQoP+E W6yuH89cLx8EEiirDF2iD0qqRqUalEfTS/Cl827RV4lpoD+lLUIaMhRG8x6UEErYsn8z L+uvkp+BAH7qg+04oLX+C1Yd2P3j8ZPA0Q6/Zq8kefGZWoW9ww59l4NZou9dESy+wlt0 0nSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:dkim-signature:dkim-signature:from; bh=tU5R0oUSocyA3MxRM564LYiuixGd7K4ozSHlUmSLzHI=; b=H+9l5cxFkgq5YGtnWY9u6n+GcN7Jky5UTql0A+NB2uesGtvM9Q5csaLFQLAUgFHnw7 bSEjtEduHXUUOzhNO3J1or7xSf8QgL9QP2Jr1rJW3MzSUrdSTwQQO9FlXd6hOa7aOjR4 IAIYy+YzTaXzyTVW1Q24f4h5cJWtgC+rL2Y7xPEK6SrUVH0u6t3h+NaTsdSlaLDw1oC3 OUWzXiZ6BKoIw0hHp0XXPjoqzC2W5h1vo8ARabusxQwb3R16mMEo9DPyj+M5gyZqexoi cvW8lZA4WAi1vVWzA75UF10tAeRGW0LyWVxWa0Vk6EVf+G7F8oRkyiyyFKywtlvVHtRf 3GEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=LbPNYrty; dkim=neutral (no key) header.i=@linutronix.de header.b=BaBb+Mh9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p2-20020a654902000000b003993007c4basi207650pgs.626.2022.05.12.11.53.29; Thu, 12 May 2022 11:53:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=LbPNYrty; dkim=neutral (no key) header.i=@linutronix.de header.b=BaBb+Mh9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354086AbiELNGp (ORCPT + 99 others); Thu, 12 May 2022 09:06:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351021AbiELNGm (ORCPT ); Thu, 12 May 2022 09:06:42 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84FFF5DA4B for ; Thu, 12 May 2022 06:06:41 -0700 (PDT) From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1652360799; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=tU5R0oUSocyA3MxRM564LYiuixGd7K4ozSHlUmSLzHI=; b=LbPNYrty+ztXBREIQ8dN9l2FL71M/k2cJyRdgBYL4uqjO2PaPlSjpIKuWVc2Af3b32yPe3 WRFj5MMmgkF8on2M902Bxg/EvvU+zLfMiLNcQ0BeYZIpiLUqU/v7qRLp7EXO7WubapDr5b y+P1XeeWe9AoVBfcfMYRrORojtCQWQJkj/g5p67sROSDzmHaj6HFtAjJRM0vq3+kZ7S3A5 M0nSsI0Em0ZZMuZ3tmWMDMlyTgULNIEbIeN91M3ou4zi3bteUI9ClP4cBxbCkn7+FHN4dK 2mLpaLojfVPOOWdNPA8GxJTst9FKZphCsvFf6exYcajuzbJDdJLsUXyjeDPlOg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1652360799; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=tU5R0oUSocyA3MxRM564LYiuixGd7K4ozSHlUmSLzHI=; b=BaBb+Mh9+cvyEdyShOUxJpim5uzRIvh9yvb0uSnm78y5U86So7HUzvOJLGjHgnnb4DKz3e tZB4nYwgLwrk9fAQ== To: "Kirill A. Shutemov" , Dave Hansen , Andy Lutomirski , Peter Zijlstra Cc: x86@kernel.org, Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , "H . J . Lu" , Andi Kleen , Rick Edgecombe , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: Re: [RFCv2 05/10] x86/mm: Provide untagged_addr() helper In-Reply-To: <20220511022751.65540-7-kirill.shutemov@linux.intel.com> References: <20220511022751.65540-1-kirill.shutemov@linux.intel.com> <20220511022751.65540-7-kirill.shutemov@linux.intel.com> Date: Thu, 12 May 2022 15:06:38 +0200 Message-ID: <87a6bmx5lt.ffs@tglx> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 11 2022 at 05:27, Kirill A. Shutemov wrote: > +#define __untagged_addr(addr, n) \ > + ((__force __typeof__(addr))sign_extend64((__force u64)(addr), n)) How is this supposed to be correct? This sign extends based on bit 47 resp. 56, i.e. the topmost bit of the userspace address space for the LAM mode. So if that bit _is_ set, then the result has bit 48-63 resp. 57-63 set as well. Not really what you want, right? This has to mask out bit 48-62 resp. 57-62 and leave all other bits alone. > +#define untagged_addr(addr) ({ \ > + u64 __addr = (__force u64)(addr); \ > + if (__addr >> 63 == 0) { \ > + if (current->thread.features & X86_THREAD_LAM_U57) \ > + __addr &= __untagged_addr(__addr, 56); \ > + else if (current->thread.features & X86_THREAD_LAM_U48) \ > + __addr &= __untagged_addr(__addr, 47); \ > + } \ > + (__force __typeof__(addr))__addr; \ > +}) So this wants something like this: #define untagged_addr(addr) ({ \ u64 __addr = (__force u64)(addr); \ \ __addr &= current->thread.lam_untag_mask; \ (__force __typeof__(addr))__addr; \ }) No conditionals, fast _and_ correct. Setting this untag mask up once when LAM is enabled is not rocket science. Thanks, tglx