Commit 362e3770 authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

Merge branch 'remotes/lorenzo/pci/endpoint'

- Fix NULL pointer dereference when epc_features not implemented (Shradha
  Todi)

- Remove redundant initialization (Colin Ian King)

- Add missing destroy_workqueue() in endpoint test (Yang Yingliang)

* remotes/lorenzo/pci/endpoint:
  PCI: endpoint: Fix missing destroy_workqueue()
  PCI: endpoint: Remove redundant initialization of pointer dev
  PCI: endpoint: Fix NULL pointer dereference for ->get_features()
parents a5166a19 acaef798
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -833,14 +833,17 @@ static int pci_epf_test_bind(struct pci_epf *epf)
		return -EINVAL;

	epc_features = pci_epc_get_features(epc, epf->func_no);
	if (epc_features) {
	if (!epc_features) {
		dev_err(&epf->dev, "epc_features not implemented\n");
		return -EOPNOTSUPP;
	}

	linkup_notifier = epc_features->linkup_notifier;
	core_init_notifier = epc_features->core_init_notifier;
	test_reg_bar = pci_epc_get_first_free_bar(epc_features);
	if (test_reg_bar < 0)
		return -EINVAL;
	pci_epf_configure_bar(epf, epc_features);
	}

	epf_test->test_reg_bar = test_reg_bar;
	epf_test->epc_features = epc_features;
@@ -922,6 +925,7 @@ static int __init pci_epf_test_init(void)

	ret = pci_epf_register_driver(&test_driver);
	if (ret) {
		destroy_workqueue(kpcitest_workqueue);
		pr_err("Failed to register pci epf test driver --> %d\n", ret);
		return ret;
	}
@@ -932,6 +936,8 @@ module_init(pci_epf_test_init);

static void __exit pci_epf_test_exit(void)
{
	if (kpcitest_workqueue)
		destroy_workqueue(kpcitest_workqueue);
	pci_epf_unregister_driver(&test_driver);
}
module_exit(pci_epf_test_exit);
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ EXPORT_SYMBOL_GPL(pci_epf_bind);
void pci_epf_free_space(struct pci_epf *epf, void *addr, enum pci_barno bar,
			enum pci_epc_interface_type type)
{
	struct device *dev = epf->epc->dev.parent;
	struct device *dev;
	struct pci_epf_bar *epf_bar;
	struct pci_epc *epc;