LINUX.ORG.RU

История изменений

Исправление mittorn, (текущая версия) :

Чо за патч? Скинь. У меня rx6900xt

У меня ядро 5.18, rx6950xt и rx6600xt. Тут считается что если amdgpu резеттился определёнными методами, то состояние неизвестно и надо посчитать что vram_lost. На деле же в большинстве случаев это не так. Ну и если у тебя резетился gpu - надо срочно переключиться в консоль и прибить вручную процессы, которые могли это сделать. иначе если он резетнется несоклько раз подряд, может и совсем повиснуть.

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 49f734137f15..1d307bb3cff6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2528,6 +2528,7 @@ static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev)
  * VRAM is lost or now.
  * returns true if vram is lost, false if not.
  */
+#if 0
 static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
 {
        if (memcmp(adev->gart.ptr, adev->reset_magic,
@@ -2544,12 +2545,12 @@ static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
        switch (amdgpu_asic_reset_method(adev)) {
        case AMD_RESET_METHOD_BACO:
        case AMD_RESET_METHOD_MODE1:
-               return true;
+               return false;
        default:
                return false;
        }
 }
-
+#endif
 /**
  * amdgpu_device_set_cg_state - set clockgating for amdgpu device
  *
@@ -4794,7 +4795,7 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
                                if (r)
                                        goto out;

-                               vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
+                               vram_lost = false; //amdgpu_device_check_vram_lost(tmp_adev);
                                if (vram_lost) {
                                        DRM_INFO("VRAM is lost due to GPU reset!\n");
                                        amdgpu_inc_vram_lost(tmp_adev);

Захват экрана через pipewire вроде так и делают, получается хуже чем напрямую через xcomposite (я игры стримлю друзьяшкам, pipewire лагает даже на моём железе блин).

ладно ещё захват экрана, а отдельных окон? а события им слать? Захват экрана кстати я делаю через drm устройство, это что под иксами что под wayland одинаково работает, но требует сервис запущенный от рута.

Исходная версия mittorn, :


Чо за патч? Скинь. У меня rx6900xt У меня ядро 5.18, rx6950xt и rx6600xt. Тут считается что если amdgpu резеттился определёнными методами, то состояние неизвестно и надо посчитать что vram_lost. На деле же в большинстве случаев это не так. Ну и если у тебя резетился gpu - надо срочно переключиться в консоль и прибить вручную процессы, которые могли это сделать. иначе если он резетнется несоклько раз подряд, может и совсем повиснуть.

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 49f734137f15..1d307bb3cff6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2528,6 +2528,7 @@ static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev)
  * VRAM is lost or now.
  * returns true if vram is lost, false if not.
  */
+#if 0
 static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
 {
        if (memcmp(adev->gart.ptr, adev->reset_magic,
@@ -2544,12 +2545,12 @@ static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
        switch (amdgpu_asic_reset_method(adev)) {
        case AMD_RESET_METHOD_BACO:
        case AMD_RESET_METHOD_MODE1:
-               return true;
+               return false;
        default:
                return false;
        }
 }
-
+#endif
 /**
  * amdgpu_device_set_cg_state - set clockgating for amdgpu device
  *
@@ -4794,7 +4795,7 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
                                if (r)
                                        goto out;

-                               vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
+                               vram_lost = false; //amdgpu_device_check_vram_lost(tmp_adev);
                                if (vram_lost) {
                                        DRM_INFO("VRAM is lost due to GPU reset!\n");
                                        amdgpu_inc_vram_lost(tmp_adev);

Захват экрана через pipewire вроде так и делают, получается хуже чем напрямую через xcomposite (я игры стримлю друзьяшкам, pipewire лагает даже на моём железе блин).

ладно ещё захват экрана, а отдельных окон? а события им слать? Захват экрана кстати я делаю через drm устройство, это что под иксами что под wayland одинаково работает, но требует сервис запущенный от рута.