Skip to content

Commit 098fe55

Browse files
ZideChen0Peter Zijlstra
authored andcommitted
perf/x86/intel/uncore: Move uncore discovery init struct to header
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 <zide.chen@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com> Link: https://patch.msgid.link/20251231224233.113839-2-zide.chen@intel.com
1 parent 632d89b commit 098fe55

4 files changed

Lines changed: 49 additions & 47 deletions

File tree

arch/x86/events/intel/uncore.c

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,149 +1697,139 @@ static int __init uncore_mmio_init(void)
16971697
return ret;
16981698
}
16991699

1700-
struct intel_uncore_init_fun {
1701-
void (*cpu_init)(void);
1702-
int (*pci_init)(void);
1703-
void (*mmio_init)(void);
1704-
/* Discovery table is required */
1705-
bool use_discovery;
1706-
/* The units in the discovery table should be ignored. */
1707-
int *uncore_units_ignore;
1708-
};
1709-
1710-
static const struct intel_uncore_init_fun nhm_uncore_init __initconst = {
1700+
static const struct uncore_plat_init nhm_uncore_init __initconst = {
17111701
.cpu_init = nhm_uncore_cpu_init,
17121702
};
17131703

1714-
static const struct intel_uncore_init_fun snb_uncore_init __initconst = {
1704+
static const struct uncore_plat_init snb_uncore_init __initconst = {
17151705
.cpu_init = snb_uncore_cpu_init,
17161706
.pci_init = snb_uncore_pci_init,
17171707
};
17181708

1719-
static const struct intel_uncore_init_fun ivb_uncore_init __initconst = {
1709+
static const struct uncore_plat_init ivb_uncore_init __initconst = {
17201710
.cpu_init = snb_uncore_cpu_init,
17211711
.pci_init = ivb_uncore_pci_init,
17221712
};
17231713

1724-
static const struct intel_uncore_init_fun hsw_uncore_init __initconst = {
1714+
static const struct uncore_plat_init hsw_uncore_init __initconst = {
17251715
.cpu_init = snb_uncore_cpu_init,
17261716
.pci_init = hsw_uncore_pci_init,
17271717
};
17281718

1729-
static const struct intel_uncore_init_fun bdw_uncore_init __initconst = {
1719+
static const struct uncore_plat_init bdw_uncore_init __initconst = {
17301720
.cpu_init = snb_uncore_cpu_init,
17311721
.pci_init = bdw_uncore_pci_init,
17321722
};
17331723

1734-
static const struct intel_uncore_init_fun snbep_uncore_init __initconst = {
1724+
static const struct uncore_plat_init snbep_uncore_init __initconst = {
17351725
.cpu_init = snbep_uncore_cpu_init,
17361726
.pci_init = snbep_uncore_pci_init,
17371727
};
17381728

1739-
static const struct intel_uncore_init_fun nhmex_uncore_init __initconst = {
1729+
static const struct uncore_plat_init nhmex_uncore_init __initconst = {
17401730
.cpu_init = nhmex_uncore_cpu_init,
17411731
};
17421732

1743-
static const struct intel_uncore_init_fun ivbep_uncore_init __initconst = {
1733+
static const struct uncore_plat_init ivbep_uncore_init __initconst = {
17441734
.cpu_init = ivbep_uncore_cpu_init,
17451735
.pci_init = ivbep_uncore_pci_init,
17461736
};
17471737

1748-
static const struct intel_uncore_init_fun hswep_uncore_init __initconst = {
1738+
static const struct uncore_plat_init hswep_uncore_init __initconst = {
17491739
.cpu_init = hswep_uncore_cpu_init,
17501740
.pci_init = hswep_uncore_pci_init,
17511741
};
17521742

1753-
static const struct intel_uncore_init_fun bdx_uncore_init __initconst = {
1743+
static const struct uncore_plat_init bdx_uncore_init __initconst = {
17541744
.cpu_init = bdx_uncore_cpu_init,
17551745
.pci_init = bdx_uncore_pci_init,
17561746
};
17571747

1758-
static const struct intel_uncore_init_fun knl_uncore_init __initconst = {
1748+
static const struct uncore_plat_init knl_uncore_init __initconst = {
17591749
.cpu_init = knl_uncore_cpu_init,
17601750
.pci_init = knl_uncore_pci_init,
17611751
};
17621752

1763-
static const struct intel_uncore_init_fun skl_uncore_init __initconst = {
1753+
static const struct uncore_plat_init skl_uncore_init __initconst = {
17641754
.cpu_init = skl_uncore_cpu_init,
17651755
.pci_init = skl_uncore_pci_init,
17661756
};
17671757

1768-
static const struct intel_uncore_init_fun skx_uncore_init __initconst = {
1758+
static const struct uncore_plat_init skx_uncore_init __initconst = {
17691759
.cpu_init = skx_uncore_cpu_init,
17701760
.pci_init = skx_uncore_pci_init,
17711761
};
17721762

1773-
static const struct intel_uncore_init_fun icl_uncore_init __initconst = {
1763+
static const struct uncore_plat_init icl_uncore_init __initconst = {
17741764
.cpu_init = icl_uncore_cpu_init,
17751765
.pci_init = skl_uncore_pci_init,
17761766
};
17771767

1778-
static const struct intel_uncore_init_fun tgl_uncore_init __initconst = {
1768+
static const struct uncore_plat_init tgl_uncore_init __initconst = {
17791769
.cpu_init = tgl_uncore_cpu_init,
17801770
.mmio_init = tgl_uncore_mmio_init,
17811771
};
17821772

1783-
static const struct intel_uncore_init_fun tgl_l_uncore_init __initconst = {
1773+
static const struct uncore_plat_init tgl_l_uncore_init __initconst = {
17841774
.cpu_init = tgl_uncore_cpu_init,
17851775
.mmio_init = tgl_l_uncore_mmio_init,
17861776
};
17871777

1788-
static const struct intel_uncore_init_fun rkl_uncore_init __initconst = {
1778+
static const struct uncore_plat_init rkl_uncore_init __initconst = {
17891779
.cpu_init = tgl_uncore_cpu_init,
17901780
.pci_init = skl_uncore_pci_init,
17911781
};
17921782

1793-
static const struct intel_uncore_init_fun adl_uncore_init __initconst = {
1783+
static const struct uncore_plat_init adl_uncore_init __initconst = {
17941784
.cpu_init = adl_uncore_cpu_init,
17951785
.mmio_init = adl_uncore_mmio_init,
17961786
};
17971787

1798-
static const struct intel_uncore_init_fun mtl_uncore_init __initconst = {
1788+
static const struct uncore_plat_init mtl_uncore_init __initconst = {
17991789
.cpu_init = mtl_uncore_cpu_init,
18001790
.mmio_init = adl_uncore_mmio_init,
18011791
};
18021792

1803-
static const struct intel_uncore_init_fun lnl_uncore_init __initconst = {
1793+
static const struct uncore_plat_init lnl_uncore_init __initconst = {
18041794
.cpu_init = lnl_uncore_cpu_init,
18051795
.mmio_init = lnl_uncore_mmio_init,
18061796
};
18071797

1808-
static const struct intel_uncore_init_fun ptl_uncore_init __initconst = {
1798+
static const struct uncore_plat_init ptl_uncore_init __initconst = {
18091799
.cpu_init = ptl_uncore_cpu_init,
18101800
.mmio_init = ptl_uncore_mmio_init,
18111801
.use_discovery = true,
18121802
};
18131803

1814-
static const struct intel_uncore_init_fun icx_uncore_init __initconst = {
1804+
static const struct uncore_plat_init icx_uncore_init __initconst = {
18151805
.cpu_init = icx_uncore_cpu_init,
18161806
.pci_init = icx_uncore_pci_init,
18171807
.mmio_init = icx_uncore_mmio_init,
18181808
};
18191809

1820-
static const struct intel_uncore_init_fun snr_uncore_init __initconst = {
1810+
static const struct uncore_plat_init snr_uncore_init __initconst = {
18211811
.cpu_init = snr_uncore_cpu_init,
18221812
.pci_init = snr_uncore_pci_init,
18231813
.mmio_init = snr_uncore_mmio_init,
18241814
};
18251815

1826-
static const struct intel_uncore_init_fun spr_uncore_init __initconst = {
1816+
static const struct uncore_plat_init spr_uncore_init __initconst = {
18271817
.cpu_init = spr_uncore_cpu_init,
18281818
.pci_init = spr_uncore_pci_init,
18291819
.mmio_init = spr_uncore_mmio_init,
18301820
.use_discovery = true,
18311821
.uncore_units_ignore = spr_uncore_units_ignore,
18321822
};
18331823

1834-
static const struct intel_uncore_init_fun gnr_uncore_init __initconst = {
1824+
static const struct uncore_plat_init gnr_uncore_init __initconst = {
18351825
.cpu_init = gnr_uncore_cpu_init,
18361826
.pci_init = gnr_uncore_pci_init,
18371827
.mmio_init = gnr_uncore_mmio_init,
18381828
.use_discovery = true,
18391829
.uncore_units_ignore = gnr_uncore_units_ignore,
18401830
};
18411831

1842-
static const struct intel_uncore_init_fun generic_uncore_init __initconst = {
1832+
static const struct uncore_plat_init generic_uncore_init __initconst = {
18431833
.cpu_init = intel_uncore_generic_uncore_cpu_init,
18441834
.pci_init = intel_uncore_generic_uncore_pci_init,
18451835
.mmio_init = intel_uncore_generic_uncore_mmio_init,
@@ -1910,7 +1900,7 @@ MODULE_DEVICE_TABLE(x86cpu, intel_uncore_match);
19101900
static int __init intel_uncore_init(void)
19111901
{
19121902
const struct x86_cpu_id *id;
1913-
struct intel_uncore_init_fun *uncore_init;
1903+
struct uncore_plat_init *uncore_init;
19141904
int pret = 0, cret = 0, mret = 0, ret;
19151905

19161906
if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
@@ -1921,16 +1911,16 @@ static int __init intel_uncore_init(void)
19211911

19221912
id = x86_match_cpu(intel_uncore_match);
19231913
if (!id) {
1924-
if (!uncore_no_discover && intel_uncore_has_discovery_tables(NULL))
1925-
uncore_init = (struct intel_uncore_init_fun *)&generic_uncore_init;
1914+
if (!uncore_no_discover && uncore_discovery(NULL))
1915+
uncore_init = (struct uncore_plat_init *)&generic_uncore_init;
19261916
else
19271917
return -ENODEV;
19281918
} else {
1929-
uncore_init = (struct intel_uncore_init_fun *)id->driver_data;
1919+
uncore_init = (struct uncore_plat_init *)id->driver_data;
19301920
if (uncore_no_discover && uncore_init->use_discovery)
19311921
return -ENODEV;
19321922
if (uncore_init->use_discovery &&
1933-
!intel_uncore_has_discovery_tables(uncore_init->uncore_units_ignore))
1923+
!uncore_discovery(uncore_init))
19341924
return -ENODEV;
19351925
}
19361926

arch/x86/events/intel/uncore.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ struct uncore_event_desc;
4747
struct freerunning_counters;
4848
struct intel_uncore_topology;
4949

50+
struct uncore_plat_init {
51+
void (*cpu_init)(void);
52+
int (*pci_init)(void);
53+
void (*mmio_init)(void);
54+
/* Discovery table is required */
55+
bool use_discovery;
56+
/* The units in the discovery table should be ignored. */
57+
int *uncore_units_ignore;
58+
};
59+
5060
struct intel_uncore_type {
5161
const char *name;
5262
int num_counters;

arch/x86/events/intel/uncore_discovery.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ static int parse_discovery_table(struct pci_dev *dev, int die,
350350
return __parse_discovery_table(addr, die, parsed, ignore);
351351
}
352352

353-
static bool intel_uncore_has_discovery_tables_pci(int *ignore)
353+
static bool uncore_discovery_pci(int *ignore)
354354
{
355355
u32 device, val, entry_id, bar_offset;
356356
int die, dvsec = 0, ret = true;
@@ -399,7 +399,7 @@ static bool intel_uncore_has_discovery_tables_pci(int *ignore)
399399
return ret;
400400
}
401401

402-
static bool intel_uncore_has_discovery_tables_msr(int *ignore)
402+
static bool uncore_discovery_msr(int *ignore)
403403
{
404404
unsigned long *die_mask;
405405
bool parsed = false;
@@ -432,10 +432,12 @@ static bool intel_uncore_has_discovery_tables_msr(int *ignore)
432432
return parsed;
433433
}
434434

435-
bool intel_uncore_has_discovery_tables(int *ignore)
435+
bool uncore_discovery(struct uncore_plat_init *init)
436436
{
437-
return intel_uncore_has_discovery_tables_msr(ignore) ||
438-
intel_uncore_has_discovery_tables_pci(ignore);
437+
int *ignore = init ? init->uncore_units_ignore : NULL;
438+
439+
return uncore_discovery_msr(ignore) ||
440+
uncore_discovery_pci(ignore);
439441
}
440442

441443
void intel_uncore_clear_discovery_tables(void)

arch/x86/events/intel/uncore_discovery.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ struct intel_uncore_discovery_type {
136136
u16 num_units; /* number of units */
137137
};
138138

139-
bool intel_uncore_has_discovery_tables(int *ignore);
139+
bool uncore_discovery(struct uncore_plat_init *init);
140140
void intel_uncore_clear_discovery_tables(void);
141141
void intel_uncore_generic_uncore_cpu_init(void);
142142
int intel_uncore_generic_uncore_pci_init(void);

0 commit comments

Comments
 (0)