Received: by 10.223.164.202 with SMTP id h10csp2292057wrb; Thu, 16 Nov 2017 12:37:09 -0800 (PST) X-Google-Smtp-Source: AGs4zMbT4rGxeFD2/GQ+a0OB0mMyeueG9v7EpdNL0AZh7545iO4qJfAM5yUZCBkGIBf8Vl9LcurL X-Received: by 10.84.175.3 with SMTP id s3mr2861121plb.440.1510864629075; Thu, 16 Nov 2017 12:37:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510864629; cv=none; d=google.com; s=arc-20160816; b=Ke16vEYUj8xs9zOF9f0Ol6KkZkcIMsIat9eO8pj+u8/O70Y0fZxCw4Rd3kxMkWMZJu pY3A3IBFXQtajar785Q2ePhf+3BMEWBgU66oghq6xBkUMJxGSbnWFSBRludfvXLCK5Sz pcNrjeWCcF69STQK0WeBGAjKSWvuEcaSVbfflhGR/C/eXMcwzVcLSZvmbOA9SaLQAQC8 AZPJFBVZmZq9J8+ox6J1tn25Z1MGeWHu8+aNVvurgyfVu75rHMOvNrZfrexMLVMPIhc1 QJVCDlMaxOpIY+qlfmz0nsccE37SBLBO5VyHrtEgHeehzti+eWqbHkqyy4zN/uK1SIuz RZxQ== 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:references:in-reply-to:mime-version :dkim-signature:arc-authentication-results; bh=lmL6dKbuLl334PiFxORehohjswJqpKVVwZhYW2D//mU=; b=r04H46c7nx7BPq6q4Gxrm7mof/+7zb/Qsq86WoN4GhXQg+BfFdkusNP1V2D1Mjsks7 JE8fySqcvw+KoDTD7rS763/IUja3zKh3Aj3WWiRDUO3lRiPPabYp/lk/zBP70RRzlWcL q6HrkEoZmpzQ+A2WDxIRnA6hu8KtGxxigOLOACZodySJjh1pMGwDmOBb11nlVXorekGJ 3nK66tVASwJ6gw+rkE9SAZIKZDVT7grZ0df7P47NUtkz41o4ZXTWVgpJGAS8vGiY3BAz XAw6zXfjsYd2lLa/Ut7hI9jrGcjKGeIETbB5PJko60B+Vf27QpxnryAif1li3rgdi5Vk aM+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=SDi3q0R9; 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 w21si1410631pgc.800.2017.11.16.12.36.46; Thu, 16 Nov 2017 12:37:09 -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=@google.com header.s=20161025 header.b=SDi3q0R9; 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 S935099AbdKPQ3v (ORCPT + 91 others); Thu, 16 Nov 2017 11:29:51 -0500 Received: from mail-ua0-f193.google.com ([209.85.217.193]:48831 "EHLO mail-ua0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934113AbdKPQ3o (ORCPT ); Thu, 16 Nov 2017 11:29:44 -0500 Received: by mail-ua0-f193.google.com with SMTP id f14so9049694uaa.5 for ; Thu, 16 Nov 2017 08:29:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=lmL6dKbuLl334PiFxORehohjswJqpKVVwZhYW2D//mU=; b=SDi3q0R9XMJSBQ3kOOIrUra5WpFvV/c1zl3Z7gNGL4RFx/GCy18VTkix2XmqZl+61M WXnsn/W9FJZA/ePOTIse4RMOeQtTuU/5SUyLB2n+q6GMUfuPfSoSs6C6Obq8M9dLy8Jm dOVblBVGzxXi+RUzz5GO/SIK+k2nIvxkxZ20I4snLiFwK6/j97QJW9fj+w+R2tzUtZv7 yRoq1Cm4NKIVr92xLzzRuRZTQ7Oiujptvpe+5IbkS+7PoYwyri9f6Ll+XqQajDnH3DZl +S1OM8o9HvKbbeA5ssKih5b7ZgIpntPk9Bh2U4CKxQRzt7hKhf5PGEo6qM5OnVzoF+7B zmUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=lmL6dKbuLl334PiFxORehohjswJqpKVVwZhYW2D//mU=; b=QEud29Gb32mH6hoK3YI4yAN3E6/oDeWawa/zCRaZoI2lYows4logmbMlKyKaGpzbKy X4SlHu2fR17ivbeS9h3ax1u/+wnB7byQYMucraRv59LljnmKBScn3iNTwHdy7Bt6u9+f 6Skd3jnZMcujE+8ukyuXyXcWbqhrNm8DtlL4IicamlmcmqLj50/1lFhcDi9z97s0KGRr XauDgW0VGgak2rr2hvmR5iK7N5wBKDuj+YGbgIu0/ubsjGP6KmPw8bCjvdC3m0bDkfj6 8hJbNXbfOOygwkjVjwURoIXs+HzyG+JlA/XJSwIdkKyX03M5u+PTC+jqUqwWdxBPo7QV r0OQ== X-Gm-Message-State: AJaThX5aEfiozLd/+vGqd7fQHr3cypcIO/y6zvPEhXd8zY7iV2ThXeib MQpcvUnEiFcXyiIrZa/uea7VYrJEI+WOelcKN/1wGQ== X-Received: by 10.176.81.181 with SMTP id g50mr1888959uaa.46.1510849783054; Thu, 16 Nov 2017 08:29:43 -0800 (PST) MIME-Version: 1.0 Received: by 10.103.70.147 with HTTP; Thu, 16 Nov 2017 08:29:41 -0800 (PST) In-Reply-To: <6f3b8fd2-d2c7-a37d-f79d-510e6cdf2ee9@virtuozzo.com> References: <20171115173445.37236-1-glider@google.com> <6f3b8fd2-d2c7-a37d-f79d-510e6cdf2ee9@virtuozzo.com> From: Alexander Potapenko Date: Thu, 16 Nov 2017 17:29:41 +0100 Message-ID: Subject: Re: [PATCH] lib/stackdepot: use a non-instrumented version of memcmp() To: Andrey Ryabinin Cc: Dmitriy Vyukov , Andrew Morton , kasan-dev , LKML , Linux Memory Management List 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 On Thu, Nov 16, 2017 at 4:08 PM, Andrey Ryabinin wrote: > > > On 11/15/2017 08:34 PM, Alexander Potapenko wrote: >> stackdepot used to call memcmp(), which compiler tools normally >> instrument, therefore every lookup used to unnecessarily call >> instrumented code. >> This is somewhat ok in the case of KASAN, but under KMSAN a lot of time >> was spent in the instrumentation. >> >> Signed-off-by: Alexander Potapenko >> --- >> lib/stackdepot.c | 21 ++++++++++++++++++--- >> 1 file changed, 18 insertions(+), 3 deletions(-) >> >> diff --git a/lib/stackdepot.c b/lib/stackdepot.c >> index f87d138e9672..d372101e8dc2 100644 >> --- a/lib/stackdepot.c >> +++ b/lib/stackdepot.c >> @@ -163,6 +163,23 @@ static inline u32 hash_stack(unsigned long *entries= , unsigned int size) >> STACK_HASH_SEED); >> } >> >> +/* Use our own, non-instrumented version of memcmp(). >> + * >> + * We actually don't care about the order, just the equality. >> + */ >> +static inline >> +int stackdepot_memcmp(const void *s1, const void *s2, unsigned int n) >> +{ > > Why 'void *' types? The function treats s1, s2 as array of long, also 'n'= is number of longs here. Agreed. I started with a plain memcpy, so the arg types were left over. >> + unsigned long *u1 =3D (unsigned long *)s1; >> + unsigned long *u2 =3D (unsigned long *)s2; >> + >> + for ( ; n-- ; u1++, u2++) { >> + if (*u1 !=3D *u2) >> + return 1; >> + } >> + return 0; >> +} >> + >> /* Find a stack that is equal to the one stored in entries in the hash = */ >> static inline struct stack_record *find_stack(struct stack_record *buck= et, >> unsigned long *entries, int s= ize, >> @@ -173,10 +190,8 @@ static inline struct stack_record *find_stack(struc= t stack_record *bucket, >> for (found =3D bucket; found; found =3D found->next) { >> if (found->hash =3D=3D hash && >> found->size =3D=3D size && >> - !memcmp(entries, found->entries, >> - size * sizeof(unsigned long))) { >> + !stackdepot_memcmp(entries, found->entries, size)) >> return found; >> - } >> } >> return NULL; >> } >> --=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 From 1584251185417383814@xxx Thu Nov 16 19:14:26 +0000 2017 X-GM-THRID: 1584156051551642586 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread