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 2F27AC10DC1 for ; Wed, 6 Dec 2023 11:22:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C26F6B00A2; Wed, 6 Dec 2023 06:22:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 970856B00AE; Wed, 6 Dec 2023 06:22:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 811B66B00AB; Wed, 6 Dec 2023 06:22:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 60F086B008C for ; Wed, 6 Dec 2023 06:22:31 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 02BA9C0186 for ; Wed, 6 Dec 2023 11:22:30 +0000 (UTC) X-FDA: 81536155302.04.D350A81 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf23.hostedemail.com (Postfix) with ESMTP id 515B8140013 for ; Wed, 6 Dec 2023 11:22:29 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none); spf=pass (imf23.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=cmarinas@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701861749; 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=AhOvSRp4d8ISctxTIsyGO/H5m5iiVaQo/R0vXrxgpMA=; b=lLdqEsOcjfeXrXHKmxslNUyxW4wAJ0LiE6sCo4b1xRIgXr50g2WoflcAvI64eFDzClH3mQ VBMI65bW81YUSQvI6Z7049P/XkNWrWg9ntrz+SWNdkwkRJ7xRxEypRHNWTjZfeCGeP470i oiVPQqasPIEqnMWcN/jCZvft3Vs2tnk= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none); spf=pass (imf23.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=cmarinas@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701861749; a=rsa-sha256; cv=none; b=uNeZ9iBIbp9NI30S0aib8z1iU2C84sbgF86vFUvqMD1i8T5C4wcQL1PYdyiUSGn2Hs3V7G mhzzbPYwtlYS+0ilz/4HImTzEwK/sc+mHHjE8RxLz68vCLpsinzPNni4F/+exvrQ05vvJC ACxyt6Xrowf/pku81Z52k8SDNcICqIg= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 5F4F3B82023; Wed, 6 Dec 2023 11:22:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7BF6CC433C8; Wed, 6 Dec 2023 11:22:25 +0000 (UTC) Date: Wed, 6 Dec 2023 11:22:22 +0000 From: Catalin Marinas To: Hillf Danton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Waiman Long , Andrew Morton Subject: Re: [PATCH] kmemleak: Avoid RCU stalls when freeing metadata for per-CPU pointers Message-ID: References: <20231201190829.825856-1-catalin.marinas@arm.com> <20231202075055.1142-1-hdanton@sina.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231202075055.1142-1-hdanton@sina.com> X-Rspamd-Queue-Id: 515B8140013 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: oges8uend4a559ocb4dyu3tadjbgcztq X-HE-Tag: 1701861749-933330 X-HE-Meta: U2FsdGVkX18Yk9tk1XVDGJZTbdZ1pvCm3GowRFQi58PAtLKN4hddtAqeVza7/B1gxcK9uBeaB3sQlwpPeaa5caWINymXO442MCD/cIzZRCDlaG4HouW8eiENWC+eSgj0T979Ww2ieDnhZy06bLxf/O9EDLqB6YF78SKIlHr+1Hm5JWwvnNiIKBz+dbor0n+2fnEdBXL6jzdLmeJ3sOZ04sL8ANqc3EdYgTozdtQsX2DYGzvc7lOgTgRAAsVZ6mJaiyJzkTQFk5XSQPobTUXDTTcazSVZS9uAv4vTPI0EQFmHzPoKkJ21lsAm8VPN4qW4Nx756hR+orwQsFyKhPPnnq7OYc3qxuYVPrkHUFFpmTrbpwq6TiLEWBBPgL1kMOZucWBPnpdZrhW7Y+6L0ypZW/HPclvLtal1eQhQm09tfwoJnqV7EGnMsWYF9BQ3rUggHvndkn74a8X1gzJa2h9S95lPgqhqr3OIMJvbQWchRiUT1PDm9NWa63SvN6uFTb0Qzp2fapLH7fdih4jny4E3Z8JsV+yGQ2WJeUTSbK+3Zhom6tmLpGlF/+omihjUyTyR4sGgq4koAfnQucW7lHCy0rRdvicMEkWzbUMe3sqSOJRYrshXEPzL9TihN7h3OK6g301+UqMDH6mnbiOUpwZb9T8T2lnuT+5LLJQiZ6FrUoiliB1CgISJ/1XzGxMJ3kk9H7J/37QXZr6FxP4FAtTD6uHepDj+2SyRHQU8n/ZX5yUBEHWx7MigHealxlaFbZY1aFrApeJHtP5vjI0G7pfk51rzp6uMTylSnR8ccYoL6t8gvMeiSgCni7qLwl6y2prkEhKSC2MPFsUNzNp0lnm0q8j3oyD8vbVouh0SZEK6vQ7XZlVnnp66SKkDJ15PqGT1U5QxkLjMCehxrsU8bDLOncxaI0cfK8nidKj7yjEI241/upLE90kd2PNQmH++DGzb9dtwg5dw4i0lDUW1Djp TWm21fbQ +zGvS9EV6z9ddhWmHhh9+i31nadJujj4LXr1ZwLJouT5v6ffKgCYEUc7hYcA1zgF3tCsltR6aCY8tUhqfPfYf6019Jva9xnWhMN6sYDC/xlXrw2zXxKxMRYMRWDmL0oa0lRujPR3iNEfi/qLJQX54BWHPWaXS49yxmhj2UrcNGdUTroixb1zkKtgj10nBliYSZGIouZjADlsmbPi2ZTHYP0GTJqUceRYolMllYujrY2J9gn+NKvkPTmMKoihgZn9JWKbnTSjJH3i+EvzSeeTee4wlIwXeDBRYmLtEX4C+6BZucJJag7Pn24cT1xc61thBI5DVIDC13Ol6tZdV6JzXqjLQ4tey0F6Z+fvPLXVNs5tl6U6AOtl3tYxZLg== 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: On Sat, Dec 02, 2023 at 03:50:55PM +0800, Hillf Danton wrote: > On Fri, 1 Dec 2023 19:08:29 +0000 Catalin Marinas > > @@ -1472,14 +1474,27 @@ static void scan_object(struct kmemleak_object *object) > > /* already freed object */ > > goto out; > > > > - obj_ptr = object->flags & OBJECT_PHYS ? > > - __va((phys_addr_t)object->pointer) : > > - (void *)object->pointer; > > + if (object->flags & OBJECT_PERCPU) { > > + unsigned int cpu; > > > > - if (hlist_empty(&object->area_list) || > > + for_each_possible_cpu(cpu) { > > + void *start = per_cpu_ptr((void __percpu *)object->pointer, cpu); > > + void *end = start + object->size; > > + > > + scan_block(start, end, object); > > + > > + raw_spin_unlock_irqrestore(&object->lock, flags); > > + cond_resched(); > > + raw_spin_lock_irqsave(&object->lock, flags); > > Nit, spin_lock/unlock can be collapsed into need_resched(). > > if (need_resched()) { > raw_spin_unlock_irqrestore(&object->lock, flags); > cond_resched(); > raw_spin_lock_irqsave(&object->lock, flags); > } The reason I'd not do this is that we also want the interrupts to be re-enabled regularly. Keeping them disabled may not even mark the current thread as need_resched(). -- Catalin