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 98ABBC3DA6E for ; Wed, 3 Jan 2024 11:08:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E79DC6B0132; Wed, 3 Jan 2024 06:08:56 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E29696B0134; Wed, 3 Jan 2024 06:08:56 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D17B26B0135; Wed, 3 Jan 2024 06:08:56 -0500 (EST) 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 C2DFD6B0132 for ; Wed, 3 Jan 2024 06:08:56 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 911951A0881 for ; Wed, 3 Jan 2024 11:08:56 +0000 (UTC) X-FDA: 81637727472.06.78CB500 Received: from mail78-59.sinamail.sina.com.cn (mail78-59.sinamail.sina.com.cn [219.142.78.59]) by imf08.hostedemail.com (Postfix) with ESMTP id 9DC2C16000D for ; Wed, 3 Jan 2024 11:08:51 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=none; spf=pass (imf08.hostedemail.com: domain of hdanton@sina.com designates 219.142.78.59 as permitted sender) smtp.mailfrom=hdanton@sina.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704280134; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iID84qWp2nm6Z238HqiONwumxN9PMO5mg9S2VquT7Dk=; b=sxLVJInmESHDfp/vg5/L5J6kqCOiIzZclYYUChydqoE49xpMo51g8hIF6pZXDTPvK6MnkD TkihdUlAB7p52FaNWOCKW/mmamIESS2q0c3KcVBN2Wy6eDCY1HSOgxv0NxtxqnElWrCnfA XJDGSphurDZb+B87xx+PAvvKVFAZzZc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704280134; a=rsa-sha256; cv=none; b=CaZ7odmehkYpuN3V/2qZEppJISCRzQJEzgyVLcxyYw8m3q2XdJbeKyZnfs2lumYYNc2NiU 4RX1g9JPC/Ykzj3j0M2TW5mR8xxCHeNd/FvW7s7otvqMQuXX96U5LiapRosOcZd3+agWkL N1mWGawKD+whn39B4qbQs2dxCOi903o= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=none; spf=pass (imf08.hostedemail.com: domain of hdanton@sina.com designates 219.142.78.59 as permitted sender) smtp.mailfrom=hdanton@sina.com; dmarc=none X-SMAIL-HELO: localhost.localdomain Received: from unknown (HELO localhost.localdomain)([113.88.51.3]) by sina.com (172.16.235.25) with ESMTP id 6595403A000027EE; Wed, 3 Jan 2024 19:08:44 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 63296334210320 X-SMAIL-UIID: 439AB0640BED4853B1F70BFA8D665C00-20240103-190844-1 From: Hillf Danton To: "Uladzislau Rezki (Sony)" Cc: linux-mm@kvack.org, LKML , Matthew Wilcox , Oleksiy Avramchenko Subject: Re: [PATCH v3 07/11] mm: vmalloc: Offload free_vmap_area_lock lock Date: Wed, 3 Jan 2024 19:08:32 +0800 Message-Id: <20240103110832.2711-1-hdanton@sina.com> In-Reply-To: <20240102184633.748113-8-urezki@gmail.com> References: <20240102184633.748113-1-urezki@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 9DC2C16000D X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: jbydxjw9n9wnruzpnqdwbjhbizmkdkoy X-HE-Tag: 1704280131-449776 X-HE-Meta: U2FsdGVkX1+YFaxmxGbNRsY00i9E8Fjhm5s7427BJZ4lWQ8TJ/IJUryT7soHo2xtICjMy7PkxyQlTiEomyBNUN9rRZU6TkNK8iA/Ii3w2sIqylQP4U0Z3wJ8M3QGcw4tOQwZp+eyyqTcnSrXWDdFZOphpo14VaqSnYt/3LKvrZRTKLPU491DeSuDDJK4pkBC/BFjFV0yi19eMFbLL6Z9qrU4OFjwybAAw419INe5u/Bk9gtz3ODZ5LYCigrhTwkopgp0neByowBpzaPNk7NQoCAF9+z3yWPfiXZPTqiJGearf6ikpv1ANAR8fsoL1gACrjgV7QTLpO+XVDeUIWQ2/87nLURJlZAYIlw1pUrf5DufQkD1Eu/q2YlvSo7xxJ1VphzpC+tfJBSc0zwXB093ZT6senrXXoEHsk2upQTUTpcUizNRveN7jeXeMgeNwEngcSzAx39rSkeIxMZsu1pP5tm010CpGm0PvDYJdGSje3KHBUqZ1rV54AxyOGuutaUreRtAucLrgspbkxcwxHZPF6P1PpcImtNFCMDTbhYFidy+lgBZMigFyqxq6240aOr9Duy8n+Sj8xcNdjTYvefcw/Yxasf9w1/8z5llIZE4BzR1XY59oY90pzXR0MZrttQXak8aYrVMcyaRTrC+meFMhfXXUD+1YIDvxNbXo+Jt8tmPYsz0XXQW8tZ22l5LgpUvdNLkg2zjcW9YPlLTIf+3ISmRk6tJ5u/ugryeDLqXqOADW+DJrPdfxEyT6pQcujNv2G1HYKL7dB96bX+NCrpk9ki/AS5RSggVBqm0qU+P+SdAEgFEknyG2mKRlhRdh08MYZFh+HzGQqzkdaswJujhj9kjfnGgV67RXxWGSN7cyil+/b0xOHp0Wd4/svS/MGbVsgbHLj729LsN9NZasTvuKpPXjOudt9nIDmgw0xqI1zD+1QZ9WBBc09kM3rYTpXTigoVoHRRL5/MvxMN1yr0 k5wCI6FX XnQI8DKZ7VMyLnC7ncdRHEE5cEhgs8jN9MAWyu6UkErlp0GV7izJ32nyOR29wddF4ceSj3v3dUJtrsSijKsoRda76McvDA8oSItaPLdNUsRHaH9lr4xe2Ox/tsU7mLOky0R90b8zm1Y6USBkE1AevGv5P8w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000002, 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 Tue, 2 Jan 2024 19:46:29 +0100 Uladzislau Rezki > +static void > +decay_va_pool_node(struct vmap_node *vn, bool full_decay) > +{ > + struct vmap_area *va, *nva; > + struct list_head decay_list; > + struct rb_root decay_root; > + unsigned long n_decay; > + int i; > + > + decay_root = RB_ROOT; > + INIT_LIST_HEAD(&decay_list); > + > + for (i = 0; i < MAX_VA_SIZE_PAGES; i++) { > + struct list_head tmp_list; > + > + if (list_empty(&vn->pool[i].head)) > + continue; > + > + INIT_LIST_HEAD(&tmp_list); > + > + /* Detach the pool, so no-one can access it. */ > + spin_lock(&vn->pool_lock); > + list_replace_init(&vn->pool[i].head, &tmp_list); > + spin_unlock(&vn->pool_lock); > + > + if (full_decay) > + WRITE_ONCE(vn->pool[i].len, 0); > + > + /* Decay a pool by ~25% out of left objects. */ > + n_decay = vn->pool[i].len >> 2; > + > + list_for_each_entry_safe(va, nva, &tmp_list, list) { > + list_del_init(&va->list); > + merge_or_add_vmap_area(va, &decay_root, &decay_list); > + > + if (!full_decay) { > + WRITE_ONCE(vn->pool[i].len, vn->pool[i].len - 1); > + > + if (!--n_decay) > + break; > + } > + } > + > + /* Attach the pool back if it has been partly decayed. */ > + if (!full_decay && !list_empty(&tmp_list)) { > + spin_lock(&vn->pool_lock); > + list_replace_init(&tmp_list, &vn->pool[i].head); > + spin_unlock(&vn->pool_lock); > + } Failure of working out why list_splice() was not used here in case of non-empty vn->pool[i].head, after staring ten minutes. > + } > + > + reclaim_list_global(&decay_list); > +}