From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E692C3DA49 for ; Tue, 30 Jul 2024 14:15:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1A4F86B0093; Tue, 30 Jul 2024 10:15:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1547C6B0095; Tue, 30 Jul 2024 10:15:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 041A76B0096; Tue, 30 Jul 2024 10:15:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D7FAE6B0093 for ; Tue, 30 Jul 2024 10:15:27 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 84E251C13CF for ; Tue, 30 Jul 2024 14:15:27 +0000 (UTC) X-FDA: 82396616694.21.F499E39 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf29.hostedemail.com (Postfix) with ESMTP id BF6E5120024 for ; Tue, 30 Jul 2024 14:15:25 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=none; spf=pass (imf29.hostedemail.com: domain of cmarinas@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=cmarinas@kernel.org; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722348871; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=G6cbOn7K32MUl4HaGgjApn175M/c2wtLr4+KwDJiS8Y=; b=l0U81QUoNSda5KlvQ+6a172Dgs9+pyMJz9Q1A2OaQzIKy+bxByQtw3hqk6lq78PlowknmO QvZst3SEN2snr47o7v2bad2G+LT0wJZBS2wSVVUOe/DXSHfhjsKoDG6ZMCu38QJwZ5vagG x3EkiJdRuECKL5ieOWyKpcJwHzpiCf4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722348871; a=rsa-sha256; cv=none; b=Sh2ggTfnFqkkONLeNxMPEG8F0c7t1fPBp1uSD3ZpoVbRduDeQ7rxluJqWkBXdWNu062y+n kK0ZRsKIP4Ks/VgOf0gZaPTPStcEtg6ZvWlxSNITEdpeBEVERCfNhj1009TXHaK/99duKC eL2M9s1cCEWfri1O/Ck4PzD7fB2cWGE= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=none; spf=pass (imf29.hostedemail.com: domain of cmarinas@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=cmarinas@kernel.org; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id CEAFB61F10; Tue, 30 Jul 2024 14:15:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D10A0C4AF0A; Tue, 30 Jul 2024 14:15:22 +0000 (UTC) Date: Tue, 30 Jul 2024 15:15:20 +0100 From: Catalin Marinas To: Pavel Tikhomirov Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Wei Yongjun , Chen Jun , Aleksandr Mikhalitsyn , kernel@openvz.org Subject: Re: [PATCH 1/2] kmemleak: enable tracking for percpu pointers Message-ID: References: <20240725041223.872472-1-ptikhomirov@virtuozzo.com> <20240725041223.872472-2-ptikhomirov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240725041223.872472-2-ptikhomirov@virtuozzo.com> X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: BF6E5120024 X-Stat-Signature: modybfxqgdjcwza6g64i7zhgmh8f9hu6 X-HE-Tag: 1722348925-527887 X-HE-Meta: U2FsdGVkX1+8APJv++dkaBbqC6lrmCXFZQovgo+/BRpkfRVmCSLqanLhtnCQld6HgjREYRGM2zSU4IgJQIzE6nbA4032mQYv6MMHn31+Eg361p3wt/wmFgwAaAyCpGDkzKvD4gzdM2chjQ/zyMboOdc6eeHx7YkJ5WirZ+rD0gqVdSql5nqppUNT7X32uucqvRRaubdqobbUy7EX2i6Fkw0g05MNZqdvA0f+GDq5pgqWCzksq+5MqBHII5rEozeWtjVNJyBI1zv+1zp2miBB3eL3VDvUsMiGpZ97DBqpCs2jbRJnzhO1OUfkI2cNhaVZH5+VsTA1x97dqa753qvE/Gf463KIqBfUDYUo0KLb+e+iq6gnepnQkwkmQUaBd1vnC5oQkJ5aqcZ0+k4AEcjaJqL4gLshvONb3gyalb1L14EeOn7prJO3eWSDeeIAkm3KU9uv1YbNspKSYUJJabr6zjQ42SEMNFOgP5YPOvKUpurK/lyfRdbA0ieK4zSZ6/FcO1FqHPjbAz/RlTckWrgmRUAmmiEqTjQpOIHCUwgssI6agJvWKsLQ/TixJRtuol5IgrPfTminMeKP4D2c4uhv90z/u5d+djgvpvVGNrKEIPv662l857yAAg7DMkd5i8qzYH8TWU+56yq6Xc77KFcRkgdpELiiTUb4FuZXOusQzo+f3NKxkoJ99teZo1h7wmI95AraUgYC54yH3rAZIalEQ9kbs2QSRRfpOw9RfeicoU7485id6BrtXd1xj6q9DYQXIH0AbZar/9El7KNEEmsXabR8CfrE7HSame+ETo36UualEhw8cghYSOCqGvLHRlabvJX+JuA04lqgyUc+Vt8Te9YhrEc3lgPv/U+yiZOP2lWt7Pj31ECUReAdLpsE4vOCiox6kWUJ7rLWBGMNeW+PzoCnycUxWKIc2FeMZkeyKvAtFtzU1YaMedreiufxyNbxWHr11j0DBttA4QscmyS huAJEMSa UnTZCWhlex9UEoJ/AtCc1eqwMXrM6w6RZ81b/M6Q+ms9SKeBiKYZH6RcX4VuuE33+ZDcwz1O7fa9XGyAeOiTrBP59dIQDQ38W1fAgUN75ZpnXQTDretG6CGsoHSlZMDoodZaCmwr16ufAnBiHUkMjqIS9836Cva78d4ZNi4o+2U2LcmksnYbUIEa8wgh5CO6ORkGtXwjkINLbeDJwJkS8YnvDvSdS0irNTfWcL+MnWHmVdLSJq1pGCkXi2+EWzGwq20CTIdYI+h7d5hjvc3UHPFr1ed7pzqNmCQWskIimy/t8V5OT/KCrFguLvbVVH63TxJiCFprn6qMuNjcMSGGQPl0yAvSzFlSqvDaMC4oPXX044zi+QAreCG7e+b+OSnFj7K61aUvydrHfcR+OaxQWlOlVhw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi Pavel, On Thu, Jul 25, 2024 at 12:12:15PM +0800, Pavel Tikhomirov wrote: > @@ -1308,12 +1319,23 @@ static bool update_checksum(struct kmemleak_object *object) > { > u32 old_csum = object->checksum; > > - if (WARN_ON_ONCE(object->flags & (OBJECT_PHYS | OBJECT_PERCPU))) > + if (WARN_ON_ONCE(object->flags & OBJECT_PHYS)) > return false; > > kasan_disable_current(); > kcsan_disable_current(); > - object->checksum = crc32(0, kasan_reset_tag((void *)object->pointer), object->size); > + if (object->flags & OBJECT_PERCPU) { > + unsigned int cpu; > + > + object->checksum = 0; > + for_each_possible_cpu(cpu) { > + void *ptr = per_cpu_ptr((void __percpu *)object->pointer, cpu); > + > + object->checksum ^= crc32(0, kasan_reset_tag((void *)ptr), object->size); > + } Slight worry this may take too long for large-ish objects with a large number of CPUs. But we can revisit if anyone complains. > + } else { > + object->checksum = crc32(0, kasan_reset_tag((void *)object->pointer), object->size); > + } > kasan_enable_current(); > kcsan_enable_current(); > > @@ -1365,6 +1387,64 @@ static int scan_should_stop(void) > return 0; > } > > +static void scan_pointer(struct kmemleak_object *scanned, > + unsigned long pointer, unsigned int objflags) Nitpick: I'd have called this lookup_pointer or something like that. When I first saw it, I tried to figure out why it doesn't have a size argument but it became clear that it's not actually scanning/reading the location at 'pointer' but simply looking the value up in various trees. Up to you if you want to change the name to something else. The patch looks good. Reviewed-by: Catalin Marinas Thanks. -- Catalin