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 Nowickitn@semihalf.com Tested-by: Duc Dangdhdang@apm.com Tested-by: Dongdong Liuliudongdong3@huawei.com Tested-by: Hanjun Guohanjun.guo@linaro.org Tested-by: Graeme Gregorygraeme.gregory@linaro.org Tested-by: Sinan Kayaokaya@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