Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3707832pxk; Mon, 7 Sep 2020 23:31:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy49OG6pYIpsRUTyih4pY33ZtmnKCuBCZKhaggJNlWS02Um/riq5HATDFzRqULY7jMt9qho X-Received: by 2002:a17:906:1106:: with SMTP id h6mr24029781eja.200.1599546684895; Mon, 07 Sep 2020 23:31:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599546684; cv=none; d=google.com; s=arc-20160816; b=ZVRdHyV6o54l2JdW850s6HDv2kDMDjLbzikq98qdVVzdf+gpw/09AxDEvbbvMcM3Jm Of+LaIaMl8n9xre7/kRNbogcboIoju3WH+A7RBkvPVgjOORHEdfAC6WEu/b3WthtXIJZ DbtaFWbjAi2pb56lcDZpECCLW4ffEpxXW/8FSwwz4+QxxccTPo97q/mYBaT4ISCUApw0 p8q7+jPi0AuWQcHKmEA6Bt73phCvyl+0tADSzClpE7M9IfRvIFuR6ApQfkX3XZRV2vjf Rzt9h+Ux15svgPFdPcwpQVsaEcz/f4w9FLdCWtFjlSMSMzEhP5M/s24fRkzNxGzIImEP dFnw== 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=MKliL9BLhICIAvmW/laCEXhp14k8ovoLb/DtvWbuNYk=; b=Kd8DTiPw45d7AjZdPxF+xjKuEFmnWgLkimeXjvNb7YGy9644eCXJYaVihngUvI74UM 41/fwZadW+EoV8WoEFPUPBb4MM2BUEyLywt30a/ZOuJl204NShGUDo+swZJAJTidrvms Yo2OL7+MO6PAt0z4TUDS4o+jeE0z3KOuKUG9+uY3Bxf0HE8hdTeTiTG7zlYdU/ExoWEn GWPGGbDNIrMuZ296qo0jEp+HZ3Nb0OKB/lhmmzZ8sApVCHss+1eU6gY0Kgv3E5/uUuyG HP57VxSU930qMkm0rj0mgfs1BbSTIExgo9QlG8tRdSD3OIuw7fGEoWZIBqaCjbGZB113 tYqw== 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 lk17si10515820ejb.188.2020.09.07.23.30.59; Mon, 07 Sep 2020 23:31:24 -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 S1728966AbgIHG2B (ORCPT + 99 others); Tue, 8 Sep 2020 02:28:01 -0400 Received: from mail.windriver.com ([147.11.1.11]:40652 "EHLO mail.windriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728115AbgIHG2B (ORCPT ); Tue, 8 Sep 2020 02:28:01 -0400 Received: from ALA-HCB.corp.ad.wrs.com (ala-hcb.corp.ad.wrs.com [147.11.189.41]) by mail.windriver.com (8.15.2/8.15.2) with ESMTPS id 0886ROT5009147 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 7 Sep 2020 23:27:25 -0700 (PDT) Received: from pek-qzhang2-d1.wrs.com (128.224.162.183) by ALA-HCB.corp.ad.wrs.com (147.11.189.41) with Microsoft SMTP Server id 14.3.487.0; Mon, 7 Sep 2020 23:27:11 -0700 From: To: , , , CC: Subject: [PATCH v3] debugobjects: install CPU hotplug callback Date: Tue, 8 Sep 2020 14:27:09 +0800 Message-ID: <20200908062709.11441-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 Due to CPU hotplug, it may never be online after it's offline, some objects in percpu pool is never free. in order to avoid this happening, install CPU hotplug callback, call this callback func to free objects in percpu pool when CPU going offline. Signed-off-by: Zqiang --- v1->v2: Modify submission information. v2->v3: In CPU hotplug callback func, add clear percpu pool "obj_free" operation. capitalize 'CPU', and use shorter preprocessor sequence. include/linux/cpuhotplug.h | 1 + lib/debugobjects.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 3215023d4852..0c39d57e5342 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..bb69a02c3e7b 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,24 @@ static void free_object(struct debug_obj *obj) } } +#ifdef 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); + } + percpu_pool->obj_free = 0; + + return 0; +} +#endif + /* * We run out of memory. That means we probably have tons of objects * allocated. @@ -1367,6 +1386,11 @@ void __init debug_objects_mem_init(void) } else debug_objects_selftest(); +#ifdef 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