Loading drivers/vfio/pci/vfio_pci.c +25 −29 Original line number Diff line number Diff line Loading @@ -1598,8 +1598,8 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); if (!vdev) { vfio_iommu_group_put(group, &pdev->dev); return -ENOMEM; ret = -ENOMEM; goto out_group_put; } vdev->pdev = pdev; Loading @@ -1610,43 +1610,27 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) INIT_LIST_HEAD(&vdev->ioeventfds_list); ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev); if (ret) { vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; } if (ret) goto out_free; ret = vfio_pci_reflck_attach(vdev); if (ret) { vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; } if (ret) goto out_del_group_dev; if (pdev->is_physfn) { vdev->vf_token = kzalloc(sizeof(*vdev->vf_token), GFP_KERNEL); if (!vdev->vf_token) { vfio_pci_reflck_put(vdev->reflck); vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return -ENOMEM; } vdev->nb.notifier_call = vfio_pci_bus_notifier; ret = bus_register_notifier(&pci_bus_type, &vdev->nb); if (ret) { kfree(vdev->vf_token); vfio_pci_reflck_put(vdev->reflck); vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; ret = -ENOMEM; goto out_reflck; } mutex_init(&vdev->vf_token->lock); uuid_gen(&vdev->vf_token->uuid); vdev->nb.notifier_call = vfio_pci_bus_notifier; ret = bus_register_notifier(&pci_bus_type, &vdev->nb); if (ret) goto out_vf_token; } if (vfio_pci_is_vga(pdev)) { Loading @@ -1672,6 +1656,18 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) } return ret; out_vf_token: kfree(vdev->vf_token); out_reflck: vfio_pci_reflck_put(vdev->reflck); out_del_group_dev: vfio_del_group_dev(&pdev->dev); out_free: kfree(vdev); out_group_put: vfio_iommu_group_put(group, &pdev->dev); return ret; } static void vfio_pci_remove(struct pci_dev *pdev) Loading Loading
drivers/vfio/pci/vfio_pci.c +25 −29 Original line number Diff line number Diff line Loading @@ -1598,8 +1598,8 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); if (!vdev) { vfio_iommu_group_put(group, &pdev->dev); return -ENOMEM; ret = -ENOMEM; goto out_group_put; } vdev->pdev = pdev; Loading @@ -1610,43 +1610,27 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) INIT_LIST_HEAD(&vdev->ioeventfds_list); ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev); if (ret) { vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; } if (ret) goto out_free; ret = vfio_pci_reflck_attach(vdev); if (ret) { vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; } if (ret) goto out_del_group_dev; if (pdev->is_physfn) { vdev->vf_token = kzalloc(sizeof(*vdev->vf_token), GFP_KERNEL); if (!vdev->vf_token) { vfio_pci_reflck_put(vdev->reflck); vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return -ENOMEM; } vdev->nb.notifier_call = vfio_pci_bus_notifier; ret = bus_register_notifier(&pci_bus_type, &vdev->nb); if (ret) { kfree(vdev->vf_token); vfio_pci_reflck_put(vdev->reflck); vfio_del_group_dev(&pdev->dev); vfio_iommu_group_put(group, &pdev->dev); kfree(vdev); return ret; ret = -ENOMEM; goto out_reflck; } mutex_init(&vdev->vf_token->lock); uuid_gen(&vdev->vf_token->uuid); vdev->nb.notifier_call = vfio_pci_bus_notifier; ret = bus_register_notifier(&pci_bus_type, &vdev->nb); if (ret) goto out_vf_token; } if (vfio_pci_is_vga(pdev)) { Loading @@ -1672,6 +1656,18 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) } return ret; out_vf_token: kfree(vdev->vf_token); out_reflck: vfio_pci_reflck_put(vdev->reflck); out_del_group_dev: vfio_del_group_dev(&pdev->dev); out_free: kfree(vdev); out_group_put: vfio_iommu_group_put(group, &pdev->dev); return ret; } static void vfio_pci_remove(struct pci_dev *pdev) Loading