Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1332589

Re: [PATCH V4 15/23] acpi, mcfg: Implement two calls that might be used to inject/remove MCFG region.

From Tomasz Nowicki <tn@semihalf.com>
Newsgroups linux.kernel
Subject Re: [PATCH V4 15/23] acpi, mcfg: Implement two calls that might be used to inject/remove MCFG region.
Date 2016-02-12 10:00 +0100
Message-ID <r1hK3-4Ac-13@gated-at.bofh.it> (permalink)
References <qYvTc-53o-7@gated-at.bofh.it> <qYw2U-57e-55@gated-at.bofh.it> <r0DCV-3cV-13@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 10.02.2016 15:06, Lorenzo Pieralisi wrote:
> On Thu, Feb 04, 2016 at 06:28:53PM +0100, Tomasz Nowicki wrote:
>> >Lets abstract two calls which allow to inject and remove MCFG regions
>> >which may come from DSDT table. These calls will be used for x86 and ARM64
>> >PCI host bridge driver in the later patches.
>> >
>> >Signed-off-by: Tomasz Nowicki<tn@semihalf.com>
>> >Tested-by: Duc Dang<dhdang@apm.com>
>> >Tested-by: Dongdong Liu<liudongdong3@huawei.com>
>> >Tested-by: Hanjun Guo<hanjun.guo@linaro.org>
>> >Tested-by: Graeme Gregory<graeme.gregory@linaro.org>
>> >Tested-by: Sinan Kaya<okaya@codeaurora.org>
>> >---
>> >  drivers/acpi/mcfg.c      | 38 ++++++++++++++++++++++++++++++++++++++
>> >  include/linux/pci-acpi.h |  9 +++++++++
>> >  2 files changed, 47 insertions(+)
>> >
>> >diff --git a/drivers/acpi/mcfg.c b/drivers/acpi/mcfg.c
>> >index 3e1e7be..dca4c4e 100644
>> >--- a/drivers/acpi/mcfg.c
>> >+++ b/drivers/acpi/mcfg.c
>> >@@ -10,6 +10,7 @@
>> >  #include <linux/acpi.h>
>> >  #include <linux/ecam.h>
>> >  #include <linux/pci.h>
>> >+#include <linux/pci-acpi.h>
>> >
>> >  #define	PREFIX	"MCFG: "
>> >
>> >@@ -77,6 +78,43 @@ int __init acpi_parse_mcfg(struct acpi_table_header *header)
>> >  	return 0;
>> >  }
>> >
>> >+int pci_mmcfg_setup_map(struct acpi_pci_root_info *ci)
>> >+{
>> >+	struct pci_mmcfg_region *cfg;
>> >+	struct acpi_pci_root *root;
>> >+	int seg, start, end, err;
>> >+
>> >+	root = ci->root;
>> >+	seg = root->segment;
>> >+	start = root->secondary.start;
>> >+	end = root->secondary.end;
>> >+
>> >+	cfg = pci_mmconfig_lookup(seg, start);
>> >+	if (cfg)
>> >+		return 0;
>> >+
>> >+	cfg = pci_mmconfig_alloc(seg, start, end, root->mcfg_addr);
>> >+	if (!cfg)
>> >+		return -ENOMEM;
>> >+
>> >+	err = pci_mmconfig_inject(cfg);
>> >+	return err;
> When you integrate Jayachandran's patch this whole function will
> become a pci_mmconfig_insert() and that's where hot_added should
> be set.
>
>> >+}
>> >+
>> >+void pci_mmcfg_teardown_map(struct acpi_pci_root_info *ci)
>> >+{
>> >+	struct acpi_pci_root *root = ci->root;
>> >+	struct pci_mmcfg_region *cfg;
>> >+
>> >+	cfg = pci_mmconfig_lookup(root->segment, root->secondary.start);
>> >+	if (!cfg)
>> >+		return;
>> >+
>> >+	if (cfg->hot_added)
> Move the hot_added check in pci_mmconfig_delete() (that does the look
> up again), we do not want to carry out pci_mmconfig_lookup only to
> check that flag here (and we miss rcu locking for the look-up BTW).

Makes sense to me, I will follow your suggestion.

Thanks,
Tomasz

Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

Re: [PATCH V4 15/23] acpi, mcfg: Implement two calls that might be  used to inject/remove MCFG region. Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> - 2016-02-10 15:10 +0100
  Re: [PATCH V4 15/23] acpi, mcfg: Implement two calls that might be  used to inject/remove MCFG region. Tomasz Nowicki <tn@semihalf.com> - 2016-02-12 10:00 +0100

csiph-web