From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751250AbeAVW0U (ORCPT ); Mon, 22 Jan 2018 17:26:20 -0500 Received: from mail.kernel.org ([198.145.29.99]:57276 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751053AbeAVW0Q (ORCPT ); Mon, 22 Jan 2018 17:26:16 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2DA43214E1 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=helgaas@kernel.org Date: Mon, 22 Jan 2018 16:26:10 -0600 From: Bjorn Helgaas To: Jan Kiszka Cc: Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , x86@kernel.org, Linux Kernel Mailing List , jailhouse-dev@googlegroups.com Subject: Re: [PATCH v2 12/12] x86/jailhouse: Initialize PCI support Message-ID: <20180122222610.GA197931@bhelgaas-glaptop.roam.corp.google.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 27, 2017 at 09:11:54AM +0100, Jan Kiszka wrote: > From: Jan Kiszka > > With this change, PCI devices can be detected and used inside a non-root > cell. > > Signed-off-by: Jan Kiszka > --- > arch/x86/kernel/jailhouse.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c > index 8ff21e1534de..70b857d4b1f5 100644 > --- a/arch/x86/kernel/jailhouse.c > +++ b/arch/x86/kernel/jailhouse.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -108,6 +109,19 @@ static void jailhouse_no_restart(void) > machine_halt(); > } > > +static int __init jailhouse_pci_arch_init(void) > +{ > + pci_direct_init(1); > + > + /* > + * There are no bridges on the virtual PCI root bus under Jailhouse, > + * thus no other way to discover all devices than a full scan. > + */ > + pcibios_last_bus = 0xff; Can you help me understand the comment here? If the virtual root bus is bus 00, are you saying the guest might see devices on bus 00 and bus 01, with no bus 00 bridge that leads to bus 01? I suspect you mean something different because you say elsewhere that ARM "just works" because DT provides more configurability. But even on ARM with DT, we probe the root bus and only probe other buses when we find bridges leading to them. So I suspect the purpose of this may be to discover devices that are below host bridges not exposed by ACPI. For example, my BIOS may expose one host bridge: ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7e]) but the chipset may implement devices on bus 7f even though the BIOS did not advertise the host bridge leading to that bus. This is a case of a missing host bridge, not a missing bridge on the root bus. Can you show an example "lspci -v" output to make this concrete? > + return 0; > +} > + > static void __init jailhouse_init_platform(void) > { > u64 pa_data = boot_params.hdr.setup_data; > @@ -117,6 +131,7 @@ static void __init jailhouse_init_platform(void) > x86_init.irqs.pre_vector_init = x86_init_noop; > x86_init.timers.timer_init = jailhouse_timer_init; > x86_init.mpparse.get_smp_config = jailhouse_get_smp_config; > + x86_init.pci.arch_init = jailhouse_pci_arch_init; > > x86_platform.calibrate_cpu = jailhouse_get_tsc; > x86_platform.calibrate_tsc = jailhouse_get_tsc; > @@ -159,6 +174,8 @@ static void __init jailhouse_init_platform(void) > > precalibrated_tsc_khz = setup_data.tsc_khz; > > + pci_probe = 0; > + > /* > * Avoid that the kernel complains about missing ACPI tables - there > * are none in a non-root cell. > -- > 2.12.3 >