From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 6ECC6352C51 for ; Mon, 8 Jun 2026 11:21:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.19 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780917665; cv=fail; b=c+Oni9t3zrIOYl1dyhyVDZAoySHf/axBQ9DF8WUivrcIp/G3XUUDDTAKErj1Myz3sBd9xFVGcstvg3XH6bM3lFI03MTjP4EuQeuM9d/MGosvfMkckJTKlTLuF5klzr9XO3Ldh7ySooljHBq1IyCh62KxDuLsf3uLMZwunu3K1qI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780917665; c=relaxed/simple; bh=brppT3fSV8EjDGQ6egKnLBreWyjdy5gve2/OaVZ3XEc=; h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To: Content-Type:MIME-Version; b=GDoL9JBzWbohQ4NW73O9EI05lvGCDa3nsQl6P6x8cJCKL/kShEER9baSq3IlZK74ozJa9Qqur5Wn8sah94B4NSBxwBVx6bmMwSILVPVUeb17f5nBdGNXIxgxXBrqrs5gy7IG+8CgVX2/D2kH6yabLAst4k3e7IOoAckZfTDUetk= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=f+5U0aMC; arc=fail smtp.client-ip=192.198.163.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="f+5U0aMC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1780917665; x=1812453665; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=brppT3fSV8EjDGQ6egKnLBreWyjdy5gve2/OaVZ3XEc=; b=f+5U0aMCiNIZByHRdg/eoSwaKMN2nI6/oRKVul1r8Bn38WaWzZJbHZMX hccj+6xmuXacumzGXvbZ9u2gfpb0U6lDmQybO4c67lsHW26lSeFBxIOsT xzqo/jCMRCBn73TIw+uYjP4ZbHZw6upB3rShyJtRNnoCu5ioE7Rs6SYSl OrAST0YT3xswYVY0DWLtSjIg3UlepI9HaKNGe5HlN/2thwmTX8Kxo7Fxw i6INA4LSBZUH9HnftXYqJXJuMq/epfmP625P5r1qXiSm5xLPIwRV6sgqs Sq+VdKNq6+mReQyjwRdYSYo3vggDWUzOd+yNg+3DJENGN0jZ3vn0OCrLJ Q==; X-CSE-ConnectionGUID: NqZxzv4WTh2p8VCdLJbxTA== X-CSE-MsgGUID: csR7rpycSzOmA3z4ISLZ6A== X-IronPort-AV: E=McAfee;i="6800,10657,11810"; a="80677942" X-IronPort-AV: E=Sophos;i="6.24,194,1774335600"; d="scan'208";a="80677942" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2026 04:21:04 -0700 X-CSE-ConnectionGUID: 9ElqO3qaToafF3U5TzvozQ== X-CSE-MsgGUID: u60rCXxRSyuPoaW5I7HIDw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,194,1774335600"; d="scan'208";a="239178226" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by fmviesa009.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2026 04:21:03 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 8 Jun 2026 04:21:02 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Mon, 8 Jun 2026 04:21:02 -0700 Received: from CY3PR05CU001.outbound.protection.outlook.com (40.93.201.13) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 8 Jun 2026 04:21:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vlEQWG69VJU/xTjc6uidX9HTb/UboFQCjeNjukig/aNTi8Ui+2UO+/A2O+QFLgPTLPHzEY9cjhafyHBT0zG6rzl5xiJ6jSF+MQqeHVnTtLVvriYn5rdYXZR1CpnLTIotiP3TEg+o8P23TBd3V40S39H+VG2AY+PSpEtLNWRpI0A4tF4qR7rA3xO+Ow0MRjihSBjBfduAxrBZaLMT/ycilDD5uy5nVT/KxERHoTybWSYNFIfAaf1cL+dpnsV9OgjUIIyQdFlNZ8e806o1QieEy530KTopooE9v91Naz4csHruWb1swrZ80nk0If5FIz8gTDphuCX1dbwm2IyAmB9ZmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E/3EiJgNZ2SJRqOIR5R5Jf1Yi7CtmeIgzaoGkwpwJtQ=; b=uZzLmq0CLgiB02xfVPHGZH1xeLs/pt6lI5fNTKIXW443ee+uHgNpzW0qlNCtHO512buquBpnrBy6+KiCq+Oq/ZgWyrDGGgzdqwg0EBoAY2yzQ0f3o1QUCV4JiPIwVkaEkWssQa3c22tZbRCjJL32c5p+nfOL4UuJAGTWYb3gTQsRkdGFZNa0q8xjsAA/2kdTKXSC0LEyoTzi7zeqNWhE19RQsaXpOxLzfRXzGpRRpz4HN1vxMBOZuFD0EDyv/2AERKUeTvLeuaX3mKDyaCADmoMNXG26KFgPqLThnfMX1fsx3thyoCoh1hc71HAFjui8jADnwH3xgTa+2AeMveoVVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH7PR11MB6005.namprd11.prod.outlook.com (2603:10b6:510:1e0::19) by SJ1PR11MB6081.namprd11.prod.outlook.com (2603:10b6:a03:48c::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Mon, 8 Jun 2026 11:20:58 +0000 Received: from PH7PR11MB6005.namprd11.prod.outlook.com ([fe80::4f64:b0b5:4ed2:39ae]) by PH7PR11MB6005.namprd11.prod.outlook.com ([fe80::4f64:b0b5:4ed2:39ae%4]) with mapi id 15.21.0092.011; Mon, 8 Jun 2026 11:20:58 +0000 Message-ID: <4b2c7410-cc95-4082-ba00-c5a6d8891eda@intel.com> Date: Mon, 8 Jun 2026 19:20:49 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 1/6] x86/resctrl: Parse ACPI ERDT table and map RMDD domains by L3 cache ID To: Thomas Gleixner CC: , , , , , , , , , , , , References: <53eeaead2d02cfa53204fe3101df3c0a09796ff9.1780710620.git.yu.c.chen@intel.com> <87qzmh4dbn.ffs@fw13> Content-Language: en-US From: "Chen, Yu C" In-Reply-To: <87qzmh4dbn.ffs@fw13> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SI2PR02CA0019.apcprd02.prod.outlook.com (2603:1096:4:195::13) To PH7PR11MB6005.namprd11.prod.outlook.com (2603:10b6:510:1e0::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR11MB6005:EE_|SJ1PR11MB6081:EE_ X-MS-Office365-Filtering-Correlation-Id: d3994dbd-563d-4e3e-36fd-08dec55003b1 X-LD-Processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|3023799007|22082099003|6133799003|18002099003|11063799006|56012099006|4143699003; X-Microsoft-Antispam-Message-Info: TXyK4N7BkAPs0A/EqVPV8+yltIX5DZjRSCRyn/JXC0cOpxldgNiPhgwh0cSfLfZScZLxgCVcBwzrBPCSWueH9limbXSX0H26Josa8Ur6fQE6Zbsm8MSby9jpRXSk6ZU15gkpcdXtpqQ9We8YPOYNcLS4KCm8WX0A31NHG3w4KvNstKMWy/POV1zcpzMmMhOfAZz0rpn5xEjgX7Mki2+0ID2IM9aBl3BNqkDodWtBJmm3GyKwKEgx7xEN818peZ1mmWLuItQVU9T8vQXKmMGQYUB04J00rUzCt7l3hAQZa6RvwGigv9zJ4Wfwc6x3W4F0WeoRU51Sa8QUfghtcGPAmzK+rl6o6hgtTBKD5wXlNz/oyJgEVbRfZt2tNx6YoBEI13zbhEEVRz8VTCAUFy++/PyziZFU3w6H3+5OQCWqlwqBqhz7oQirYscoRvHwkWrdIJovl9k8XRi41ftfUDKXe+YBKJbNbflPcddgz2lZTJdSR4/QReoYX4qqxvGFxqJGFXoPqMpj6uhm2tEIbtEolyvimkiopXgUZJbcWTpyD1JugSWp22EhqXu9l0BpY0ycfP8rXKwN00fRBrIjqAIuDqOP2TbEiE2QrpsDTbj1iOLzCxII6daxJukMtVunAvDL01yWYMNMUYaBg+cvtgIw9p6fQGGMb0OVD/kXR+oRAPAG0eiMtTuJbQSnZ/Pv9Dwe X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR11MB6005.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(3023799007)(22082099003)(6133799003)(18002099003)(11063799006)(56012099006)(4143699003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cXJjcXUwSERzMWk1dWdGUEU0d3gzNnQwSTVvcVpYV2ZNR0o4TVNuN0lsRTRx?= =?utf-8?B?Y0QrMGVHaExBZFUvRjBka2dpMEE1dlNnZUdXSEczUmJHdEhXTmVuTis3T253?= =?utf-8?B?dHJodHRWQnNHdXRObDRqREdxa3dLR0FJOWI2WjFFcDg0d2VUK0owS1NCdFZq?= =?utf-8?B?Z1RiOXY1WUhqWnRnamVQNUJBVE9CbkozOHdzZHNSZnRjOVJEWkw3VVhHckJZ?= =?utf-8?B?WW4wRnlhNEJNdlFCNU1YM3JNYWxNeVNvMEFkdko2a2ZRNUd1VGlNTWVqOUF5?= =?utf-8?B?ZGtUVjZDNkR4T0RaZW1JNFM0OGhOdUJRMnZHL1JTcjJuTVhmNGdyUWpXUnY5?= =?utf-8?B?ZWI1OTZoMUE5bndvV1NJMjZiMTU3T05jeUhFaHJNYkd4MFBJT2o3VEtveGZO?= =?utf-8?B?WHJSc3kyNm0xUEpvcm55TXlrRlVNSzRZMEorbk9rMUc2V1hGbTkzVkJ1YlNQ?= =?utf-8?B?UERKMGZtYURLbVVJODIvRmxnb2k3QzljS1RaUE5PclovVHlzOGxHTlVsNkE5?= =?utf-8?B?SFJmNkt5REJxc09QbUdhQVZTQkFkWHRJVGYvOGViTERvZVBMMm4rYWt2M2dS?= =?utf-8?B?RlRJc2o4cjI5NU5KdmUwZ1ZkVUZ2dklmVGVkc0lEV2JBY0JWc29hNm4zL0tV?= =?utf-8?B?eFFJWHdsdU1FVm04Vkh3UVlPQ21ZMDNjT2lkUUM4dXY2OWh3UmJ4cmpkeUF6?= =?utf-8?B?ZzJqVkRXcEZwcHdydStXUTE2ZEhkbm5sMFNOemI4RTRKRFNpQ0pQaVkycDdu?= =?utf-8?B?KzVRVnlMOGtTNDNlTmlWSFNwd3RSNDVrMWd4aUs5U1NlQnhMd1VrWk9NZkpY?= =?utf-8?B?RTB3SWt4RkN3NHptNHR2Ym5VV05Za2tqYm1GSE8vODFmdzAyVGZ4Ykl3UEdX?= =?utf-8?B?S2pnYTFiZDVLL2tOQXhBanpqMzMwSkZVM3Q2YjlUa3BsYWFtNldpb2t2Y1NO?= =?utf-8?B?aVdmZzI3a0FCeDlnNGJQbzhnMGtuZFJjZXFMWWdnNWVVMXlBcGFmWEtYNkkz?= =?utf-8?B?Q2owYmRqMGMraG5mRjBGTURUTWJWVGNZKzQyelpacUJBUWVIUFRRL0Z0SGdJ?= =?utf-8?B?S3hER3lDK2Y0Zk04UFAxTTNId1ZyZHlTRDV5Ykw3V1Ywb3dEOEttZ2M1YUZE?= =?utf-8?B?ZlluV2toQ0M2Mjdma2pLUXUxOTB1c2xPV2V0QmIzL0sxY2JWR2tkaUJHS0VG?= =?utf-8?B?ZWs3M1Z0NEdKV2xpQklMNnlQcUozSXZTekR3QjVDSzdrNk5CM3Y0WVY1VTVW?= =?utf-8?B?Ulc4QnNscTc0d0pxcURGRUI4N2VjcnBHL3BsSVM2d01YbXQ0SnNxY0RmakVn?= =?utf-8?B?Vy8rOWlZQmdtTEtmU2EzQ0lxT3hmRUo0elJSaXc1UnhRZW5SZmRjUnN4WHdo?= =?utf-8?B?dHJOY2hwUmJFQ0diOEFRc1FmQkRJb29RdkM3dmN5SS85d0kyNkdSN2tySlpp?= =?utf-8?B?SXhyaEpZdVRDK01zbTJzZG5KOFNrZzRReTd6ZmpvdjdadUhtSzdTc3M1NkxE?= =?utf-8?B?RXhUY3RTd0gzUXdRNjFJV080UDFnTTJDRDh4YndNdkk5T01iczU4aWwwOUIv?= =?utf-8?B?KzZtUlZBTFpncnY3NUhKY0hwYkd2VHhoc3FydFAyV1M3aFdidjd4Wlc1UmFV?= =?utf-8?B?d3FaR2tFMllwOC9JMDdQUW1LUno0b0VDZnlTak9RcnQxTkxxSmVuMEpIZHpi?= =?utf-8?B?ZFdVdmhaZ3pVcUFxQkNuZmQzUitKUUo5eUZ4Z2lOSkRmaFhHZ3puVTZDaDJO?= =?utf-8?B?a0Yxem5RZXRDYWpKY1Exa05XYURxaHp3c2U1ditmYjFDV05VV3JhV0tXRG9B?= =?utf-8?B?eUVGeUJ6OTVINDd3LyswRmZEZWFPUmwremNRcTNKYVg0UE1ML0dMVDF1Szc0?= =?utf-8?B?NXRDQThxTGp0eG5jUmdLVW9hOXdaMmszQVpWZW9YaXZzRGhPendHczRZWkpt?= =?utf-8?B?Rytha3dkZlpycHNWMVpLckhZZnkwbVFtMEkrd1BJeWFGbHdrMnRZblllYkho?= =?utf-8?B?Ui92SjhoeFlpdEJaQmM2SDJsT0J2eXJjYzRvTnF3cmxVY3ZYaDkxNWFwVFdy?= =?utf-8?B?eFVqRDh2allpZEU1T0NlN0RRSzVHVXJJWGVFUHloVi9KdWkwbENyNFA2U0Nj?= =?utf-8?B?OUgycExubGZFbTVYT1VRb29JTkhibTBzMWU5WnFYejdlWlB2M0M5RUhSbkx4?= =?utf-8?B?WTZjU3NtODRyT2dCSFpsNUxlSXI4c3JFTW5WVVp6TmNFK2ZlUC9OR1BscTZK?= =?utf-8?B?M0xNQVgyMko1bDI3RExTeXY3QzhWWTBkak96OU5lQkpub0pzR3FYWU56ektl?= =?utf-8?B?N1RGK0ZpZ2lBVEJLVlIzcWxlM1Mxa0FVeHF6VjBKNU9WbXkwalVOQT09?= X-Exchange-RoutingPolicyChecked: HRZ0M+R3J4KqadgDKtnFDJJcQFCRs7+b1c3zTga6RCxZkpLqxTEY4NXOrZOBOTcRZw9qO4ktDrqjac9cFcJTgJQfmYivOV6GjItUhu2OFnZaHYC/0xvHRa4D6vFWIVcuo6e/RnFvXoY/q+Feh6EyWpliGHmWFnguaQB8l+Bm/NVtS5LK4cRhhpU+ZxSiPHNZJBlqhIgUs/6bAQhqkgFGEZojmT8Qi2u1niZlm2ksxWrAEJMwfsZ8f09k/qz1Fi3KojW8b3b3pwLIQPcZ9l0s16nRu2PVon/JhmSfwWGLD66DuYoWhl4oUBdkkL6VJuomorV1Kc4HSNanL+jrDHu89Q== X-MS-Exchange-CrossTenant-Network-Message-Id: d3994dbd-563d-4e3e-36fd-08dec55003b1 X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB6005.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2026 11:20:58.6445 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uLbUatIARlVp1j/T0WmUaqOE+TiM93CPUVQz8cq51wQtH3MSWiU7IOxsxCJskGMI08BKb7Ws0is6+YdDv50mnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR11MB6081 X-OriginatorOrg: intel.com Hi Thomas, On 6/8/2026 4:59 PM, Thomas Gleixner wrote: > On Sat, Jun 06 2026 at 10:32, Chen Yu wrote: >> + >> +static inline struct acpi_subtbl_hdr_16 *rmdd_subtbl(struct acpi_erdt_rmdd *rmdd) >> +{ >> + return (void *)rmdd + sizeof(*rmdd); >> +} >> + >> +static inline struct acpi_subtbl_hdr_16 *next_subtbl(struct acpi_subtbl_hdr_16 *subtbl) >> +{ >> + return (void *)subtbl + subtbl->length; >> +} > > Second thoughts on this. Hit send too fast. > >> +static inline bool subtbl_valid(struct acpi_erdt_rmdd *rmdd, struct acpi_subtbl_hdr_16 *subtbl) >> +{ >> + void *rmdd_end = (void *)rmdd + rmdd->header.length; >> + >> + if (subtbl->length < sizeof(*subtbl)) >> + return false; >> + >> + if ((void *)subtbl + sizeof(*subtbl) > rmdd_end) >> + return false; >> + >> + if ((void *)subtbl + subtbl->length > rmdd_end) >> + return false; > > These conditions are confusing. This basically allows subtbl->length to > be larger than sizeof(tbl) as long as it's within the limits. > > If that's intentional then the second condition is pointless because > according to the first condition > > length >= sizeof(tbl) > > so > > tbl + length <= end > > is catching both. No? > You are right, subtbl + sizeof(*subtbl) > rmdd_end is redundant because condition 3 has protected against any invalid out-of-boundary access. Will remove condition 2. >> + return true; > >> +static __init int enumerate_erdt_table(struct acpi_table_header *table_hdr) >> +{ >> + struct acpi_table_erdt *erdt = (struct acpi_table_erdt *)table_hdr; >> + struct acpi_subtbl_hdr_16 *subtbl; >> + void *table_end; >> + >> + if (erdt->header.revision != ERDT_VALID_VERSION) { >> + pr_info("Unknown ERDT table revision %d\n", erdt->header.revision); >> + return -EINVAL; >> + } >> + >> + if (erdt->header.length < sizeof(*erdt)) { >> + pr_info(FW_BUG "ERDT: Invalid table length %u\n", erdt->header.length); >> + return -EINVAL; >> + } >> + >> + subtbl = (void *)erdt + sizeof(struct acpi_table_erdt); >> + table_end = (void *)erdt + erdt->header.length; >> + >> + while ((void *)subtbl + sizeof(*subtbl) <= table_end) { >> + if (subtbl->length < sizeof(*subtbl) || >> + (void *)subtbl + subtbl->length > table_end) { >> + pr_info("ERDT: Invalid subtable length\n"); >> + goto cleanup; >> + } > > So this is yet another version of the above, just slighty different with > the same strange conditions. > > If you make subtbl_valid(): > > static inline bool subtbl_valid(void *end, struct acpi_subtbl_hdr_16 *subtbl) > > and calculate the end at the call sites you can reuse that function. > >> + >> + if (subtbl->type == ACPI_ERDT_TYPE_RMDD) >> + if (!parse_rmdd_entry(subtbl)) >> + goto cleanup; >> + >> + subtbl = (void *)subtbl + subtbl->length; > > open coded variant of next_subtbl() > OK, will reuse next_subtbl() and subtbl_valid(). Thanks! thanks, Chenyu