Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp4130731pxb; Tue, 2 Nov 2021 04:47:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyWlfNvMAezFaCHJrSAxMVW27BCqi1iC1prj54LyrBUkjs4pgxpX92j/OJvoSTgomqUmQSR X-Received: by 2002:a17:907:c0c:: with SMTP id ga12mr44783941ejc.173.1635853642884; Tue, 02 Nov 2021 04:47:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635853642; cv=none; d=google.com; s=arc-20160816; b=L/CIpuO+0cEYxLjTKrA/LlJ5Xd0k0GXlk8ZPHzJMO7HZc0Bh/SOV8R4rIywzU4PeaI lNLlTnhebIb+4f2yw8I5Y2Cxat21hJ9J4XwSdhcH/MbTA5F7VzVdPC2lMXmCGILToKN5 gGYowoqdmc+ZEKVp1dq3viduyJGWkuig6TpwasyPeFtOiHtS25g6yfNkVZGz7uCuSVLq I7KH3G0qDQauYM1Aue2Huo+7JaTHHC17ddyW/NorIapWIphpEEne3Oz8e0MNwocB/PbQ 3ixa6dd0T/ZZhrru0C48pwsyhLlVAhWrnjVdMNyQ6OFI0zPF0cM1QHCafjmR8wcFkb9n Az1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :mime-version:user-agent:date:message-id:subject:from:cc:to; bh=DkrBlyZgvbaTk9UNw4NA3P2lXdnTuxYftsNVvYObZ0Q=; b=mPh/QFCGBREBCsK+EGLcn7g+//fyH3dIt1tHryyykkWVWrwURFTPiv1gwSXl6BTifp X55JbSOBKF3Rq8vfAlxlS7ZcVN8HQufEMHq9PBYnCgAFv3QAEk8X+HYc9OeKS4mikc8V BkrrHC7eFv9tWdihSXYb3fRnBVoBGA8BE5gEWElSs/Ad7bB171+TlkFtZerVQwxavjSQ g6v5g+nNC/onqtTsA3py5za6LmLsIbu+UwoqCN8Yjn5TbzuMKPUYV+ZG4TVYsMWOX6Go m0Nnp3p2Wa8WmIGzaAO5c9oKvqodmRlg9p1tMhinfCCs7SMV5ZJlFGq0cBdnGB6x44dB 1yzw== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n12si37007017edx.441.2021.11.02.04.46.59; Tue, 02 Nov 2021 04:47:22 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229577AbhKBLpp (ORCPT + 99 others); Tue, 2 Nov 2021 07:45:45 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:25343 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230102AbhKBLpo (ORCPT ); Tue, 2 Nov 2021 07:45:44 -0400 Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Hk7FR6KNyzbhXr; Tue, 2 Nov 2021 19:38:19 +0800 (CST) Received: from dggpeml500024.china.huawei.com (7.185.36.10) by dggemv704-chm.china.huawei.com (10.3.19.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.15; Tue, 2 Nov 2021 19:43:01 +0800 Received: from [10.174.176.231] (10.174.176.231) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.15; Tue, 2 Nov 2021 19:43:01 +0800 To: , , , , Andrew Morton , , , CC: , , , , , Hewenliang From: Yunfeng Ye Subject: [PATCH v2] mm, slub: emit the "free" trace report before freeing memory in kmem_cache_free() Message-ID: Date: Tue, 2 Nov 2021 19:43:00 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.176.231] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org After the memory is freed, it can be immediately allocated by other CPUs, before the "free" trace report has been emitted. This causes inaccurate traces. For example, if the following sequence of events occurs: CPU 0 CPU 1 (1) alloc xxxxxx (2) free xxxxxx (3) alloc xxxxxx (4) free xxxxxx Then they will be inaccurately reported via tracing, so that they appear to have happened in this order: CPU 0 CPU 1 (1) alloc xxxxxx (2) alloc xxxxxx (3) free xxxxxx (4) free xxxxxx This makes it look like CPU 1 somehow managed to allocate mmemory that CPU 0 still had allocated for itself. In order to avoid this, emit the "free xxxxxx" tracing report just before the actual call to free the memory, instead of just after it. Signed-off-by: Yunfeng Ye Reviewed-by: Vlastimil Babka --- v1 -> v2: - Modify the description - Add "Reviewed-by" mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index 432145d7b4ec..427e62034c3f 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -3526,8 +3526,8 @@ void kmem_cache_free(struct kmem_cache *s, void *x) s = cache_from_obj(s, x); if (!s) return; - slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_); trace_kmem_cache_free(_RET_IP_, x, s->name); + slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_); } EXPORT_SYMBOL(kmem_cache_free); -- 2.27.0