Message ID | 20210714102737.198432-6-boqun.feng@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | PCI: hv: Support host bridge probing on ARM64 | expand |
> diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c > index 8d42da5dd1d4..5741b1dd3c14 100644 > --- a/drivers/pci/controller/pci-hyperv.c > +++ b/drivers/pci/controller/pci-hyperv.c > @@ -2299,7 +2299,7 @@ static void hv_eject_device_work(struct work_struct *work) > * because hbus->bridge->bus may not exist yet. > */ > wslot = wslot_to_devfn(hpdev->desc.win_slot.slot); > - pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot); > + pdev = pci_get_domain_bus_and_slot(hbus->bridge->domain_nr, 0, wslot); > if (pdev) { > pci_lock_rescan_remove(); > pci_stop_and_remove_bus_device(pdev); > @@ -3071,6 +3071,7 @@ static int hv_pci_probe(struct hv_device *hdev, > "PCI dom# 0x%hx has collision, using 0x%hx", > dom_req, dom); > > + hbus->bridge->domain_nr = dom; > hbus->sysdata.domain = dom; With your other patches everything is moving over to based off of bridge->domain_nr. Do we still need to update sysdata.domain?
On Wed, Jul 14, 2021 at 05:04:38PM +0000, Sunil Muthuswamy wrote: > > diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c > > index 8d42da5dd1d4..5741b1dd3c14 100644 > > --- a/drivers/pci/controller/pci-hyperv.c > > +++ b/drivers/pci/controller/pci-hyperv.c > > @@ -2299,7 +2299,7 @@ static void hv_eject_device_work(struct work_struct *work) > > * because hbus->bridge->bus may not exist yet. > > */ > > wslot = wslot_to_devfn(hpdev->desc.win_slot.slot); > > - pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot); > > + pdev = pci_get_domain_bus_and_slot(hbus->bridge->domain_nr, 0, wslot); > > if (pdev) { > > pci_lock_rescan_remove(); > > pci_stop_and_remove_bus_device(pdev); > > @@ -3071,6 +3071,7 @@ static int hv_pci_probe(struct hv_device *hdev, > > "PCI dom# 0x%hx has collision, using 0x%hx", > > dom_req, dom); > > > > + hbus->bridge->domain_nr = dom; > > hbus->sysdata.domain = dom; > With your other patches everything is moving over to based off of bridge->domain_nr. > Do we still need to update sysdata.domain? Yes, we still need it, because x86 is not a CONFIG_PCI_DOMAINS_GENERIC=y architecture, and this patchset only makes CONFIG_PCI_DOMAINS_GENERIC=y archs work with bridge->domain_nr. x86 still use the arch-specific pci_domain_nr(), so we need to set the field in sysdata. Regards, Boqun >
diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c index 8d42da5dd1d4..5741b1dd3c14 100644 --- a/drivers/pci/controller/pci-hyperv.c +++ b/drivers/pci/controller/pci-hyperv.c @@ -2299,7 +2299,7 @@ static void hv_eject_device_work(struct work_struct *work) * because hbus->bridge->bus may not exist yet. */ wslot = wslot_to_devfn(hpdev->desc.win_slot.slot); - pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot); + pdev = pci_get_domain_bus_and_slot(hbus->bridge->domain_nr, 0, wslot); if (pdev) { pci_lock_rescan_remove(); pci_stop_and_remove_bus_device(pdev); @@ -3071,6 +3071,7 @@ static int hv_pci_probe(struct hv_device *hdev, "PCI dom# 0x%hx has collision, using 0x%hx", dom_req, dom); + hbus->bridge->domain_nr = dom; hbus->sysdata.domain = dom; hbus->hdev = hdev; @@ -3080,7 +3081,7 @@ static int hv_pci_probe(struct hv_device *hdev, spin_lock_init(&hbus->device_list_lock); spin_lock_init(&hbus->retarget_msi_interrupt_lock); hbus->wq = alloc_ordered_workqueue("hv_pci_%x", 0, - hbus->sysdata.domain); + hbus->bridge->domain_nr); if (!hbus->wq) { ret = -ENOMEM; goto free_dom; @@ -3207,7 +3208,7 @@ static int hv_pci_probe(struct hv_device *hdev, destroy_wq: destroy_workqueue(hbus->wq); free_dom: - hv_put_dom_num(hbus->sysdata.domain); + hv_put_dom_num(hbus->bridge->domain_nr); free_bus: kfree(hbus); return ret; @@ -3315,7 +3316,7 @@ static int hv_pci_remove(struct hv_device *hdev) irq_domain_remove(hbus->irq_domain); irq_domain_free_fwnode(hbus->sysdata.fwnode); - hv_put_dom_num(hbus->sysdata.domain); + hv_put_dom_num(hbus->bridge->domain_nr); kfree(hbus); return ret;
No functional change, just store and maintain the PCI domain number in the generic pci_host_bridge instead of x86 specific pci_sysdata. Signed-off-by: Boqun Feng <boqun.feng@gmail.com> --- drivers/pci/controller/pci-hyperv.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)