Commit 18973367 authored by Zide Chen's avatar Zide Chen Committed by Peter Zijlstra
Browse files

perf/x86/intel/uncore: Remove has_generic_discovery_table()



In the !x86_match_cpu() fallback path, has_generic_discovery_table()
is removed because it does not handle multiple PCI devices.  Instead,
use PCI_ANY_ID in generic_uncore_init[] to probe all PCI devices.

For MSR portals, only probe MSR 0x201e to keep the fallback simple, as
this path is best-effort only.

Signed-off-by: default avatarZide Chen <zide.chen@intel.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarDapeng Mi <dapeng1.mi@linux.intel.com>
Link: https://patch.msgid.link/20251231224233.113839-4-zide.chen@intel.com
parent e75462f6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1835,6 +1835,9 @@ 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,
	.domain[0].base_is_pci = true,
	.domain[0].discovery_base = PCI_ANY_ID,
	.domain[1].discovery_base = UNCORE_DISCOVERY_MSR,
};

static const struct x86_cpu_id intel_uncore_match[] __initconst = {
+9 −33
Original line number Diff line number Diff line
@@ -12,24 +12,6 @@
static struct rb_root discovery_tables = RB_ROOT;
static int num_discovered_types[UNCORE_ACCESS_MAX];

static bool has_generic_discovery_table(void)
{
	struct pci_dev *dev;
	int dvsec;

	dev = pci_get_device(PCI_VENDOR_ID_INTEL, UNCORE_DISCOVERY_TABLE_DEVICE, NULL);
	if (!dev)
		return false;

	/* A discovery table device has the unique capability ID. */
	dvsec = pci_find_next_ext_capability(dev, 0, UNCORE_EXT_CAP_ID_DISCOVERY);
	pci_dev_put(dev);
	if (dvsec)
		return true;

	return false;
}

static int logical_die_id;

static int get_device_die_id(struct pci_dev *dev)
@@ -358,12 +340,7 @@ static bool uncore_discovery_pci(struct uncore_discovery_domain *domain)
	struct pci_dev *dev = NULL;
	bool parsed = false;

	if (domain->discovery_base)
	device = domain->discovery_base;
	else if (has_generic_discovery_table())
		device = UNCORE_DISCOVERY_TABLE_DEVICE;
	else
		device = PCI_ANY_ID;

	/*
	 * Start a new search and iterates through the list of
@@ -406,7 +383,7 @@ static bool uncore_discovery_msr(struct uncore_discovery_domain *domain)
{
	unsigned long *die_mask;
	bool parsed = false;
	int cpu, die, msr;
	int cpu, die;
	u64 base;

	die_mask = kcalloc(BITS_TO_LONGS(uncore_max_dies()),
@@ -414,16 +391,13 @@ static bool uncore_discovery_msr(struct uncore_discovery_domain *domain)
	if (!die_mask)
		return false;

	msr = domain->discovery_base ?
	      domain->discovery_base : UNCORE_DISCOVERY_MSR;

	cpus_read_lock();
	for_each_online_cpu(cpu) {
		die = topology_logical_die_id(cpu);
		if (__test_and_set_bit(die, die_mask))
			continue;

		if (rdmsrq_safe_on_cpu(cpu, msr, &base))
		if (rdmsrq_safe_on_cpu(cpu, domain->discovery_base, &base))
			continue;

		if (!base)
@@ -446,11 +420,13 @@ bool uncore_discovery(struct uncore_plat_init *init)

	for (i = 0; i < UNCORE_DISCOVERY_DOMAINS; i++) {
		domain = &init->domain[i];
		if (domain->discovery_base) {
			if (!domain->base_is_pci)
				ret |= uncore_discovery_msr(domain);
			else
				ret |= uncore_discovery_pci(domain);
		}
	}

	return ret;
}