From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpbgbr2.qq.com (smtpbgbr2.qq.com [54.207.22.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B66BB246770 for ; Mon, 29 Jun 2026 01:44:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.22.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782697457; cv=none; b=g0HrKJCaTVcR/bGBM+PPPZTluftItFVoChOXT1O8ZKKxbfLvczEJXQ4MLSZ6U7y5ZFnbRogqqCX/YLRdV5wtCKZeZTwWZRnn7Z/Pzlg4EdDxH/N4k7AKThvXDQgEWGzIzwwquqrnUv/U5wvEPAxzVG0icLaQ/KbOpRCuhDsEBSk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782697457; c=relaxed/simple; bh=VIuzCnouxLko1L4VrEHa+IGuA/zLfPobmZsa9KSDWxo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sLi9ixiXc9I9Kz+MO0cC2UzvET44+uE/KY3LtyxP/1BUel12zRdT0gnSp4TdEkmrF30fYlqXkf+0/V4cIYkTXVtV/x0SAyXZq+VoYvkaxpvtCpAX4ErRoMS61GVv4xCw7C23fWtW/QOHVnQ6HlGhBlssil5cilgnEIzkOqJTxzM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=Nf/a3CqX; arc=none smtp.client-ip=54.207.22.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="Nf/a3CqX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1782697411; bh=dZnJoJtBgzZIFDWcRoWx5iyO1CtG4HR83S4oC98/yBA=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=Nf/a3CqXhrHeDOETsMwiD7ZIqG0Jxvkibr2DrQSPg7gCG3zbHRD4jzAbrGdscmpDa BF87pvcNxV1bTothzWQlSSdGeqvpRo/CkMvfQoI1/VUMQ/qgGIOGHt7Ekwysm9U7Ph uEkqbRZjBiLEdcJ04vYtPjnLxMNMXQovRTEVoKUU= X-QQ-mid: zesmtpsz7t1782697407ta4b31b1f X-QQ-Originating-IP: OqzAURa061oPDky5k7zvEf6/MGg2MwwXWpM2iYqAlzI= Received: from uniontech.com ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 29 Jun 2026 09:43:24 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 14938799598701627117 EX-QQ-RecipientCnt: 7 From: Yichong Chen To: akpm@linux-foundation.org Cc: vishal.moola@gmail.com, ye.liu@linux.dev, zhen.ni@easystack.cn, chenyichong@uniontech.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 1/3] tools/mm/page_owner_sort: return explicit filter results Date: Mon, 29 Jun 2026 09:43:14 +0800 Message-Id: <20260629014316.130307-2-chenyichong@uniontech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20260629014316.130307-1-chenyichong@uniontech.com> References: <20260629014316.130307-1-chenyichong@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz3a-0 X-QQ-XMAILINFO: NJV4ECYAIEtcwxGDUQI8g32CIL64oCT6VkXbABEvrjnzcGqPY25uJ/I0 6QZYxMMGzF7/NPKPPJ9pT2PmxieWP2wd1HrmKNSYGx7+51PGtnQ1M2WI08azx7Vxiu694eZ qTQkOQxxG4FQo0TPgIP5IsbgGOqwnNhnGoECu0bfi5kfUPbn4Hcp7xQsEdDehCFKDuivpBp hMWC6lDz7cNsohzc2sT0O7mZC2p7mL5X+jVO8q89mYhhYZ0SnQioVBXLYHu8u3+KlnHNW1r 4AqYJbNT08s5K+9Sy88TLo7lXiB22fZp0grKWnC5dXzmCI0WFBgTzSkcqyJNk26r6dh1B4z udofIWYrb5X5VdMsNluvFaRQEMhTevbas239uwCANfmqQ3d5m0UU/DEDVQ0EcVK7Xzw65/5 HVLYF4AlzYOO9lUZw7f9ldjcMabWAkG3qTBF2gijgqni20ewnacdp9MltDIMAoBIkFacAs1 2gmp9kC2RryxXJTnPIeKHJqBry423EEp1NGigZlQMIIs8lfb/BsbOCLfjdXynsi88aPFCBs fQHJmgMbfZTtpT4j7GEg+S7tClTNVUsGudU6cLXknLTbiuynJq4PDsU+Y2t/F0LD3VjA5Yi 7/iZv9WqPwkVxeAkmvYWKaAgbgcwF8KkOM5gujTwg/90YAwFfXccDUIV/mor0q94TfXHR2x CUVNurYDTkIvyTGxkStNmGQ6jQu/hSMkFwtsMtz8bkQhzrhB+cJRPlzL8ahxeMMwWItBlWw /nD2qRz3g8qfAQM7j6tJvGS487pnqV9NhtZldO/qe/Wj0v9+BU5fcZtCdCVLOqiV1uxTyRA /nJM52cC4DHd9IKLBzvD5Q4Bwk+fLmm7FuOszynnCM3XZgQgSnS0VYurLzIL0ziJhf8j4GS vl5uugk6EFTZqQK5x7jJddruWNTkBpFJO/Gd89U4pL1ROjv8rT6Xg2g/DHneL6Hoc5nmSQb CDKnfCRuQ81EEGS8RvDingqEJ9ujK/T/upll3M1s5R8UFeOKE/sllgkkMLUctV1/nOOeivM DxRn8DAYCGbBbD9BaAegT8F3fJ2W/x90bg6u47/qNDVrpTR39Z X-QQ-XMRINFO: Nq+8W0+stu50tPAe92KXseR0ZZmBTk3gLg== X-QQ-RECHKSPAM: 0 Rename is_need() to filter_record() and make the filter path return explicit error, skip, and match results. This lets callers distinguish allocation failures from records that simply do not match active filters. Reviewed-by: Vishal Moola Signed-off-by: Yichong Chen --- tools/mm/page_owner_sort.c | 40 +++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c index e6954909401c..3c754826cec5 100644 --- a/tools/mm/page_owner_sort.c +++ b/tools/mm/page_owner_sort.c @@ -43,6 +43,13 @@ enum FILTER_BIT { FILTER_TGID = 1<<2, FILTER_COMM = 1<<3 }; + +enum FILTER_RESULT { + FILTER_ERROR, + FILTER_SKIP, + FILTER_MATCH +}; + enum CULL_BIT { CULL_PID = 1<<1, CULL_TGID = 1<<2, @@ -372,6 +379,9 @@ static char *get_comm(char *buf) { char *comm_str = malloc(TASK_COMM_LEN); + if (!comm_str) + return NULL; + memset(comm_str, 0, TASK_COMM_LEN); search_pattern(&comm_pattern, comm_str, buf); @@ -450,32 +460,44 @@ static bool match_str_list(const char *str, char **list, int list_size) return false; } -static bool is_need(char *buf) +static enum FILTER_RESULT filter_record(char *buf) { + char *comm; + if ((filter & FILTER_PID) && !match_num_list(get_pid(buf), fc.pids, fc.pids_size)) - return false; + return FILTER_SKIP; if ((filter & FILTER_TGID) && !match_num_list(get_tgid(buf), fc.tgids, fc.tgids_size)) - return false; + return FILTER_SKIP; + if (!(filter & FILTER_COMM)) + return FILTER_MATCH; - char *comm = get_comm(buf); + comm = get_comm(buf); + if (!comm) + return FILTER_ERROR; - if ((filter & FILTER_COMM) && - !match_str_list(comm, fc.comms, fc.comms_size)) { + if (!match_str_list(comm, fc.comms, fc.comms_size)) { free(comm); - return false; + return FILTER_SKIP; } free(comm); - return true; + return FILTER_MATCH; } static bool add_list(char *buf, int len, char *ext_buf) { + enum FILTER_RESULT filter_result; + if (list_size == max_size) { fprintf(stderr, "max_size too small??\n"); return false; } - if (!is_need(buf)) + filter_result = filter_record(buf); + if (filter_result == FILTER_ERROR) { + fprintf(stderr, "Out of memory\n"); + return false; + } + if (filter_result == FILTER_SKIP) return true; list[list_size].pid = get_pid(buf); list[list_size].tgid = get_tgid(buf); -- 2.51.0