Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp934230pxa; Wed, 19 Aug 2020 20:28:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyx27Wssoz/sKkYe3Wa3xg01g+j2Y3beJ4eud2sGAMuiwmyu+GVWdcbHD+N3/rqPQijW/hG X-Received: by 2002:a17:906:b052:: with SMTP id bj18mr836403ejb.131.1597894128023; Wed, 19 Aug 2020 20:28:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597894128; cv=none; d=google.com; s=arc-20160816; b=SK7g0m+bT9DlXjCNL/AgTb2l3kYgp681BuQLEgtO5jg8EahAPQT/L+S4SkO5BeDL89 DS+b9kcv7jnJeqJjoKK9Vqb2g93dzyXDCptodVjZLlIAbKCuKTT8Cy2oB10OCSyqysjF Q89j8dj/bDR2a42nBxT1HYZe81tFyn0e/+ecEOZFJUC2blsYC4SdGj+fTN5d767H1ml+ oaiR+Gk2mJPjgMXame9tsuTtiQwDYixDy0JuXo2335C8eP267wcwhHVOGLD/WhKeKUvW /bUtYM+mmGvTBTPyID5P3nxiOrmtH/s0rN0XZF/pKt6pB0LHu1BbSgbwRo3XBw8I1euq pAcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=hB8q6oIN+T1o9RkrjP0cRaPRyND9S9Gm/sJFMDc9nzI=; b=qEXVY4n5Ne3YpZNmoKOyY0XNVyJ0GD74bWIaOtPF07i8Nug02JnrkZh3RoGYEo09I7 yS6mxTx/cvd8nvq7MHGXwrHe1ffX9wjHk3J2htRw+76hiBMvlN4SxJb7dmtK3sEaUVdi kJBISKdE5AYdZELEDp6+8c1XiTXN+aMIo0AQOsS5Y0UPZklY1b9X6gOPbW3Y0JkBUmoz 4kMr6xr4YGmv4c9GXCvQyEfXWL2xiRLB9lvWRTO2KS91iy60K4m+nZ731+UhkxmAqRGj al3Pq2pj6IfvJq+UKWAF4Pc7PGzlmXrjY7HR4XXhoaw3FDRNOXbPkMYw4ZQWPmVtPFw2 imOg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 23si603914edx.559.2020.08.19.20.28.24; Wed, 19 Aug 2020 20:28:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726854AbgHTDZU (ORCPT + 99 others); Wed, 19 Aug 2020 23:25:20 -0400 Received: from mail1.windriver.com ([147.11.146.13]:43284 "EHLO mail1.windriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726741AbgHTDZU (ORCPT ); Wed, 19 Aug 2020 23:25:20 -0400 Received: from ALA-HCA.corp.ad.wrs.com (ala-hca.corp.ad.wrs.com [147.11.189.40]) by mail1.windriver.com (8.15.2/8.15.2) with ESMTPS id 07K3Ous8008591 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 19 Aug 2020 20:24:56 -0700 (PDT) Received: from pek-qzhang2-d1.wrs.com (128.224.162.183) by ALA-HCA.corp.ad.wrs.com (147.11.189.40) with Microsoft SMTP Server id 14.3.487.0; Wed, 19 Aug 2020 20:24:55 -0700 From: To: , , CC: Subject: [PATCH] debugobjects: install cpu hotplug callback Date: Thu, 20 Aug 2020 11:24:53 +0800 Message-ID: <20200820032453.5222-1-qiang.zhang@windriver.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zqiang When a cpu going offline, we should free objects in "percpu_obj_pool" free_objs list which corresponding to this cpu. Signed-off-by: Zqiang --- include/linux/cpuhotplug.h | 1 + lib/debugobjects.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index a2710e654b64..2e77db655cfa 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -36,6 +36,7 @@ enum cpuhp_state { CPUHP_X86_MCE_DEAD, CPUHP_VIRT_NET_DEAD, CPUHP_SLUB_DEAD, + CPUHP_DEBUG_OBJ_DEAD, CPUHP_MM_WRITEBACK_DEAD, CPUHP_MM_VMSTAT_DEAD, CPUHP_SOFTIRQ_DEAD, diff --git a/lib/debugobjects.c b/lib/debugobjects.c index fe4557955d97..50e21ed0519e 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -19,6 +19,7 @@ #include #include #include +#include #define ODEBUG_HASH_BITS 14 #define ODEBUG_HASH_SIZE (1 << ODEBUG_HASH_BITS) @@ -433,6 +434,23 @@ static void free_object(struct debug_obj *obj) } } +#if defined(CONFIG_HOTPLUG_CPU) +static int object_cpu_offline(unsigned int cpu) +{ + struct debug_percpu_free *percpu_pool; + struct hlist_node *tmp; + struct debug_obj *obj; + + percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu); + hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) { + hlist_del(&obj->node); + kmem_cache_free(obj_cache, obj); + } + + return 0; +} +#endif + /* * We run out of memory. That means we probably have tons of objects * allocated. @@ -1367,6 +1385,11 @@ void __init debug_objects_mem_init(void) } else debug_objects_selftest(); +#if defined(CONFIG_HOTPLUG_CPU) + cpuhp_setup_state_nocalls(CPUHP_DEBUG_OBJ_DEAD, "object:offline", NULL, + object_cpu_offline); +#endif + /* * Increase the thresholds for allocating and freeing objects * according to the number of possible CPUs available in the system. -- 2.17.1