Lines Matching refs:hbus

503 	struct hv_pcibus_device *hbus;  member
543 static struct hv_pci_dev *get_pcichild_wslot(struct hv_pcibus_device *hbus,
634 void __iomem *addr = hpdev->hbus->cfg_addr + CFG_PAGE_OFFSET + where; in _hv_pcifront_read_config()
662 spin_lock_irqsave(&hpdev->hbus->config_lock, flags); in _hv_pcifront_read_config()
664 writel(hpdev->desc.win_slot.slot, hpdev->hbus->cfg_addr); in _hv_pcifront_read_config()
684 spin_unlock_irqrestore(&hpdev->hbus->config_lock, flags); in _hv_pcifront_read_config()
686 dev_err(&hpdev->hbus->hdev->device, in _hv_pcifront_read_config()
695 void __iomem *addr = hpdev->hbus->cfg_addr + CFG_PAGE_OFFSET + in hv_pcifront_get_vendor_id()
698 spin_lock_irqsave(&hpdev->hbus->config_lock, flags); in hv_pcifront_get_vendor_id()
701 writel(hpdev->desc.win_slot.slot, hpdev->hbus->cfg_addr); in hv_pcifront_get_vendor_id()
711 spin_unlock_irqrestore(&hpdev->hbus->config_lock, flags); in hv_pcifront_get_vendor_id()
727 void __iomem *addr = hpdev->hbus->cfg_addr + CFG_PAGE_OFFSET + where; in _hv_pcifront_write_config()
733 spin_lock_irqsave(&hpdev->hbus->config_lock, flags); in _hv_pcifront_write_config()
735 writel(hpdev->desc.win_slot.slot, hpdev->hbus->cfg_addr); in _hv_pcifront_write_config()
755 spin_unlock_irqrestore(&hpdev->hbus->config_lock, flags); in _hv_pcifront_write_config()
757 dev_err(&hpdev->hbus->hdev->device, in _hv_pcifront_write_config()
776 struct hv_pcibus_device *hbus = in hv_pcifront_read_config() local
780 hpdev = get_pcichild_wslot(hbus, devfn_to_wslot(devfn)); in hv_pcifront_read_config()
804 struct hv_pcibus_device *hbus = in hv_pcifront_write_config() local
808 hpdev = get_pcichild_wslot(hbus, devfn_to_wslot(devfn)); in hv_pcifront_write_config()
844 vmbus_sendpacket(hpdev->hbus->hdev->channel, int_pkt, sizeof(*int_pkt), in hv_int_desc_free()
863 struct hv_pcibus_device *hbus; in hv_msi_free() local
871 hbus = info->data; in hv_msi_free()
877 hpdev = get_pcichild_wslot(hbus, devfn_to_wslot(pdev->devfn)); in hv_msi_free()
938 struct hv_pcibus_device *hbus; in hv_irq_unmask() local
951 hbus = container_of(pbus->sysdata, struct hv_pcibus_device, sysdata); in hv_irq_unmask()
954 spin_lock_irqsave(&hbus->retarget_msi_interrupt_lock, flags); in hv_irq_unmask()
956 params = &hbus->retarget_msi_interrupt_params; in hv_irq_unmask()
962 params->device_id = (hbus->hdev->dev_instance.b[5] << 24) | in hv_irq_unmask()
963 (hbus->hdev->dev_instance.b[4] << 16) | in hv_irq_unmask()
964 (hbus->hdev->dev_instance.b[7] << 8) | in hv_irq_unmask()
965 (hbus->hdev->dev_instance.b[6] & 0xf8) | in hv_irq_unmask()
999 dev_err(&hbus->hdev->device, in hv_irq_unmask()
1019 spin_unlock_irqrestore(&hbus->retarget_msi_interrupt_lock, flags); in hv_irq_unmask()
1022 dev_err(&hbus->hdev->device, in hv_irq_unmask()
1103 struct hv_pcibus_device *hbus; in hv_compose_msi_msg() local
1137 hbus = container_of(pbus->sysdata, struct hv_pcibus_device, sysdata); in hv_compose_msi_msg()
1138 hpdev = get_pcichild_wslot(hbus, devfn_to_wslot(pdev->devfn)); in hv_compose_msi_msg()
1203 dev_err(&hbus->hdev->device, in hv_compose_msi_msg()
1208 ret = vmbus_sendpacket(hpdev->hbus->hdev->channel, &ctxt.int_pkts, in hv_compose_msi_msg()
1213 dev_err(&hbus->hdev->device, in hv_compose_msi_msg()
1226 dev_err_once(&hbus->hdev->device, in hv_compose_msi_msg()
1242 if (hbus->hdev->channel->target_cpu == smp_processor_id()) in hv_compose_msi_msg()
1243 hv_pci_onchannelcallback(hbus); in hv_compose_msi_msg()
1248 dev_err_once(&hbus->hdev->device, in hv_compose_msi_msg()
1257 dev_err(&hbus->hdev->device, in hv_compose_msi_msg()
1325 static int hv_pcie_init_irq_domain(struct hv_pcibus_device *hbus) in hv_pcie_init_irq_domain() argument
1327 hbus->msi_info.chip = &hv_msi_irq_chip; in hv_pcie_init_irq_domain()
1328 hbus->msi_info.ops = &hv_msi_ops; in hv_pcie_init_irq_domain()
1329 hbus->msi_info.flags = (MSI_FLAG_USE_DEF_DOM_OPS | in hv_pcie_init_irq_domain()
1332 hbus->msi_info.handler = handle_edge_irq; in hv_pcie_init_irq_domain()
1333 hbus->msi_info.handler_name = "edge"; in hv_pcie_init_irq_domain()
1334 hbus->msi_info.data = hbus; in hv_pcie_init_irq_domain()
1335 hbus->irq_domain = pci_msi_create_irq_domain(hbus->sysdata.fwnode, in hv_pcie_init_irq_domain()
1336 &hbus->msi_info, in hv_pcie_init_irq_domain()
1338 if (!hbus->irq_domain) { in hv_pcie_init_irq_domain()
1339 dev_err(&hbus->hdev->device, in hv_pcie_init_irq_domain()
1371 static void survey_child_resources(struct hv_pcibus_device *hbus) in survey_child_resources() argument
1381 event = xchg(&hbus->survey_event, NULL); in survey_child_resources()
1386 if (hbus->low_mmio_space || hbus->high_mmio_space) { in survey_child_resources()
1391 spin_lock_irqsave(&hbus->device_list_lock, flags); in survey_child_resources()
1398 list_for_each_entry(hpdev, &hbus->children, list_entry) { in survey_child_resources()
1401 dev_err(&hbus->hdev->device, in survey_child_resources()
1420 hbus->high_mmio_space += bar_size; in survey_child_resources()
1422 hbus->low_mmio_space += bar_size; in survey_child_resources()
1427 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in survey_child_resources()
1443 static void prepopulate_bars(struct hv_pcibus_device *hbus) in prepopulate_bars() argument
1457 if (hbus->low_mmio_space) { in prepopulate_bars()
1458 low_size = 1ULL << (63 - __builtin_clzll(hbus->low_mmio_space)); in prepopulate_bars()
1459 low_base = hbus->low_mmio_res->start; in prepopulate_bars()
1462 if (hbus->high_mmio_space) { in prepopulate_bars()
1464 (63 - __builtin_clzll(hbus->high_mmio_space)); in prepopulate_bars()
1465 high_base = hbus->high_mmio_res->start; in prepopulate_bars()
1468 spin_lock_irqsave(&hbus->device_list_lock, flags); in prepopulate_bars()
1472 list_for_each_entry(hpdev, &hbus->children, list_entry) { in prepopulate_bars()
1525 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in prepopulate_bars()
1537 static void hv_pci_assign_slots(struct hv_pcibus_device *hbus) in hv_pci_assign_slots() argument
1543 list_for_each_entry(hpdev, &hbus->children, list_entry) { in hv_pci_assign_slots()
1549 hpdev->pci_slot = pci_create_slot(hbus->pci_bus, slot_nr, in hv_pci_assign_slots()
1561 static void hv_pci_remove_slots(struct hv_pcibus_device *hbus) in hv_pci_remove_slots() argument
1565 list_for_each_entry(hpdev, &hbus->children, list_entry) { in hv_pci_remove_slots()
1579 static int create_root_hv_pci_bus(struct hv_pcibus_device *hbus) in create_root_hv_pci_bus() argument
1582 hbus->pci_bus = pci_create_root_bus(&hbus->hdev->device, in create_root_hv_pci_bus()
1585 &hbus->sysdata, in create_root_hv_pci_bus()
1586 &hbus->resources_for_children); in create_root_hv_pci_bus()
1587 if (!hbus->pci_bus) in create_root_hv_pci_bus()
1590 hbus->pci_bus->msi = &hbus->msi_chip; in create_root_hv_pci_bus()
1591 hbus->pci_bus->msi->dev = &hbus->hdev->device; in create_root_hv_pci_bus()
1594 pci_scan_child_bus(hbus->pci_bus); in create_root_hv_pci_bus()
1595 pci_bus_assign_resources(hbus->pci_bus); in create_root_hv_pci_bus()
1596 hv_pci_assign_slots(hbus); in create_root_hv_pci_bus()
1597 pci_bus_add_devices(hbus->pci_bus); in create_root_hv_pci_bus()
1599 hbus->state = hv_pcibus_installed; in create_root_hv_pci_bus()
1626 dev_err(&completion->hpdev->hbus->hdev->device, in q_resource_requirements()
1650 static struct hv_pci_dev *new_pcichild_device(struct hv_pcibus_device *hbus, in new_pcichild_device() argument
1667 hpdev->hbus = hbus; in new_pcichild_device()
1678 ret = vmbus_sendpacket(hbus->hdev->channel, res_req, in new_pcichild_device()
1686 if (wait_for_response(hbus->hdev, &comp_pkt.host_event)) in new_pcichild_device()
1692 spin_lock_irqsave(&hbus->device_list_lock, flags); in new_pcichild_device()
1694 list_add_tail(&hpdev->list_entry, &hbus->children); in new_pcichild_device()
1695 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in new_pcichild_device()
1716 static struct hv_pci_dev *get_pcichild_wslot(struct hv_pcibus_device *hbus, in get_pcichild_wslot() argument
1722 spin_lock_irqsave(&hbus->device_list_lock, flags); in get_pcichild_wslot()
1723 list_for_each_entry(iter, &hbus->children, list_entry) { in get_pcichild_wslot()
1730 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in get_pcichild_wslot()
1764 struct hv_pcibus_device *hbus; in pci_devices_present_work() local
1771 hbus = dr_wrk->bus; in pci_devices_present_work()
1777 spin_lock_irqsave(&hbus->device_list_lock, flags); in pci_devices_present_work()
1778 while (!list_empty(&hbus->dr_list)) { in pci_devices_present_work()
1779 dr = list_first_entry(&hbus->dr_list, struct hv_dr_state, in pci_devices_present_work()
1784 if (!list_empty(&hbus->dr_list)) { in pci_devices_present_work()
1789 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in pci_devices_present_work()
1792 put_hvpcibus(hbus); in pci_devices_present_work()
1797 spin_lock_irqsave(&hbus->device_list_lock, flags); in pci_devices_present_work()
1798 list_for_each_entry(hpdev, &hbus->children, list_entry) { in pci_devices_present_work()
1801 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in pci_devices_present_work()
1808 spin_lock_irqsave(&hbus->device_list_lock, flags); in pci_devices_present_work()
1809 list_for_each_entry(hpdev, &hbus->children, list_entry) { in pci_devices_present_work()
1818 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in pci_devices_present_work()
1821 hpdev = new_pcichild_device(hbus, new_desc); in pci_devices_present_work()
1823 dev_err(&hbus->hdev->device, in pci_devices_present_work()
1829 spin_lock_irqsave(&hbus->device_list_lock, flags); in pci_devices_present_work()
1832 list_for_each_entry(hpdev, &hbus->children, list_entry) { in pci_devices_present_work()
1841 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in pci_devices_present_work()
1855 switch (hbus->state) { in pci_devices_present_work()
1862 pci_scan_child_bus(hbus->pci_bus); in pci_devices_present_work()
1863 hv_pci_assign_slots(hbus); in pci_devices_present_work()
1869 survey_child_resources(hbus); in pci_devices_present_work()
1876 put_hvpcibus(hbus); in pci_devices_present_work()
1888 static void hv_pci_devices_present(struct hv_pcibus_device *hbus, in hv_pci_devices_present() argument
1909 dr_wrk->bus = hbus; in hv_pci_devices_present()
1917 spin_lock_irqsave(&hbus->device_list_lock, flags); in hv_pci_devices_present()
1923 pending_dr = !list_empty(&hbus->dr_list); in hv_pci_devices_present()
1924 list_add_tail(&dr->list_entry, &hbus->dr_list); in hv_pci_devices_present()
1925 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in hv_pci_devices_present()
1930 get_hvpcibus(hbus); in hv_pci_devices_present()
1931 queue_work(hbus->wq, &dr_wrk->wrk); in hv_pci_devices_present()
1947 struct hv_pcibus_device *hbus; in hv_eject_device_work() local
1958 hbus = hpdev->hbus; in hv_eject_device_work()
1969 pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot); in hv_eject_device_work()
1977 spin_lock_irqsave(&hbus->device_list_lock, flags); in hv_eject_device_work()
1979 spin_unlock_irqrestore(&hbus->device_list_lock, flags); in hv_eject_device_work()
1988 vmbus_sendpacket(hbus->hdev->channel, ejct_pkt, in hv_eject_device_work()
1999 put_hvpcibus(hbus); in hv_eject_device_work()
2015 get_hvpcibus(hpdev->hbus); in hv_pci_eject_device()
2016 queue_work(hpdev->hbus->wq, &hpdev->wrk); in hv_pci_eject_device()
2030 struct hv_pcibus_device *hbus = context; in hv_pci_onchannelcallback() local
2048 ret = vmbus_recvpacket_raw(hbus->hdev->channel, buffer, in hv_pci_onchannelcallback()
2098 dev_err(&hbus->hdev->device, in hv_pci_onchannelcallback()
2103 hv_pci_devices_present(hbus, bus_rel); in hv_pci_onchannelcallback()
2109 hpdev = get_pcichild_wslot(hbus, in hv_pci_onchannelcallback()
2118 dev_warn(&hbus->hdev->device, in hv_pci_onchannelcallback()
2126 dev_err(&hbus->hdev->device, in hv_pci_onchannelcallback()
2225 static void hv_pci_free_bridge_windows(struct hv_pcibus_device *hbus) in hv_pci_free_bridge_windows() argument
2232 if (hbus->low_mmio_space && hbus->low_mmio_res) { in hv_pci_free_bridge_windows()
2233 hbus->low_mmio_res->flags |= IORESOURCE_BUSY; in hv_pci_free_bridge_windows()
2234 vmbus_free_mmio(hbus->low_mmio_res->start, in hv_pci_free_bridge_windows()
2235 resource_size(hbus->low_mmio_res)); in hv_pci_free_bridge_windows()
2238 if (hbus->high_mmio_space && hbus->high_mmio_res) { in hv_pci_free_bridge_windows()
2239 hbus->high_mmio_res->flags |= IORESOURCE_BUSY; in hv_pci_free_bridge_windows()
2240 vmbus_free_mmio(hbus->high_mmio_res->start, in hv_pci_free_bridge_windows()
2241 resource_size(hbus->high_mmio_res)); in hv_pci_free_bridge_windows()
2270 static int hv_pci_allocate_bridge_windows(struct hv_pcibus_device *hbus) in hv_pci_allocate_bridge_windows() argument
2275 if (hbus->low_mmio_space) { in hv_pci_allocate_bridge_windows()
2276 align = 1ULL << (63 - __builtin_clzll(hbus->low_mmio_space)); in hv_pci_allocate_bridge_windows()
2277 ret = vmbus_allocate_mmio(&hbus->low_mmio_res, hbus->hdev, 0, in hv_pci_allocate_bridge_windows()
2279 hbus->low_mmio_space, in hv_pci_allocate_bridge_windows()
2282 dev_err(&hbus->hdev->device, in hv_pci_allocate_bridge_windows()
2284 hbus->low_mmio_space); in hv_pci_allocate_bridge_windows()
2289 hbus->low_mmio_res->flags |= IORESOURCE_WINDOW; in hv_pci_allocate_bridge_windows()
2290 hbus->low_mmio_res->flags &= ~IORESOURCE_BUSY; in hv_pci_allocate_bridge_windows()
2291 pci_add_resource(&hbus->resources_for_children, in hv_pci_allocate_bridge_windows()
2292 hbus->low_mmio_res); in hv_pci_allocate_bridge_windows()
2295 if (hbus->high_mmio_space) { in hv_pci_allocate_bridge_windows()
2296 align = 1ULL << (63 - __builtin_clzll(hbus->high_mmio_space)); in hv_pci_allocate_bridge_windows()
2297 ret = vmbus_allocate_mmio(&hbus->high_mmio_res, hbus->hdev, in hv_pci_allocate_bridge_windows()
2299 hbus->high_mmio_space, align, in hv_pci_allocate_bridge_windows()
2302 dev_err(&hbus->hdev->device, in hv_pci_allocate_bridge_windows()
2304 hbus->high_mmio_space); in hv_pci_allocate_bridge_windows()
2309 hbus->high_mmio_res->flags |= IORESOURCE_WINDOW; in hv_pci_allocate_bridge_windows()
2310 hbus->high_mmio_res->flags &= ~IORESOURCE_BUSY; in hv_pci_allocate_bridge_windows()
2311 pci_add_resource(&hbus->resources_for_children, in hv_pci_allocate_bridge_windows()
2312 hbus->high_mmio_res); in hv_pci_allocate_bridge_windows()
2318 if (hbus->low_mmio_res) { in hv_pci_allocate_bridge_windows()
2319 vmbus_free_mmio(hbus->low_mmio_res->start, in hv_pci_allocate_bridge_windows()
2320 resource_size(hbus->low_mmio_res)); in hv_pci_allocate_bridge_windows()
2335 static int hv_allocate_config_window(struct hv_pcibus_device *hbus) in hv_allocate_config_window() argument
2343 ret = vmbus_allocate_mmio(&hbus->mem_config, hbus->hdev, 0, -1, in hv_allocate_config_window()
2356 hbus->mem_config->flags |= IORESOURCE_BUSY; in hv_allocate_config_window()
2361 static void hv_free_config_window(struct hv_pcibus_device *hbus) in hv_free_config_window() argument
2363 vmbus_free_mmio(hbus->mem_config->start, PCI_CONFIG_MMIO_LENGTH); in hv_free_config_window()
2374 struct hv_pcibus_device *hbus = hv_get_drvdata(hdev); in hv_pci_enter_d0() local
2395 d0_entry->mmio_base = hbus->mem_config->start; in hv_pci_enter_d0()
2430 struct hv_pcibus_device *hbus = hv_get_drvdata(hdev); in hv_pci_query_relations() local
2437 if (cmpxchg(&hbus->survey_event, NULL, &comp)) in hv_pci_query_relations()
2464 flush_workqueue(hbus->wq); in hv_pci_query_relations()
2488 struct hv_pcibus_device *hbus = hv_get_drvdata(hdev); in hv_send_resources_allocated() local
2508 hpdev = get_pcichild_wslot(hbus, wslot); in hv_send_resources_allocated()
2563 struct hv_pcibus_device *hbus = hv_get_drvdata(hdev); in hv_send_resources_released() local
2570 hpdev = get_pcichild_wslot(hbus, wslot); in hv_send_resources_released()
2589 static void get_hvpcibus(struct hv_pcibus_device *hbus) in get_hvpcibus() argument
2591 refcount_inc(&hbus->remove_lock); in get_hvpcibus()
2594 static void put_hvpcibus(struct hv_pcibus_device *hbus) in put_hvpcibus() argument
2596 if (refcount_dec_and_test(&hbus->remove_lock)) in put_hvpcibus()
2597 complete(&hbus->remove_event); in put_hvpcibus()
2610 struct hv_pcibus_device *hbus; in hv_pci_probe() local
2617 BUILD_BUG_ON(sizeof(*hbus) > PAGE_SIZE); in hv_pci_probe()
2619 hbus = (struct hv_pcibus_device *)get_zeroed_page(GFP_KERNEL); in hv_pci_probe()
2620 if (!hbus) in hv_pci_probe()
2622 hbus->state = hv_pcibus_init; in hv_pci_probe()
2636 hbus->sysdata.domain = hdev->dev_instance.b[9] | in hv_pci_probe()
2639 hbus->hdev = hdev; in hv_pci_probe()
2640 refcount_set(&hbus->remove_lock, 1); in hv_pci_probe()
2641 INIT_LIST_HEAD(&hbus->children); in hv_pci_probe()
2642 INIT_LIST_HEAD(&hbus->dr_list); in hv_pci_probe()
2643 INIT_LIST_HEAD(&hbus->resources_for_children); in hv_pci_probe()
2644 spin_lock_init(&hbus->config_lock); in hv_pci_probe()
2645 spin_lock_init(&hbus->device_list_lock); in hv_pci_probe()
2646 spin_lock_init(&hbus->retarget_msi_interrupt_lock); in hv_pci_probe()
2647 init_completion(&hbus->remove_event); in hv_pci_probe()
2648 hbus->wq = alloc_ordered_workqueue("hv_pci_%x", 0, in hv_pci_probe()
2649 hbus->sysdata.domain); in hv_pci_probe()
2650 if (!hbus->wq) { in hv_pci_probe()
2656 hv_pci_onchannelcallback, hbus); in hv_pci_probe()
2660 hv_set_drvdata(hdev, hbus); in hv_pci_probe()
2666 ret = hv_allocate_config_window(hbus); in hv_pci_probe()
2670 hbus->cfg_addr = ioremap(hbus->mem_config->start, in hv_pci_probe()
2672 if (!hbus->cfg_addr) { in hv_pci_probe()
2679 hbus->sysdata.fwnode = irq_domain_alloc_fwnode(hbus); in hv_pci_probe()
2680 if (!hbus->sysdata.fwnode) { in hv_pci_probe()
2685 ret = hv_pcie_init_irq_domain(hbus); in hv_pci_probe()
2697 ret = hv_pci_allocate_bridge_windows(hbus); in hv_pci_probe()
2705 prepopulate_bars(hbus); in hv_pci_probe()
2707 hbus->state = hv_pcibus_probed; in hv_pci_probe()
2709 ret = create_root_hv_pci_bus(hbus); in hv_pci_probe()
2716 hv_pci_free_bridge_windows(hbus); in hv_pci_probe()
2718 irq_domain_remove(hbus->irq_domain); in hv_pci_probe()
2720 irq_domain_free_fwnode(hbus->sysdata.fwnode); in hv_pci_probe()
2722 iounmap(hbus->cfg_addr); in hv_pci_probe()
2724 hv_free_config_window(hbus); in hv_pci_probe()
2728 destroy_workqueue(hbus->wq); in hv_pci_probe()
2730 free_page((unsigned long)hbus); in hv_pci_probe()
2736 struct hv_pcibus_device *hbus = hv_get_drvdata(hdev); in hv_pci_bus_exit() local
2754 hv_pci_devices_present(hbus, &relations); in hv_pci_bus_exit()
2784 struct hv_pcibus_device *hbus; in hv_pci_remove() local
2786 hbus = hv_get_drvdata(hdev); in hv_pci_remove()
2787 if (hbus->state == hv_pcibus_installed) { in hv_pci_remove()
2790 pci_stop_root_bus(hbus->pci_bus); in hv_pci_remove()
2791 hv_pci_remove_slots(hbus); in hv_pci_remove()
2792 pci_remove_root_bus(hbus->pci_bus); in hv_pci_remove()
2794 hbus->state = hv_pcibus_removed; in hv_pci_remove()
2801 iounmap(hbus->cfg_addr); in hv_pci_remove()
2802 hv_free_config_window(hbus); in hv_pci_remove()
2803 pci_free_resource_list(&hbus->resources_for_children); in hv_pci_remove()
2804 hv_pci_free_bridge_windows(hbus); in hv_pci_remove()
2805 irq_domain_remove(hbus->irq_domain); in hv_pci_remove()
2806 irq_domain_free_fwnode(hbus->sysdata.fwnode); in hv_pci_remove()
2807 put_hvpcibus(hbus); in hv_pci_remove()
2808 wait_for_completion(&hbus->remove_event); in hv_pci_remove()
2809 destroy_workqueue(hbus->wq); in hv_pci_remove()
2810 free_page((unsigned long)hbus); in hv_pci_remove()