| .. | .. |
|---|
| 851 | 851 | rp_pdev = pci_get_domain_bus_and_slot(0, 0, devfn); |
|---|
| 852 | 852 | if (rp_pdev && rp_pdev->subordinate) { |
|---|
| 853 | 853 | bus = rp_pdev->subordinate->number; |
|---|
| 854 | + pci_dev_put(rp_pdev); |
|---|
| 854 | 855 | return pci_get_domain_bus_and_slot(0, bus, 0); |
|---|
| 855 | 856 | } |
|---|
| 856 | 857 | |
|---|
| 858 | + pci_dev_put(rp_pdev); |
|---|
| 857 | 859 | return NULL; |
|---|
| 858 | 860 | } |
|---|
| 859 | 861 | |
|---|
| .. | .. |
|---|
| 870 | 872 | struct ixgbe_adapter *adapter = hw->back; |
|---|
| 871 | 873 | struct pci_dev *pdev = adapter->pdev; |
|---|
| 872 | 874 | struct pci_dev *func0_pdev; |
|---|
| 875 | + bool has_mii = false; |
|---|
| 873 | 876 | |
|---|
| 874 | 877 | /* For the C3000 family of SoCs (x550em_a) the internal ixgbe devices |
|---|
| 875 | 878 | * are always downstream of root ports @ 0000:00:16.0 & 0000:00:17.0 |
|---|
| .. | .. |
|---|
| 880 | 883 | func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x16, 0)); |
|---|
| 881 | 884 | if (func0_pdev) { |
|---|
| 882 | 885 | if (func0_pdev == pdev) |
|---|
| 883 | | - return true; |
|---|
| 884 | | - else |
|---|
| 885 | | - return false; |
|---|
| 886 | + has_mii = true; |
|---|
| 887 | + goto out; |
|---|
| 886 | 888 | } |
|---|
| 887 | 889 | func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x17, 0)); |
|---|
| 888 | 890 | if (func0_pdev == pdev) |
|---|
| 889 | | - return true; |
|---|
| 891 | + has_mii = true; |
|---|
| 890 | 892 | |
|---|
| 891 | | - return false; |
|---|
| 893 | +out: |
|---|
| 894 | + pci_dev_put(func0_pdev); |
|---|
| 895 | + return has_mii; |
|---|
| 892 | 896 | } |
|---|
| 893 | 897 | |
|---|
| 894 | 898 | /** |
|---|