drm/amdgpu: Checked if the pointer NULL before use it.
authorGavin Wan <Gavin.Wan@amd.com>
Fri, 17 Mar 2023 22:42:30 +0000 (18:42 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:58:09 +0000 (09:58 -0400)
For SRIOV on some parts, the host driver does not post VBIOS. So the guest
cannot get bios information. Therefore, adev->virt.fw_reserve.p_pf2vf
and adev->mode_info.atom_context are NULL.

Signed-off-by: Gavin Wan <Gavin.Wan@amd.com>
Reviewed-by: Zhigang Luo <Zhigang.Luo@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 19a3f9ba545b4a32dc66e0e2bab80c0e2f5b5f2c..0c6f983fb2adca2540ac1705a0cec01cf9b74ae3 100644 (file)
@@ -3855,21 +3855,24 @@ int amdgpu_device_init(struct amdgpu_device *adev,
        }
 
        /* enable PCIE atomic ops */
-       if (amdgpu_sriov_vf(adev))
-               adev->have_atomics_support = ((struct amd_sriov_msg_pf2vf_info *)
-                       adev->virt.fw_reserve.p_pf2vf)->pcie_atomic_ops_support_flags ==
-                       (PCI_EXP_DEVCAP2_ATOMIC_COMP32 | PCI_EXP_DEVCAP2_ATOMIC_COMP64);
+       if (amdgpu_sriov_vf(adev)) {
+               if (adev->virt.fw_reserve.p_pf2vf)
+                       adev->have_atomics_support = ((struct amd_sriov_msg_pf2vf_info *)
+                                                     adev->virt.fw_reserve.p_pf2vf)->pcie_atomic_ops_support_flags ==
+                               (PCI_EXP_DEVCAP2_ATOMIC_COMP32 | PCI_EXP_DEVCAP2_ATOMIC_COMP64);
        /* APUs w/ gfx9 onwards doesn't reply on PCIe atomics, rather it is a
         * internal path natively support atomics, set have_atomics_support to true.
         */
-       else if ((adev->flags & AMD_IS_APU) &&
-               (adev->ip_versions[GC_HWIP][0] > IP_VERSION(9, 0, 0)))
+       else if ((adev->flags & AMD_IS_APU) &&
+                  (adev->ip_versions[GC_HWIP][0] > IP_VERSION(9, 0, 0))) {
                adev->have_atomics_support = true;
-       else
+       } else {
                adev->have_atomics_support =
                        !pci_enable_atomic_ops_to_root(adev->pdev,
                                          PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
                                          PCI_EXP_DEVCAP2_ATOMIC_COMP64);
+       }
+
        if (!adev->have_atomics_support)
                dev_info(adev->dev, "PCIE atomic ops is not supported\n");
 
@@ -3885,7 +3888,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,
        amdgpu_reset_init(adev);
 
        /* detect if we are with an SRIOV vbios */
-       amdgpu_device_detect_sriov_bios(adev);
+       if (adev->bios)
+               amdgpu_device_detect_sriov_bios(adev);
 
        /* check if we need to reset the asic
         *  E.g., driver was not cleanly unloaded previously, etc.