linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/16] Add support for Hygon Dhyana Family 18h processor
@ 2018-09-10 13:15 Pu Wen
  2018-09-10 13:17 ` [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge Pu Wen
  0 siblings, 1 reply; 7+ messages in thread
From: Pu Wen @ 2018-09-10 13:15 UTC (permalink / raw)
  To: tglx, mingo, hpa, x86, thomas.lendacky, bp, pbonzini, tony.luck,
	rkrcmar, boris.ostrovsky, jgross, rjw, lenb, viresh.kumar,
	mchehab, trenn, shuah
  Cc: linux-kernel, linux-arch, linux-pci, linux-acpi, linux-edac,
	linux-pm, kvm, xen-devel, Pu Wen

As a new x86 CPU Vendor, Chengdu Haiguang IC Design Co., Ltd (Hygon)
is a Joint Venture between AMD and Haiguang Information Technology Co.,
Ltd., and aims at providing high performance x86 processor for China
server market.

The first generation Hygon's processor(Dhyana) originates from AMD
technology and shares most of the architecture with AMD's family 17h,
but with different CPU Vendor ID("HygonGenuine")/PCIE Device Vendor ID
(0x1D94)/Family series number (Family 18h).

To enable the support of Linux kernel to Hygon's CPU, we added a new
vendor type (X86_VENDOR_HYGON, with value of 9) in arch/x86/include/
asm/processor.h, and shared most of kernel support codes with AMD
family 17h.

As Hygon will negotiate with AMD to make sure that only Hygon will
use family 18h, so try to minimize code modification and share most
codes with AMD under this consideration.

This patch series have been applied and tested successfully on Hygon
Dhyana SoC silicon. Also tested on AMD EPYC (Family 17h) processor,
it works fine and makes no harm to the existing codes.


v5->v6:
  - Rebased on 4.19-rc3 and tested against it.
  - Add Reviewed-by from Borislav Petkov for cacheinfo, smpboot,
    alternative and kvm.
  - Rework the patch subjects and patch descriptions.
  - Rework vendor checking for some patches to minimize the code
    modification.

v4->v5:
  - Rebased on 4.19-rc1 and tested against it.
  - Add Reviewed-by from Boris Ostrovsky for Xen.
  - Rework EDAC patch without vendor checking for minimal modification.

v3->v4:
  - Rebased on 4.18.3 and tested against it.
  - Merge patchs 05/17 perfctr and 10/17 events in v3 to patch 05/16
    PMU for better patch function group.
  - Add hygon_get_topology_early() in patch 01/16.
  - Rework vendor checking and refine coding style.
  - Add Acked-by from Bjorn Helgaas for pci.
  - Add Acked-by from Rafael J. Wysocki for cpufreq and acpi.

v2->v3:
  - Rebased on 4.18-rc8 and tested against it.
  - Rework vendor checking codes to improve consistency.

v1->v2:
  - Rebased on 4.18-rc6 and tested against it.
  - Split the patchset to small series of patches.
  - Rework patch descriptions.
  - Create a separated arch/x86/kernel/cpu/hygon.c for Dhyana CPU
    initialization to reduce long-term maintenance effort.


Pu Wen (16):
  x86/cpu: Create Hygon Dhyana architecture support file
  x86/cpu: Get cache info and setup cache cpumap for Hygon Dhyana
  x86/cpu/mtrr: Support TOP_MEM2 and get MTRR number
  x86/smpboot: SMP init nodelay and not flush caches before sleep
  perf/x86: Add Hygon Dhyana support to PMU infrastructure
  x86/alternative: Init ideal_nops for Hygon Dhyana
  x86/pci: Add Hygon Dhyana support to PCI and north bridge
  x86/apic: Add Hygon Dhyana support to APIC
  x86/bugs: Add mitigation to spectre and no meltdown for Hygon Dhyana
  x86/mce: Add Hygon Dhyana support to MCE infrastructure
  x86/kvm: Add Hygon Dhyana support to KVM infrastructure
  x86/xen: Add Hygon Dhyana support to Xen
  ACPI, x86: Add Hygon Dhyana support
  cpufreq, x86: Add Hygon Dhyana support
  EDAC, amd64: Add Hygon Dhyana support
  cpupower, x86: Add Hygon Dhyana support

 MAINTAINERS                                        |   6 +
 arch/x86/Kconfig.cpu                               |  14 +
 arch/x86/events/amd/core.c                         |   4 +
 arch/x86/events/amd/uncore.c                       |  20 +-
 arch/x86/events/core.c                             |   4 +
 arch/x86/include/asm/cacheinfo.h                   |   1 +
 arch/x86/include/asm/kvm_emulate.h                 |   4 +
 arch/x86/include/asm/mce.h                         |   2 +
 arch/x86/include/asm/processor.h                   |   3 +-
 arch/x86/include/asm/virtext.h                     |   5 +-
 arch/x86/kernel/alternative.c                      |   4 +
 arch/x86/kernel/amd_nb.c                           |  47 ++-
 arch/x86/kernel/apic/apic.c                        |  13 +-
 arch/x86/kernel/apic/probe_32.c                    |   1 +
 arch/x86/kernel/cpu/Makefile                       |   1 +
 arch/x86/kernel/cpu/bugs.c                         |   6 +-
 arch/x86/kernel/cpu/cacheinfo.c                    |  31 +-
 arch/x86/kernel/cpu/common.c                       |   1 +
 arch/x86/kernel/cpu/cpu.h                          |   1 +
 arch/x86/kernel/cpu/hygon.c                        | 411 +++++++++++++++++++++
 arch/x86/kernel/cpu/mcheck/mce-severity.c          |   3 +-
 arch/x86/kernel/cpu/mcheck/mce.c                   |  20 +-
 arch/x86/kernel/cpu/mtrr/cleanup.c                 |   3 +-
 arch/x86/kernel/cpu/mtrr/mtrr.c                    |   2 +-
 arch/x86/kernel/cpu/perfctr-watchdog.c             |   2 +
 arch/x86/kernel/smpboot.c                          |   4 +-
 arch/x86/kvm/emulate.c                             |  11 +-
 arch/x86/pci/amd_bus.c                             |   6 +-
 arch/x86/xen/pmu.c                                 |  12 +-
 drivers/acpi/acpi_pad.c                            |   1 +
 drivers/acpi/processor_idle.c                      |   1 +
 drivers/cpufreq/acpi-cpufreq.c                     |   5 +
 drivers/cpufreq/amd_freq_sensitivity.c             |   9 +-
 drivers/edac/amd64_edac.c                          |   8 +-
 drivers/edac/mce_amd.c                             |   4 +-
 include/linux/pci_ids.h                            |   2 +
 tools/power/cpupower/utils/cpufreq-info.c          |   6 +-
 tools/power/cpupower/utils/helpers/amd.c           |   4 +-
 tools/power/cpupower/utils/helpers/cpuid.c         |   8 +-
 tools/power/cpupower/utils/helpers/helpers.h       |   2 +-
 tools/power/cpupower/utils/helpers/misc.c          |   2 +-
 .../cpupower/utils/idle_monitor/mperf_monitor.c    |   3 +-
 42 files changed, 646 insertions(+), 51 deletions(-)
 create mode 100644 arch/x86/kernel/cpu/hygon.c

-- 
2.7.4

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-10 13:15 [PATCH v6 00/16] Add support for Hygon Dhyana Family 18h processor Pu Wen
@ 2018-09-10 13:17 ` Pu Wen
  2018-09-11 10:07   ` Borislav Petkov
  2018-09-19 17:20   ` Lendacky, Thomas
  0 siblings, 2 replies; 7+ messages in thread
From: Pu Wen @ 2018-09-10 13:17 UTC (permalink / raw)
  To: tglx, mingo, hpa, x86, thomas.lendacky, bp, pbonzini, helgaas
  Cc: linux-kernel, linux-arch, linux-pci, Pu Wen

As Hygon registered its PCI Vendor ID as a new one 0x1d94, and there
are PCI Devices 0x1450/0x1463/0x1464 for Host bridge on Hygon Dhyana
platforms, so add Hygon Dhyana support to the PCI and north bridge
subsystem by using the code path of AMD family 17h.

Acked-by: Bjorn Helgaas <bhelgaas@google.com>	# pci_ids.h
Signed-off-by: Pu Wen <puwen@hygon.cn>
---
 arch/x86/kernel/amd_nb.c | 47 +++++++++++++++++++++++++++++++++++++++++------
 arch/x86/pci/amd_bus.c   |  6 ++++--
 include/linux/pci_ids.h  |  2 ++
 3 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
index b481b95..3e2ea18 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
@@ -61,6 +61,21 @@ static const struct pci_device_id amd_nb_link_ids[] = {
 	{}
 };
 
+static const struct pci_device_id hygon_root_ids[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_ROOT) },
+	{}
+};
+
+const struct pci_device_id hygon_nb_misc_ids[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_DF_F3) },
+	{}
+};
+
+static const struct pci_device_id hygon_nb_link_ids[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_DF_F4) },
+	{}
+};
+
 const struct amd_nb_bus_dev_range amd_nb_bus_dev_ranges[] __initconst = {
 	{ 0x00, 0x18, 0x20 },
 	{ 0xff, 0x00, 0x20 },
@@ -197,12 +212,25 @@ int amd_cache_northbridges(void)
 	u16 i = 0;
 	struct amd_northbridge *nb;
 	struct pci_dev *root, *misc, *link;
+	const struct pci_device_id *root_ids = NULL;
+	const struct pci_device_id *misc_ids = NULL;
+	const struct pci_device_id *link_ids = NULL;
+
+	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
+		root_ids = amd_root_ids;
+		misc_ids = amd_nb_misc_ids;
+		link_ids = amd_nb_link_ids;
+	} else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
+		root_ids = hygon_root_ids;
+		misc_ids = hygon_nb_misc_ids;
+		link_ids = hygon_nb_link_ids;
+	}
 
 	if (amd_northbridges.num)
 		return 0;
 
 	misc = NULL;
-	while ((misc = next_northbridge(misc, amd_nb_misc_ids)) != NULL)
+	while ((misc = next_northbridge(misc, misc_ids)) != NULL)
 		i++;
 
 	if (!i)
@@ -218,11 +246,11 @@ int amd_cache_northbridges(void)
 	link = misc = root = NULL;
 	for (i = 0; i != amd_northbridges.num; i++) {
 		node_to_amd_nb(i)->root = root =
-			next_northbridge(root, amd_root_ids);
+			next_northbridge(root, root_ids);
 		node_to_amd_nb(i)->misc = misc =
-			next_northbridge(misc, amd_nb_misc_ids);
+			next_northbridge(misc, misc_ids);
 		node_to_amd_nb(i)->link = link =
-			next_northbridge(link, amd_nb_link_ids);
+			next_northbridge(link, link_ids);
 	}
 
 	if (amd_gart_present())
@@ -263,9 +291,15 @@ bool __init early_is_amd_nb(u32 device)
 {
 	const struct pci_device_id *id;
 	u32 vendor = device & 0xffff;
+	const struct pci_device_id *misc_ids = NULL;
+
+	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
+		misc_ids = amd_nb_misc_ids;
+	else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
+		misc_ids = hygon_nb_misc_ids;
 
 	device >>= 16;
-	for (id = amd_nb_misc_ids; id->vendor; id++)
+	for (id = misc_ids; id->vendor; id++)
 		if (vendor == id->vendor && device == id->device)
 			return true;
 	return false;
@@ -277,7 +311,8 @@ struct resource *amd_get_mmconfig_range(struct resource *res)
 	u64 base, msr;
 	unsigned int segn_busn_bits;
 
-	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
+	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
+	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
 		return NULL;
 
 	/* assume all cpus from fam10h have mmconfig */
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c
index 649bdde..bfa50e6 100644
--- a/arch/x86/pci/amd_bus.c
+++ b/arch/x86/pci/amd_bus.c
@@ -93,7 +93,8 @@ static int __init early_root_info_init(void)
 		vendor = id & 0xffff;
 		device = (id>>16) & 0xffff;
 
-		if (vendor != PCI_VENDOR_ID_AMD)
+		if (vendor != PCI_VENDOR_ID_AMD &&
+		    vendor != PCI_VENDOR_ID_HYGON)
 			continue;
 
 		if (hb_probes[i].device == device) {
@@ -390,7 +391,8 @@ static int __init pci_io_ecs_init(void)
 
 static int __init amd_postcore_init(void)
 {
-	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
+	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
+	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
 		return 0;
 
 	early_root_info_init();
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index d157983..8a0841c 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2561,6 +2561,8 @@
 
 #define PCI_VENDOR_ID_AMAZON		0x1d0f
 
+#define PCI_VENDOR_ID_HYGON		0x1d94
+
 #define PCI_VENDOR_ID_TEKRAM		0x1de1
 #define PCI_DEVICE_ID_TEKRAM_DC290	0xdc29
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-10 13:17 ` [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge Pu Wen
@ 2018-09-11 10:07   ` Borislav Petkov
  2018-09-19 17:20   ` Lendacky, Thomas
  1 sibling, 0 replies; 7+ messages in thread
From: Borislav Petkov @ 2018-09-11 10:07 UTC (permalink / raw)
  To: Pu Wen
  Cc: tglx, mingo, hpa, x86, thomas.lendacky, pbonzini, helgaas,
	linux-kernel, linux-arch, linux-pci

On Mon, Sep 10, 2018 at 09:17:11PM +0800, Pu Wen wrote:
> As Hygon registered its PCI Vendor ID as a new one 0x1d94, and there
> are PCI Devices 0x1450/0x1463/0x1464 for Host bridge on Hygon Dhyana
> platforms, so add Hygon Dhyana support to the PCI and north bridge
> subsystem by using the code path of AMD family 17h.
> 
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>	# pci_ids.h
> Signed-off-by: Pu Wen <puwen@hygon.cn>
> ---
>  arch/x86/kernel/amd_nb.c | 47 +++++++++++++++++++++++++++++++++++++++++------
>  arch/x86/pci/amd_bus.c   |  6 ++++--
>  include/linux/pci_ids.h  |  2 ++
>  3 files changed, 47 insertions(+), 8 deletions(-)

Reviewed-by: Borislav Petkov <bp@suse.de>

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-10 13:17 ` [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge Pu Wen
  2018-09-11 10:07   ` Borislav Petkov
@ 2018-09-19 17:20   ` Lendacky, Thomas
  2018-09-19 17:20     ` Lendacky, Thomas
                       ` (2 more replies)
  1 sibling, 3 replies; 7+ messages in thread
From: Lendacky, Thomas @ 2018-09-19 17:20 UTC (permalink / raw)
  To: Pu Wen, tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
	x86@kernel.org, bp@alien8.de, pbonzini@redhat.com,
	helgaas@kernel.org
  Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-pci@vger.kernel.org

T24gMDkvMTAvMjAxOCAwODoxNyBBTSwgUHUgV2VuIHdyb3RlOg0KPiBBcyBIeWdvbiByZWdpc3Rl
cmVkIGl0cyBQQ0kgVmVuZG9yIElEIGFzIGEgbmV3IG9uZSAweDFkOTQsIGFuZCB0aGVyZQ0KPiBh
cmUgUENJIERldmljZXMgMHgxNDUwLzB4MTQ2My8weDE0NjQgZm9yIEhvc3QgYnJpZGdlIG9uIEh5
Z29uIERoeWFuYQ0KPiBwbGF0Zm9ybXMsIHNvIGFkZCBIeWdvbiBEaHlhbmEgc3VwcG9ydCB0byB0
aGUgUENJIGFuZCBub3J0aCBicmlkZ2UNCj4gc3Vic3lzdGVtIGJ5IHVzaW5nIHRoZSBjb2RlIHBh
dGggb2YgQU1EIGZhbWlseSAxN2guDQo+IA0KPiBBY2tlZC1ieTogQmpvcm4gSGVsZ2FhcyA8Ymhl
bGdhYXNAZ29vZ2xlLmNvbT4JIyBwY2lfaWRzLmgNCj4gU2lnbmVkLW9mZi1ieTogUHUgV2VuIDxw
dXdlbkBoeWdvbi5jbj4NCj4gLS0tDQo+ICBhcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMgfCA0NyAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KPiAgYXJjaC94
ODYvcGNpL2FtZF9idXMuYyAgIHwgIDYgKysrKy0tDQo+ICBpbmNsdWRlL2xpbnV4L3BjaV9pZHMu
aCAgfCAgMiArKw0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA4IGRlbGV0
aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYyBiL2Fy
Y2gveDg2L2tlcm5lbC9hbWRfbmIuYw0KPiBpbmRleCBiNDgxYjk1Li4zZTJlYTE4IDEwMDY0NA0K
PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMNCj4gKysrIGIvYXJjaC94ODYva2VybmVs
L2FtZF9uYi5jDQo+IEBAIC02MSw2ICs2MSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9k
ZXZpY2VfaWQgYW1kX25iX2xpbmtfaWRzW10gPSB7DQo+ICAJe30NCj4gIH07DQo+ICANCj4gK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoeWdvbl9yb290X2lkc1tdID0gew0KPiAr
CXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0hZR09OLCBQQ0lfREVWSUNFX0lEX0FNRF8xN0hf
Uk9PVCkgfSwNCj4gKwl7fQ0KPiArfTsNCj4gKw0KPiArY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf
aWQgaHlnb25fbmJfbWlzY19pZHNbXSA9IHsNCj4gKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9J
RF9IWUdPTiwgUENJX0RFVklDRV9JRF9BTURfMTdIX0RGX0YzKSB9LA0KPiArCXt9DQo+ICt9Ow0K
PiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHlnb25fbmJfbGlua19p
ZHNbXSA9IHsNCj4gKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9IWUdPTiwgUENJX0RFVklD
RV9JRF9BTURfMTdIX0RGX0Y0KSB9LA0KPiArCXt9DQo+ICt9Ow0KPiArDQo+ICBjb25zdCBzdHJ1
Y3QgYW1kX25iX2J1c19kZXZfcmFuZ2UgYW1kX25iX2J1c19kZXZfcmFuZ2VzW10gX19pbml0Y29u
c3QgPSB7DQo+ICAJeyAweDAwLCAweDE4LCAweDIwIH0sDQo+ICAJeyAweGZmLCAweDAwLCAweDIw
IH0sDQo+IEBAIC0xOTcsMTIgKzIxMiwyNSBAQCBpbnQgYW1kX2NhY2hlX25vcnRoYnJpZGdlcyh2
b2lkKQ0KPiAgCXUxNiBpID0gMDsNCj4gIAlzdHJ1Y3QgYW1kX25vcnRoYnJpZGdlICpuYjsNCj4g
IAlzdHJ1Y3QgcGNpX2RldiAqcm9vdCwgKm1pc2MsICpsaW5rOw0KPiArCWNvbnN0IHN0cnVjdCBw
Y2lfZGV2aWNlX2lkICpyb290X2lkcyA9IE5VTEw7DQo+ICsJY29uc3Qgc3RydWN0IHBjaV9kZXZp
Y2VfaWQgKm1pc2NfaWRzID0gTlVMTDsNCj4gKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAq
bGlua19pZHMgPSBOVUxMOw0KPiArDQo+ICsJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9
PSBYODZfVkVORE9SX0FNRCkgew0KPiArCQlyb290X2lkcyA9IGFtZF9yb290X2lkczsNCj4gKwkJ
bWlzY19pZHMgPSBhbWRfbmJfbWlzY19pZHM7DQo+ICsJCWxpbmtfaWRzID0gYW1kX25iX2xpbmtf
aWRzOw0KPiArCX0gZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5E
T1JfSFlHT04pIHsNCj4gKwkJcm9vdF9pZHMgPSBoeWdvbl9yb290X2lkczsNCj4gKwkJbWlzY19p
ZHMgPSBoeWdvbl9uYl9taXNjX2lkczsNCj4gKwkJbGlua19pZHMgPSBoeWdvbl9uYl9saW5rX2lk
czsNCj4gKwl9DQoNClRvIGJlIGNvbXBhdGlibGUgd2l0aCAiYmVmb3JlIHRoaXMgcGF0Y2giIHlv
dSBzaG91bGQgcHJvYmFibHkgZG86DQoNCglpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09
IFg4Nl9WRU5ET1JfSFlHT04pIHsNCgkJcm9vdF9pZHMgPSBoeWdvbl9yb290X2lkczsNCgkJbWlz
Y19pZHMgPSBoeWdvbl9uYl9taXNjX2lkczsNCgkJbGlua19pZHMgPSBoeWdvbl9uYl9saW5rX2lk
czsNCgl9IGVsc2Ugew0KCQlyb290X2lkcyA9IGFtZF9yb290X2lkczsNCgkJbWlzY19pZHMgPSBh
bWRfbmJfbWlzY19pZHM7DQoJCWxpbmtfaWRzID0gYW1kX25iX2xpbmtfaWRzOw0KCX0NCg0KVGhh
dCB3YXkgdGhleSBhcmUgYWx3YXlzIHRoZSBBTUQgdmFsdWVzIGlmIG5vdCB5b3VyIGNoaXAuDQoN
Cj4gIA0KPiAgCWlmIChhbWRfbm9ydGhicmlkZ2VzLm51bSkNCj4gIAkJcmV0dXJuIDA7DQo+ICAN
Cj4gIAltaXNjID0gTlVMTDsNCj4gLQl3aGlsZSAoKG1pc2MgPSBuZXh0X25vcnRoYnJpZGdlKG1p
c2MsIGFtZF9uYl9taXNjX2lkcykpICE9IE5VTEwpDQo+ICsJd2hpbGUgKChtaXNjID0gbmV4dF9u
b3J0aGJyaWRnZShtaXNjLCBtaXNjX2lkcykpICE9IE5VTEwpDQo+ICAJCWkrKzsNCj4gIA0KPiAg
CWlmICghaSkNCj4gQEAgLTIxOCwxMSArMjQ2LDExIEBAIGludCBhbWRfY2FjaGVfbm9ydGhicmlk
Z2VzKHZvaWQpDQo+ICAJbGluayA9IG1pc2MgPSByb290ID0gTlVMTDsNCj4gIAlmb3IgKGkgPSAw
OyBpICE9IGFtZF9ub3J0aGJyaWRnZXMubnVtOyBpKyspIHsNCj4gIAkJbm9kZV90b19hbWRfbmIo
aSktPnJvb3QgPSByb290ID0NCj4gLQkJCW5leHRfbm9ydGhicmlkZ2Uocm9vdCwgYW1kX3Jvb3Rf
aWRzKTsNCj4gKwkJCW5leHRfbm9ydGhicmlkZ2Uocm9vdCwgcm9vdF9pZHMpOw0KPiAgCQlub2Rl
X3RvX2FtZF9uYihpKS0+bWlzYyA9IG1pc2MgPQ0KPiAtCQkJbmV4dF9ub3J0aGJyaWRnZShtaXNj
LCBhbWRfbmJfbWlzY19pZHMpOw0KPiArCQkJbmV4dF9ub3J0aGJyaWRnZShtaXNjLCBtaXNjX2lk
cyk7DQo+ICAJCW5vZGVfdG9fYW1kX25iKGkpLT5saW5rID0gbGluayA9DQo+IC0JCQluZXh0X25v
cnRoYnJpZGdlKGxpbmssIGFtZF9uYl9saW5rX2lkcyk7DQo+ICsJCQluZXh0X25vcnRoYnJpZGdl
KGxpbmssIGxpbmtfaWRzKTsNCj4gIAl9DQo+ICANCj4gIAlpZiAoYW1kX2dhcnRfcHJlc2VudCgp
KQ0KPiBAQCAtMjYzLDkgKzI5MSwxNSBAQCBib29sIF9faW5pdCBlYXJseV9pc19hbWRfbmIodTMy
IGRldmljZSkNCj4gIHsNCj4gIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7DQo+ICAJ
dTMyIHZlbmRvciA9IGRldmljZSAmIDB4ZmZmZjsNCj4gKwljb25zdCBzdHJ1Y3QgcGNpX2Rldmlj
ZV9pZCAqbWlzY19pZHMgPSBOVUxMOw0KPiArDQo+ICsJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3Zl
bmRvciA9PSBYODZfVkVORE9SX0FNRCkNCj4gKwkJbWlzY19pZHMgPSBhbWRfbmJfbWlzY19pZHM7
DQo+ICsJZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSFlH
T04pDQo+ICsJCW1pc2NfaWRzID0gaHlnb25fbmJfbWlzY19pZHM7DQoNClNhbWUgY29tbWVudCBh
cyBhYm92ZS4gIFRoaXMgd2lsbCBwcm9iYWJseSBlbGltaW5hdGUgdGhlIFBBTklDIHRoYXQNCnRo
YXQgd2FzIHJlcG9ydGVkIGJ5IExLUC4NCg0KVGhhbmtzLA0KVG9tDQoNCj4gIA0KPiAgCWRldmlj
ZSA+Pj0gMTY7DQo+IC0JZm9yIChpZCA9IGFtZF9uYl9taXNjX2lkczsgaWQtPnZlbmRvcjsgaWQr
KykNCj4gKwlmb3IgKGlkID0gbWlzY19pZHM7IGlkLT52ZW5kb3I7IGlkKyspDQo+ICAJCWlmICh2
ZW5kb3IgPT0gaWQtPnZlbmRvciAmJiBkZXZpY2UgPT0gaWQtPmRldmljZSkNCj4gIAkJCXJldHVy
biB0cnVlOw0KPiAgCXJldHVybiBmYWxzZTsNCj4gQEAgLTI3Nyw3ICszMTEsOCBAQCBzdHJ1Y3Qg
cmVzb3VyY2UgKmFtZF9nZXRfbW1jb25maWdfcmFuZ2Uoc3RydWN0IHJlc291cmNlICpyZXMpDQo+
ICAJdTY0IGJhc2UsIG1zcjsNCj4gIAl1bnNpZ25lZCBpbnQgc2Vnbl9idXNuX2JpdHM7DQo+ICAN
Cj4gLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQ0KPiAr
CWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgJiYNCj4gKwkg
ICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSFlHT04pDQo+ICAJCXJl
dHVybiBOVUxMOw0KPiAgDQo+ICAJLyogYXNzdW1lIGFsbCBjcHVzIGZyb20gZmFtMTBoIGhhdmUg
bW1jb25maWcgKi8NCj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMgYi9hcmNo
L3g4Ni9wY2kvYW1kX2J1cy5jDQo+IGluZGV4IDY0OWJkZGUuLmJmYTUwZTYgMTAwNjQ0DQo+IC0t
LSBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMNCj4gKysrIGIvYXJjaC94ODYvcGNpL2FtZF9idXMu
Yw0KPiBAQCAtOTMsNyArOTMsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9yb290X2luZm9f
aW5pdCh2b2lkKQ0KPiAgCQl2ZW5kb3IgPSBpZCAmIDB4ZmZmZjsNCj4gIAkJZGV2aWNlID0gKGlk
Pj4xNikgJiAweGZmZmY7DQo+ICANCj4gLQkJaWYgKHZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0FN
RCkNCj4gKwkJaWYgKHZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0FNRCAmJg0KPiArCQkgICAgdmVu
ZG9yICE9IFBDSV9WRU5ET1JfSURfSFlHT04pDQo+ICAJCQljb250aW51ZTsNCj4gIA0KPiAgCQlp
ZiAoaGJfcHJvYmVzW2ldLmRldmljZSA9PSBkZXZpY2UpIHsNCj4gQEAgLTM5MCw3ICszOTEsOCBA
QCBzdGF0aWMgaW50IF9faW5pdCBwY2lfaW9fZWNzX2luaXQodm9pZCkNCj4gIA0KPiAgc3RhdGlj
IGludCBfX2luaXQgYW1kX3Bvc3Rjb3JlX2luaXQodm9pZCkNCj4gIHsNCj4gLQlpZiAoYm9vdF9j
cHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQ0KPiArCWlmIChib290X2NwdV9k
YXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgJiYNCj4gKwkgICAgYm9vdF9jcHVfZGF0
YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSFlHT04pDQo+ICAJCXJldHVybiAwOw0KPiAgDQo+
ICAJZWFybHlfcm9vdF9pbmZvX2luaXQoKTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv
cGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgNCj4gaW5kZXggZDE1Nzk4My4uOGEw
ODQxYyAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgNCj4gKysrIGIvaW5j
bHVkZS9saW51eC9wY2lfaWRzLmgNCj4gQEAgLTI1NjEsNiArMjU2MSw4IEBADQo+ICANCj4gICNk
ZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUFaT04JCTB4MWQwZg0KPiAgDQo+ICsjZGVmaW5lIFBDSV9W
RU5ET1JfSURfSFlHT04JCTB4MWQ5NA0KPiArDQo+ICAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVL
UkFNCQkweDFkZTENCj4gICNkZWZpbmUgUENJX0RFVklDRV9JRF9URUtSQU1fREMyOTAJMHhkYzI5
DQo+ICANCj4gDQo=

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-19 17:20   ` Lendacky, Thomas
@ 2018-09-19 17:20     ` Lendacky, Thomas
  2018-09-20  7:25     ` Thomas Gleixner
  2018-09-20  8:05     ` Pu Wen
  2 siblings, 0 replies; 7+ messages in thread
From: Lendacky, Thomas @ 2018-09-19 17:20 UTC (permalink / raw)
  To: Pu Wen, tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
	x86@kernel.org, bp@alien8.de, pbonzini@redhat.com,
	helgaas@kernel.org
  Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-pci@vger.kernel.org

On 09/10/2018 08:17 AM, Pu Wen wrote:
> As Hygon registered its PCI Vendor ID as a new one 0x1d94, and there
> are PCI Devices 0x1450/0x1463/0x1464 for Host bridge on Hygon Dhyana
> platforms, so add Hygon Dhyana support to the PCI and north bridge
> subsystem by using the code path of AMD family 17h.
> 
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>	# pci_ids.h
> Signed-off-by: Pu Wen <puwen@hygon.cn>
> ---
>  arch/x86/kernel/amd_nb.c | 47 +++++++++++++++++++++++++++++++++++++++++------
>  arch/x86/pci/amd_bus.c   |  6 ++++--
>  include/linux/pci_ids.h  |  2 ++
>  3 files changed, 47 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
> index b481b95..3e2ea18 100644
> --- a/arch/x86/kernel/amd_nb.c
> +++ b/arch/x86/kernel/amd_nb.c
> @@ -61,6 +61,21 @@ static const struct pci_device_id amd_nb_link_ids[] = {
>  	{}
>  };
>  
> +static const struct pci_device_id hygon_root_ids[] = {
> +	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_ROOT) },
> +	{}
> +};
> +
> +const struct pci_device_id hygon_nb_misc_ids[] = {
> +	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_DF_F3) },
> +	{}
> +};
> +
> +static const struct pci_device_id hygon_nb_link_ids[] = {
> +	{ PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_17H_DF_F4) },
> +	{}
> +};
> +
>  const struct amd_nb_bus_dev_range amd_nb_bus_dev_ranges[] __initconst = {
>  	{ 0x00, 0x18, 0x20 },
>  	{ 0xff, 0x00, 0x20 },
> @@ -197,12 +212,25 @@ int amd_cache_northbridges(void)
>  	u16 i = 0;
>  	struct amd_northbridge *nb;
>  	struct pci_dev *root, *misc, *link;
> +	const struct pci_device_id *root_ids = NULL;
> +	const struct pci_device_id *misc_ids = NULL;
> +	const struct pci_device_id *link_ids = NULL;
> +
> +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
> +		root_ids = amd_root_ids;
> +		misc_ids = amd_nb_misc_ids;
> +		link_ids = amd_nb_link_ids;
> +	} else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
> +		root_ids = hygon_root_ids;
> +		misc_ids = hygon_nb_misc_ids;
> +		link_ids = hygon_nb_link_ids;
> +	}

To be compatible with "before this patch" you should probably do:

	if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
		root_ids = hygon_root_ids;
		misc_ids = hygon_nb_misc_ids;
		link_ids = hygon_nb_link_ids;
	} else {
		root_ids = amd_root_ids;
		misc_ids = amd_nb_misc_ids;
		link_ids = amd_nb_link_ids;
	}

That way they are always the AMD values if not your chip.

>  
>  	if (amd_northbridges.num)
>  		return 0;
>  
>  	misc = NULL;
> -	while ((misc = next_northbridge(misc, amd_nb_misc_ids)) != NULL)
> +	while ((misc = next_northbridge(misc, misc_ids)) != NULL)
>  		i++;
>  
>  	if (!i)
> @@ -218,11 +246,11 @@ int amd_cache_northbridges(void)
>  	link = misc = root = NULL;
>  	for (i = 0; i != amd_northbridges.num; i++) {
>  		node_to_amd_nb(i)->root = root =
> -			next_northbridge(root, amd_root_ids);
> +			next_northbridge(root, root_ids);
>  		node_to_amd_nb(i)->misc = misc =
> -			next_northbridge(misc, amd_nb_misc_ids);
> +			next_northbridge(misc, misc_ids);
>  		node_to_amd_nb(i)->link = link =
> -			next_northbridge(link, amd_nb_link_ids);
> +			next_northbridge(link, link_ids);
>  	}
>  
>  	if (amd_gart_present())
> @@ -263,9 +291,15 @@ bool __init early_is_amd_nb(u32 device)
>  {
>  	const struct pci_device_id *id;
>  	u32 vendor = device & 0xffff;
> +	const struct pci_device_id *misc_ids = NULL;
> +
> +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
> +		misc_ids = amd_nb_misc_ids;
> +	else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
> +		misc_ids = hygon_nb_misc_ids;

Same comment as above.  This will probably eliminate the PANIC that
that was reported by LKP.

Thanks,
Tom

>  
>  	device >>= 16;
> -	for (id = amd_nb_misc_ids; id->vendor; id++)
> +	for (id = misc_ids; id->vendor; id++)
>  		if (vendor == id->vendor && device == id->device)
>  			return true;
>  	return false;
> @@ -277,7 +311,8 @@ struct resource *amd_get_mmconfig_range(struct resource *res)
>  	u64 base, msr;
>  	unsigned int segn_busn_bits;
>  
> -	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
> +	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
> +	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
>  		return NULL;
>  
>  	/* assume all cpus from fam10h have mmconfig */
> diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c
> index 649bdde..bfa50e6 100644
> --- a/arch/x86/pci/amd_bus.c
> +++ b/arch/x86/pci/amd_bus.c
> @@ -93,7 +93,8 @@ static int __init early_root_info_init(void)
>  		vendor = id & 0xffff;
>  		device = (id>>16) & 0xffff;
>  
> -		if (vendor != PCI_VENDOR_ID_AMD)
> +		if (vendor != PCI_VENDOR_ID_AMD &&
> +		    vendor != PCI_VENDOR_ID_HYGON)
>  			continue;
>  
>  		if (hb_probes[i].device == device) {
> @@ -390,7 +391,8 @@ static int __init pci_io_ecs_init(void)
>  
>  static int __init amd_postcore_init(void)
>  {
> -	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
> +	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
> +	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
>  		return 0;
>  
>  	early_root_info_init();
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index d157983..8a0841c 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -2561,6 +2561,8 @@
>  
>  #define PCI_VENDOR_ID_AMAZON		0x1d0f
>  
> +#define PCI_VENDOR_ID_HYGON		0x1d94
> +
>  #define PCI_VENDOR_ID_TEKRAM		0x1de1
>  #define PCI_DEVICE_ID_TEKRAM_DC290	0xdc29
>  
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-19 17:20   ` Lendacky, Thomas
  2018-09-19 17:20     ` Lendacky, Thomas
@ 2018-09-20  7:25     ` Thomas Gleixner
  2018-09-20  8:05     ` Pu Wen
  2 siblings, 0 replies; 7+ messages in thread
From: Thomas Gleixner @ 2018-09-20  7:25 UTC (permalink / raw)
  To: Lendacky, Thomas
  Cc: Pu Wen, mingo@redhat.com, hpa@zytor.com, x86@kernel.org,
	bp@alien8.de, pbonzini@redhat.com, helgaas@kernel.org,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-pci@vger.kernel.org

On Wed, 19 Sep 2018, Lendacky, Thomas wrote:
> 
> To be compatible with "before this patch" you should probably do:
> 
> 	if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
> 		root_ids = hygon_root_ids;
> 		misc_ids = hygon_nb_misc_ids;
> 		link_ids = hygon_nb_link_ids;
> 	} else {
> 		root_ids = amd_root_ids;
> 		misc_ids = amd_nb_misc_ids;
> 		link_ids = amd_nb_link_ids;
> 	}
> 
> That way they are always the AMD values if not your chip.

And please can we have a comment why this is called on anything which is
not AMD or HYGON. It's all but obvious and clearly unexpected.

Thanks,

	tglx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge
  2018-09-19 17:20   ` Lendacky, Thomas
  2018-09-19 17:20     ` Lendacky, Thomas
  2018-09-20  7:25     ` Thomas Gleixner
@ 2018-09-20  8:05     ` Pu Wen
  2 siblings, 0 replies; 7+ messages in thread
From: Pu Wen @ 2018-09-20  8:05 UTC (permalink / raw)
  To: Lendacky, Thomas, tglx@linutronix.de
  Cc: mingo@redhat.com, hpa@zytor.com, x86@kernel.org, bp@alien8.de,
	pbonzini@redhat.com, helgaas@kernel.org,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-pci@vger.kernel.org

On 2018/9/20 1:20, Lendacky, Thomas wrote:
>> @@ -197,12 +212,25 @@ int amd_cache_northbridges(void)
>>   	u16 i = 0;
>>   	struct amd_northbridge *nb;
>>   	struct pci_dev *root, *misc, *link;
>> +	const struct pci_device_id *root_ids = NULL;
>> +	const struct pci_device_id *misc_ids = NULL;
>> +	const struct pci_device_id *link_ids = NULL;
>> +
>> +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
>> +		root_ids = amd_root_ids;
>> +		misc_ids = amd_nb_misc_ids;
>> +		link_ids = amd_nb_link_ids;
>> +	} else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
>> +		root_ids = hygon_root_ids;
>> +		misc_ids = hygon_nb_misc_ids;
>> +		link_ids = hygon_nb_link_ids;
>> +	}
>
> To be compatible with "before this patch" you should probably do:
>
> 	if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
> 		root_ids = hygon_root_ids;
> 		misc_ids = hygon_nb_misc_ids;
> 		link_ids = hygon_nb_link_ids;
> 	} else {
> 		root_ids = amd_root_ids;
> 		misc_ids = amd_nb_misc_ids;
> 		link_ids = amd_nb_link_ids;
> 	}
>
> That way they are always the AMD values if not your chip.
>
...
>> @@ -263,9 +291,15 @@ bool __init early_is_amd_nb(u32 device)
>>   {
>>   	const struct pci_device_id *id;
>>   	u32 vendor = device & 0xffff;
>> +	const struct pci_device_id *misc_ids = NULL;
>> +
>> +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
>> +		misc_ids = amd_nb_misc_ids;
>> +	else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
>> +		misc_ids = hygon_nb_misc_ids;
>
> Same comment as above.  This will probably eliminate the PANIC that
> that was reported by LKP.

Yes, it's this modification that caused the PANIC reported by LKP.
Because the misc_ids will be NULL if running on Intel chip.

If change the vendor checking like this:

+	if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
+		misc_ids = hygon_nb_misc_ids;
+	else
+		misc_ids = amd_nb_misc_ids;

The PANIC will be eliminated.

The PANIC will also be eliminated by adding AMD vendor checking in
amd_gart_present:

+	if(boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
+		return false;

To prevent the function return true on non AMD platform.

Thanks,
Pu Wen


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-09-20  8:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-10 13:15 [PATCH v6 00/16] Add support for Hygon Dhyana Family 18h processor Pu Wen
2018-09-10 13:17 ` [PATCH v6 07/16] x86/pci: Add Hygon Dhyana support to PCI and north bridge Pu Wen
2018-09-11 10:07   ` Borislav Petkov
2018-09-19 17:20   ` Lendacky, Thomas
2018-09-19 17:20     ` Lendacky, Thomas
2018-09-20  7:25     ` Thomas Gleixner
2018-09-20  8:05     ` Pu Wen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).