From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.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 53BBF20458A; Sun, 4 Jan 2026 01:47:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.19 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767491232; cv=none; b=q5V6+VqL7EJZ/UA31rs8XYtTK0rc/BcIsQF+Tf0ZqHxerdlkG1kByGBG9lBs/UmOE5P9SWoGl+qSMlCK2dhp79j6FjxmQMu9hyU8dj+wNpfex3f9qNK22TBjdhC+GtLoEc6+IX81MmgWhxZj7+iL4cbLsJs+Rq3HXWYpab6Z1PY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767491232; c=relaxed/simple; bh=yAaiK4Z0Eo6f5L4841FSvB4WKyy8yCD/x9aENyS2Um0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=HkR1pkckYDm8E4yeHJMgGyUYVk6LWVvwNWOAsb1BCz8j+FyOy7ymxg+dAB1E+9TOD0n9MeDCs/gkuVEKrkSJOVF4VIQrBbunEKm+Msjhc5ibCOTrw9zWsSTTqC5AiYZ1U3SlHWCPqQV2LGA/4Sz3vgJ5erZEN9jyB5Tn2vW48t0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=InsnulPt; arc=none smtp.client-ip=198.175.65.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="InsnulPt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1767491230; x=1799027230; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=yAaiK4Z0Eo6f5L4841FSvB4WKyy8yCD/x9aENyS2Um0=; b=InsnulPt+OahBJW22mvYogsqTF5hlCaLqAKeIIpmy2q3rl1GwOxTW+U0 GhH6RNeSUe87BSAmI/YhK7whKSM5tJKWpTdbxSnF8ol+V/KRv0HrZp0PV 3HLWZ+iCgJO9do290LVWvQci5+Q0HCx46AVQQfVByaAv9qU7j4p2S1Amd AhsWy9zLjanLee8LDM7lGbWNsaVKEKH1R17Pl5Vmst1fh/0ihboF844b/ l8nFVTb8Lglh43pxAedyFfQnRW9+ps9rh69r33IRAtxU603S7LuFS+iLy 8nWhrD1qiwbLKlN+lg5Pq806fF/41et1IOqxIT8clg2x0oeHKK0eLat3z Q==; X-CSE-ConnectionGUID: kUJ9cAoyTHqsPJpxmebYhA== X-CSE-MsgGUID: T14VdJo4QW2KM3sZQHyFnw== X-IronPort-AV: E=McAfee;i="6800,10657,11659"; a="68821680" X-IronPort-AV: E=Sophos;i="6.21,200,1763452800"; d="scan'208";a="68821680" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jan 2026 17:47:08 -0800 X-CSE-ConnectionGUID: uPBrPsX5R0OvVePdgiG++w== X-CSE-MsgGUID: hW3jJvmqS2OUqK1ZqQ7Ggw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,200,1763452800"; d="scan'208";a="206571395" Received: from dapengmi-mobl1.ccr.corp.intel.com (HELO [10.124.240.14]) ([10.124.240.14]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jan 2026 17:47:05 -0800 Message-ID: <9dec5f35-0e9a-4f1c-bcf1-9b15793b17d1@linux.intel.com> Date: Sun, 4 Jan 2026 09:47:03 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH V2 01/13] perf/x86/intel/uncore: Move uncore discovery init struct to header To: Zide Chen , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Andi Kleen , Eranian Stephane Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Xudong Hao , Falcon Thomas References: <20251231224233.113839-1-zide.chen@intel.com> <20251231224233.113839-2-zide.chen@intel.com> Content-Language: en-US From: "Mi, Dapeng" In-Reply-To: <20251231224233.113839-2-zide.chen@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 1/1/2026 6:42 AM, Zide Chen wrote: > The discovery base MSR or PCI device is platform-specific and must be > defined statically in the per-platform init table and passed to the > discovery code. > > Move the definition of struct intel_uncore_init_fun to uncore.h so it > can be accessed by discovery code, and rename it to reflect that it > now carries more than just init callbacks. > > Shorten intel_uncore_has_discovery_tables[_pci/msr] to > uncore_discovery[_pci/msr] for improved readability and alignment. > > Drop the `intel_` prefix from new names since the code is under the > intel directory and long identifiers make alignment harder. Further > cleanups will continue removing `intel_` prefixes. > > No functional change intended. > > Signed-off-by: Zide Chen > --- > V2: New patch > > arch/x86/events/intel/uncore.c | 72 ++++++++++-------------- > arch/x86/events/intel/uncore.h | 10 ++++ > arch/x86/events/intel/uncore_discovery.c | 12 ++-- > arch/x86/events/intel/uncore_discovery.h | 2 +- > 4 files changed, 49 insertions(+), 47 deletions(-) > > diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c > index e228e564b15e..cd561290be8c 100644 > --- a/arch/x86/events/intel/uncore.c > +++ b/arch/x86/events/intel/uncore.c > @@ -1697,133 +1697,123 @@ static int __init uncore_mmio_init(void) > return ret; > } > > -struct intel_uncore_init_fun { > - void (*cpu_init)(void); > - int (*pci_init)(void); > - void (*mmio_init)(void); > - /* Discovery table is required */ > - bool use_discovery; > - /* The units in the discovery table should be ignored. */ > - int *uncore_units_ignore; > -}; > - > -static const struct intel_uncore_init_fun nhm_uncore_init __initconst = { > +static const struct uncore_plat_init nhm_uncore_init __initconst = { > .cpu_init = nhm_uncore_cpu_init, > }; > > -static const struct intel_uncore_init_fun snb_uncore_init __initconst = { > +static const struct uncore_plat_init snb_uncore_init __initconst = { > .cpu_init = snb_uncore_cpu_init, > .pci_init = snb_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun ivb_uncore_init __initconst = { > +static const struct uncore_plat_init ivb_uncore_init __initconst = { > .cpu_init = snb_uncore_cpu_init, > .pci_init = ivb_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun hsw_uncore_init __initconst = { > +static const struct uncore_plat_init hsw_uncore_init __initconst = { > .cpu_init = snb_uncore_cpu_init, > .pci_init = hsw_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun bdw_uncore_init __initconst = { > +static const struct uncore_plat_init bdw_uncore_init __initconst = { > .cpu_init = snb_uncore_cpu_init, > .pci_init = bdw_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun snbep_uncore_init __initconst = { > +static const struct uncore_plat_init snbep_uncore_init __initconst = { > .cpu_init = snbep_uncore_cpu_init, > .pci_init = snbep_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun nhmex_uncore_init __initconst = { > +static const struct uncore_plat_init nhmex_uncore_init __initconst = { > .cpu_init = nhmex_uncore_cpu_init, > }; > > -static const struct intel_uncore_init_fun ivbep_uncore_init __initconst = { > +static const struct uncore_plat_init ivbep_uncore_init __initconst = { > .cpu_init = ivbep_uncore_cpu_init, > .pci_init = ivbep_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun hswep_uncore_init __initconst = { > +static const struct uncore_plat_init hswep_uncore_init __initconst = { > .cpu_init = hswep_uncore_cpu_init, > .pci_init = hswep_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun bdx_uncore_init __initconst = { > +static const struct uncore_plat_init bdx_uncore_init __initconst = { > .cpu_init = bdx_uncore_cpu_init, > .pci_init = bdx_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun knl_uncore_init __initconst = { > +static const struct uncore_plat_init knl_uncore_init __initconst = { > .cpu_init = knl_uncore_cpu_init, > .pci_init = knl_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun skl_uncore_init __initconst = { > +static const struct uncore_plat_init skl_uncore_init __initconst = { > .cpu_init = skl_uncore_cpu_init, > .pci_init = skl_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun skx_uncore_init __initconst = { > +static const struct uncore_plat_init skx_uncore_init __initconst = { > .cpu_init = skx_uncore_cpu_init, > .pci_init = skx_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun icl_uncore_init __initconst = { > +static const struct uncore_plat_init icl_uncore_init __initconst = { > .cpu_init = icl_uncore_cpu_init, > .pci_init = skl_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun tgl_uncore_init __initconst = { > +static const struct uncore_plat_init tgl_uncore_init __initconst = { > .cpu_init = tgl_uncore_cpu_init, > .mmio_init = tgl_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun tgl_l_uncore_init __initconst = { > +static const struct uncore_plat_init tgl_l_uncore_init __initconst = { > .cpu_init = tgl_uncore_cpu_init, > .mmio_init = tgl_l_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun rkl_uncore_init __initconst = { > +static const struct uncore_plat_init rkl_uncore_init __initconst = { > .cpu_init = tgl_uncore_cpu_init, > .pci_init = skl_uncore_pci_init, > }; > > -static const struct intel_uncore_init_fun adl_uncore_init __initconst = { > +static const struct uncore_plat_init adl_uncore_init __initconst = { > .cpu_init = adl_uncore_cpu_init, > .mmio_init = adl_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun mtl_uncore_init __initconst = { > +static const struct uncore_plat_init mtl_uncore_init __initconst = { > .cpu_init = mtl_uncore_cpu_init, > .mmio_init = adl_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun lnl_uncore_init __initconst = { > +static const struct uncore_plat_init lnl_uncore_init __initconst = { > .cpu_init = lnl_uncore_cpu_init, > .mmio_init = lnl_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun ptl_uncore_init __initconst = { > +static const struct uncore_plat_init ptl_uncore_init __initconst = { > .cpu_init = ptl_uncore_cpu_init, > .mmio_init = ptl_uncore_mmio_init, > .use_discovery = true, > }; > > -static const struct intel_uncore_init_fun icx_uncore_init __initconst = { > +static const struct uncore_plat_init icx_uncore_init __initconst = { > .cpu_init = icx_uncore_cpu_init, > .pci_init = icx_uncore_pci_init, > .mmio_init = icx_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun snr_uncore_init __initconst = { > +static const struct uncore_plat_init snr_uncore_init __initconst = { > .cpu_init = snr_uncore_cpu_init, > .pci_init = snr_uncore_pci_init, > .mmio_init = snr_uncore_mmio_init, > }; > > -static const struct intel_uncore_init_fun spr_uncore_init __initconst = { > +static const struct uncore_plat_init spr_uncore_init __initconst = { > .cpu_init = spr_uncore_cpu_init, > .pci_init = spr_uncore_pci_init, > .mmio_init = spr_uncore_mmio_init, > @@ -1831,7 +1821,7 @@ static const struct intel_uncore_init_fun spr_uncore_init __initconst = { > .uncore_units_ignore = spr_uncore_units_ignore, > }; > > -static const struct intel_uncore_init_fun gnr_uncore_init __initconst = { > +static const struct uncore_plat_init gnr_uncore_init __initconst = { > .cpu_init = gnr_uncore_cpu_init, > .pci_init = gnr_uncore_pci_init, > .mmio_init = gnr_uncore_mmio_init, > @@ -1839,7 +1829,7 @@ static const struct intel_uncore_init_fun gnr_uncore_init __initconst = { > .uncore_units_ignore = gnr_uncore_units_ignore, > }; > > -static const struct intel_uncore_init_fun generic_uncore_init __initconst = { > +static const struct uncore_plat_init generic_uncore_init __initconst = { > .cpu_init = intel_uncore_generic_uncore_cpu_init, > .pci_init = intel_uncore_generic_uncore_pci_init, > .mmio_init = intel_uncore_generic_uncore_mmio_init, > @@ -1910,7 +1900,7 @@ MODULE_DEVICE_TABLE(x86cpu, intel_uncore_match); > static int __init intel_uncore_init(void) > { > const struct x86_cpu_id *id; > - struct intel_uncore_init_fun *uncore_init; > + struct uncore_plat_init *uncore_init; > int pret = 0, cret = 0, mret = 0, ret; > > if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) > @@ -1921,16 +1911,16 @@ static int __init intel_uncore_init(void) > > id = x86_match_cpu(intel_uncore_match); > if (!id) { > - if (!uncore_no_discover && intel_uncore_has_discovery_tables(NULL)) > - uncore_init = (struct intel_uncore_init_fun *)&generic_uncore_init; > + if (!uncore_no_discover && uncore_discovery(NULL)) > + uncore_init = (struct uncore_plat_init *)&generic_uncore_init; > else > return -ENODEV; > } else { > - uncore_init = (struct intel_uncore_init_fun *)id->driver_data; > + uncore_init = (struct uncore_plat_init *)id->driver_data; > if (uncore_no_discover && uncore_init->use_discovery) > return -ENODEV; > if (uncore_init->use_discovery && > - !intel_uncore_has_discovery_tables(uncore_init->uncore_units_ignore)) > + !uncore_discovery(uncore_init)) > return -ENODEV; > } > > diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h > index d8815fff7588..568536ef28ee 100644 > --- a/arch/x86/events/intel/uncore.h > +++ b/arch/x86/events/intel/uncore.h > @@ -47,6 +47,16 @@ struct uncore_event_desc; > struct freerunning_counters; > struct intel_uncore_topology; > > +struct uncore_plat_init { > + void (*cpu_init)(void); > + int (*pci_init)(void); > + void (*mmio_init)(void); > + /* Discovery table is required */ > + bool use_discovery; > + /* The units in the discovery table should be ignored. */ > + int *uncore_units_ignore; > +}; > + > struct intel_uncore_type { > const char *name; > int num_counters; > diff --git a/arch/x86/events/intel/uncore_discovery.c b/arch/x86/events/intel/uncore_discovery.c > index 7d57ce706feb..d39f6a0b8cc3 100644 > --- a/arch/x86/events/intel/uncore_discovery.c > +++ b/arch/x86/events/intel/uncore_discovery.c > @@ -350,7 +350,7 @@ static int parse_discovery_table(struct pci_dev *dev, int die, > return __parse_discovery_table(addr, die, parsed, ignore); > } > > -static bool intel_uncore_has_discovery_tables_pci(int *ignore) > +static bool uncore_discovery_pci(int *ignore) > { > u32 device, val, entry_id, bar_offset; > int die, dvsec = 0, ret = true; > @@ -399,7 +399,7 @@ static bool intel_uncore_has_discovery_tables_pci(int *ignore) > return ret; > } > > -static bool intel_uncore_has_discovery_tables_msr(int *ignore) > +static bool uncore_discovery_msr(int *ignore) > { > unsigned long *die_mask; > bool parsed = false; > @@ -432,10 +432,12 @@ static bool intel_uncore_has_discovery_tables_msr(int *ignore) > return parsed; > } > > -bool intel_uncore_has_discovery_tables(int *ignore) > +bool uncore_discovery(struct uncore_plat_init *init) > { > - return intel_uncore_has_discovery_tables_msr(ignore) || > - intel_uncore_has_discovery_tables_pci(ignore); > + int *ignore = init ? init->uncore_units_ignore : NULL; > + > + return uncore_discovery_msr(ignore) || > + uncore_discovery_pci(ignore); > } > > void intel_uncore_clear_discovery_tables(void) > diff --git a/arch/x86/events/intel/uncore_discovery.h b/arch/x86/events/intel/uncore_discovery.h > index dff75c98e22f..dfc237a2b6df 100644 > --- a/arch/x86/events/intel/uncore_discovery.h > +++ b/arch/x86/events/intel/uncore_discovery.h > @@ -136,7 +136,7 @@ struct intel_uncore_discovery_type { > u16 num_units; /* number of units */ > }; > > -bool intel_uncore_has_discovery_tables(int *ignore); > +bool uncore_discovery(struct uncore_plat_init *init); > void intel_uncore_clear_discovery_tables(void); > void intel_uncore_generic_uncore_cpu_init(void); > int intel_uncore_generic_uncore_pci_init(void); LGTM. Reviewed-by:  Dapeng Mi