Message ID | 20220426235718.1634359-1-marmarek@invisiblethingslab.com |
---|---|
State | Accepted |
Commit | 19965d8259fdabc6806da92adda49684f5bcbec5 |
Headers | show |
Series | drm/amdgpu: do not use passthrough mode in Xen dom0 | expand |
Applied. Thanks! Alex On Wed, Apr 27, 2022 at 3:12 AM Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> wrote: > > While technically Xen dom0 is a virtual machine too, it does have > access to most of the hardware so it doesn't need to be considered a > "passthrough". Commit b818a5d37454 ("drm/amdgpu/gmc: use PCI BARs for > APUs in passthrough") changed how FB is accessed based on passthrough > mode. This breaks amdgpu in Xen dom0 with message like this: > > [drm:dc_dmub_srv_wait_idle [amdgpu]] *ERROR* Error waiting for DMUB idle: status=3 > > While the reason for this failure is unclear, the passthrough mode is > not really necessary in Xen dom0 anyway. So, to unbreak booting affected > kernels, disable passthrough mode in this case. > > Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1985 > Fixes: b818a5d37454 ("drm/amdgpu/gmc: use PCI BARs for APUs in passthrough") > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > Cc: stable@vger.kernel.org > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > index a025f080aa6a..5e3756643da3 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > @@ -24,6 +24,7 @@ > #include <linux/module.h> > > #include <drm/drm_drv.h> > +#include <xen/xen.h> > > #include "amdgpu.h" > #include "amdgpu_ras.h" > @@ -710,7 +711,8 @@ void amdgpu_detect_virtualization(struct amdgpu_device *adev) > adev->virt.caps |= AMDGPU_SRIOV_CAPS_ENABLE_IOV; > > if (!reg) { > - if (is_virtual_machine()) /* passthrough mode exclus sriov mod */ > + /* passthrough mode exclus sriov mod */ > + if (is_virtual_machine() && !xen_initial_domain()) > adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE; > } > > -- > 2.35.1 >
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index a025f080aa6a..5e3756643da3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -24,6 +24,7 @@ #include <linux/module.h> #include <drm/drm_drv.h> +#include <xen/xen.h> #include "amdgpu.h" #include "amdgpu_ras.h" @@ -710,7 +711,8 @@ void amdgpu_detect_virtualization(struct amdgpu_device *adev) adev->virt.caps |= AMDGPU_SRIOV_CAPS_ENABLE_IOV; if (!reg) { - if (is_virtual_machine()) /* passthrough mode exclus sriov mod */ + /* passthrough mode exclus sriov mod */ + if (is_virtual_machine() && !xen_initial_domain()) adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE; }
While technically Xen dom0 is a virtual machine too, it does have access to most of the hardware so it doesn't need to be considered a "passthrough". Commit b818a5d37454 ("drm/amdgpu/gmc: use PCI BARs for APUs in passthrough") changed how FB is accessed based on passthrough mode. This breaks amdgpu in Xen dom0 with message like this: [drm:dc_dmub_srv_wait_idle [amdgpu]] *ERROR* Error waiting for DMUB idle: status=3 While the reason for this failure is unclear, the passthrough mode is not really necessary in Xen dom0 anyway. So, to unbreak booting affected kernels, disable passthrough mode in this case. Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1985 Fixes: b818a5d37454 ("drm/amdgpu/gmc: use PCI BARs for APUs in passthrough") Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Cc: stable@vger.kernel.org --- drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)