Received: by 10.223.176.5 with SMTP id f5csp1840829wra; Wed, 31 Jan 2018 12:26:17 -0800 (PST) X-Google-Smtp-Source: AH8x227UUl+o5ijWethYovmfLzs1MotX/+etGOIC+P6iozt4cvSWlixHD97+irsKmPIbnZYIN/sr X-Received: by 10.101.91.193 with SMTP id o1mr10891927pgr.315.1517430377350; Wed, 31 Jan 2018 12:26:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517430377; cv=none; d=google.com; s=arc-20160816; b=CIjzXh+xc3bxOH9Ixp2UHyanCT+7I8+4B2ZE6avHvKprNEejim+9NyhZudu+GBsaxr ApqGKXZLtzhRMjr6W0QRsWb4QAFihHWhXTDnrmLoqoVAXxQnoM2Y7aocsS+8EFlncjnf TivLPdvjSc++/dgWAvoZJ9+NQrjHuFnGEgLe93KEEbBLd8H8I7anY/+9H+ev/O/oEJm8 6JUk8/bujQqiPSI6PjJh6OCWvLPMGkBt8kTN4r7HKfZwS3E3zaRfN9N+e/8DxX2b2Asa Kv9+cVlZ/FrYRvEB8GUnWweIcrBnCtnf0xAsG9ZnbCmUHZi77KIVbbLnWM2qGtUAchPb z3nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version:dkim-signature:arc-authentication-results; bh=tXQe6lx3W2twak/1fkmZh4Q9hDhn00R2KQF/nZdfUSg=; b=r+XOYGPIZxkOjdQJkwELdivXCtaTtvuCo4ULwrsp/UrbSlBfmV8d+qEau9eIbxqKxp ka4bFDVm2py+r+cpJDfw/LRqOiECORo3NRYd6nuiruZmFIbv10yiwvjYX+c8eXf2LVMF x9771l1Wi5H0z0AHMAhsnLG1CY1u8dz/mj8GpeqL/PHpm5Fh7/JU0skfvkhPebUtUstF DGSyucEms2TkmDAabPPaJY3BYoj5ujNN7SBDicVRIVoViIphNZlIiY5E/VgGU4J2ha2f LKtGJSnDOzycnP4+gx3OhvHwiyemkUFb/K/IgdkrbGXmZPuQc2i5WugnGuteEXrvy9Iy Adgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amacapital-net.20150623.gappssmtp.com header.s=20150623 header.b=mdGEUkyO; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b18-v6si2363080pls.191.2018.01.31.12.26.02; Wed, 31 Jan 2018 12:26:17 -0800 (PST) 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=@amacapital-net.20150623.gappssmtp.com header.s=20150623 header.b=mdGEUkyO; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752799AbeAaUYt (ORCPT + 99 others); Wed, 31 Jan 2018 15:24:49 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:36692 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752311AbeAaUYr (ORCPT ); Wed, 31 Jan 2018 15:24:47 -0500 Received: by mail-pg0-f65.google.com with SMTP id k68so10981917pga.3 for ; Wed, 31 Jan 2018 12:24:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amacapital-net.20150623.gappssmtp.com; s=20150623; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=tXQe6lx3W2twak/1fkmZh4Q9hDhn00R2KQF/nZdfUSg=; b=mdGEUkyObBgrNx8jVdGjm+u/4LcQwFK1nTnLqXLltHk1FbAj+McIokHjckEanLRpi6 39NwbBe6+jsU5da4qYfkF1289u4zQas5DnidFZx7wBStQOxFUN5S7Ad1aEf07Wllzdu4 oslLQ9unal7cNyiz8ZNqgVe3rUyTu+5EgYv3IbCs+f/fDK6dfCbDlDfQ+L2p8trnrOuY F5Q5qkML0YBlqRVa2JAYs/nrzsua6RJ4aJaGJQBKm6BAv+F4Jb+L/H7DE+5ZPL3/wakT T3xtxsL53JwX3xSX9z578OiGh8Cto98KHQn0yXAS63ED3xxOaemZAmFIZ/HtERqkqlJC +kDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=tXQe6lx3W2twak/1fkmZh4Q9hDhn00R2KQF/nZdfUSg=; b=pv6DAI+30SBM3honVNvyzZyGYk36RUkU5UXK71Wiqc4sR4QBsLkeaihKh//wryTTwx 5vVexyf676D9uPeZpN3aZ0GVezs4V6SFjqxyOylMtb40bR0rDFoJnBUoKYs/JCR+azrk YUcJkZbB2UnAUoJh/bCYwcLADDgfjWc+3006syieve8c0Uue3p9vdqSNzgGL5ENIQ1aM t8cRTCFkow57Zc9HuzHCYlte00NuNE4H8rRsaDhfoO9qWwwPitbw+/hoiGqlelSb6zyQ PQqD+GFbdem0vWfgt5k1cC93RRKQUz/aE0zJ+peswscjIH9shtJFl6BQYiz7kTFtyniY wILA== X-Gm-Message-State: AKwxytduqe9yftk3u3FGa9ctP4BrccrS9rmtdGi1fuVSuXP7miDsz774 GUpwKpDy4uCURGELt8WL0sPLYw== X-Received: by 10.99.111.68 with SMTP id k65mr27415487pgc.446.1517430287117; Wed, 31 Jan 2018 12:24:47 -0800 (PST) Received: from ?IPv6:2600:1010:b012:ea6:dc7:7fe:8643:2c24? ([2600:1010:b012:ea6:dc7:7fe:8643:2c24]) by smtp.gmail.com with ESMTPSA id w83sm43680104pfi.56.2018.01.31.12.24.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Jan 2018 12:24:46 -0800 (PST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: [PATCH] x86: Align TLB invalidation info From: Andy Lutomirski X-Mailer: iPhone Mail (15C202) In-Reply-To: <20180131201118.1694-1-namit@vmware.com> Date: Wed, 31 Jan 2018 12:24:44 -0800 Cc: x86@kernel.org, Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , linux-kernel@vger.kernel.org, Peter Zijlstra , Nadav Amit , Andy Lutomirski , Dave Hansen Content-Transfer-Encoding: quoted-printable Message-Id: References: <20180131201118.1694-1-namit@vmware.com> To: Nadav Amit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On Jan 31, 2018, at 12:11 PM, Nadav Amit wrote: >=20 > The TLB invalidation info is allocated on the stack, which might cause > it to be unaligned. Since this information may be transferred to > different cores for TLB shootdown, this might result in an additional > cache-line bouncing between the cores. >=20 > GCC provides a way to deal with it by using > __builtin_alloca_with_align(). Use it to avoid the bouncing cache lines. >=20 Eww. How about __aligned? > Signed-off-by: Nadav Amit >=20 > Cc: Andy Lutomirski > Cc: Dave Hansen > --- > arch/x86/mm/tlb.c | 21 +++++++++++---------- > include/linux/compiler-gcc.h | 5 +++++ > include/linux/compiler_types.h | 4 ++++ > 3 files changed, 20 insertions(+), 10 deletions(-) >=20 > diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c > index 5bfe61a5e8e3..bab7bb5d982f 100644 > --- a/arch/x86/mm/tlb.c > +++ b/arch/x86/mm/tlb.c > @@ -574,37 +574,38 @@ static unsigned long tlb_single_page_flush_ceiling _= _read_mostly =3D 33; > void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, > unsigned long end, unsigned long vmflag) > { > + struct flush_tlb_info *info; > int cpu; >=20 > - struct flush_tlb_info info =3D { > - .mm =3D mm, > - }; > + info =3D __alloca_with_align(sizeof(*info), > + SMP_CACHE_BYTES * BITS_PER_BYTE); > + info->mm =3D mm; >=20 > cpu =3D get_cpu(); >=20 > /* This is also a barrier that synchronizes with switch_mm(). */ > - info.new_tlb_gen =3D inc_mm_tlb_gen(mm); > + info->new_tlb_gen =3D inc_mm_tlb_gen(mm); >=20 > /* Should we flush just the requested range? */ > if ((end !=3D TLB_FLUSH_ALL) && > !(vmflag & VM_HUGETLB) && > ((end - start) >> PAGE_SHIFT) <=3D tlb_single_page_flush_ceiling) {= > - info.start =3D start; > - info.end =3D end; > + info->start =3D start; > + info->end =3D end; > } else { > - info.start =3D 0UL; > - info.end =3D TLB_FLUSH_ALL; > + info->start =3D 0UL; > + info->end =3D TLB_FLUSH_ALL; > } >=20 > if (mm =3D=3D this_cpu_read(cpu_tlbstate.loaded_mm)) { > VM_WARN_ON(irqs_disabled()); > local_irq_disable(); > - flush_tlb_func_local(&info, TLB_LOCAL_MM_SHOOTDOWN); > + flush_tlb_func_local(info, TLB_LOCAL_MM_SHOOTDOWN); > local_irq_enable(); > } >=20 > if (cpumask_any_but(mm_cpumask(mm), cpu) < nr_cpu_ids) > - flush_tlb_others(mm_cpumask(mm), &info); > + flush_tlb_others(mm_cpumask(mm), info); >=20 > put_cpu(); > } > diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h > index 631354acfa72..aea9a2e69417 100644 > --- a/include/linux/compiler-gcc.h > +++ b/include/linux/compiler-gcc.h > @@ -314,6 +314,11 @@ > #define __designated_init __attribute__((designated_init)) > #endif >=20 > +#if GCC_VERSION >=3D 60100 > +#define __alloca_with_align(size, alignment) \ > + __builtin_alloca_with_align(size, alignment) > +#endif > + > #endif /* gcc version >=3D 40000 specific checks */ >=20 > #if !defined(__noclone) > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types= .h > index 6b79a9bba9a7..c71297d95c74 100644 > --- a/include/linux/compiler_types.h > +++ b/include/linux/compiler_types.h > @@ -271,4 +271,8 @@ struct ftrace_likely_data { > # define __native_word(t) (sizeof(t) =3D=3D sizeof(char) || sizeof(t) =3D=3D= sizeof(short) || sizeof(t) =3D=3D sizeof(int) || sizeof(t) =3D=3D sizeof(lo= ng)) > #endif >=20 > +#ifndef __alloca_with_align > +#define __alloca_with_align(size, alignment) __builtin_alloca(size) > +#endif > + > #endif /* __LINUX_COMPILER_TYPES_H */ > --=20 > 2.14.1 >=20