РЕШЕНО: nvidia-drivers-390.116-r2 (и ядро 5.1.2)

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

Аватара пользователя
devilr
Сообщения: 1726
ОС: Mandriva => Gentoo (~amd64)

РЕШЕНО: nvidia-drivers-390.116-r2

Сообщение devilr » 12.05.2019 00:58

Есть видеокарта:

Код: Выделить всё

01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 630] (rev a1)
Соответственно, последний драйвер, который можно выбрать из доступных - это nvidia-drivers-390.116-r2
На старых ядрах всё собиралось прекрасно. А вот на новом (5.1) наблюдаю ошибку при сборке:

Код: Выделить всё

/dev/shm/portage/x11-drivers/nvidia-drivers-390.116-r2/work/kernel/common/inc/nv-list-helpers.h:94:19: error: redefinition of ‘list_is_first’
Может быть кто-нибудь видел патч на подобную проблему или сможет сделать подобный патч? Буду весьма признателен.
P.S. Писать багрепорты не имеет особого смысла. Ввиду древности драйвера. Как мне кажется... или надо?
Последний раз редактировалось devilr 16.05.2019 13:09, всего редактировалось 1 раз.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15620
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: nvidia-drivers-390.116-r2

Сообщение Bizdelnick » 12.05.2019 01:17

devilr писал(а):
12.05.2019 00:58
error: redefinition of ‘list_is_first’
А если тупо переименовать? s/\<list_is_first\>/nv_list_is_first/g во всём модуле.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 1726
ОС: Mandriva => Gentoo (~amd64)

Re: nvidia-drivers-390.116-r2

Сообщение devilr » 12.05.2019 01:31

Это я пробовал. Брал пример из патча на более новый драйвер. На этот раз будет другая ошибка:

Код: Выделить всё

/dev/shm/portage/x11-drivers/nvidia-drivers-390.116-r2/work/kernel/nvidia-uvm/uvm8.c:187:14: error: initialization of ‘vm_fault_t (*)(struct vm_fault *)’ {aka ‘unsigned int (*)(struct vm_fault *)’} from incompatible pointer type ‘int (*)(struct vm_fault *)’ [-Werror=incompatible-pointer-types]
Проблема, собственно в том, что я вообще не разбираюсь в драйверах. Если простую программу я починю, то тут - увы...
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4843
ОС: Gentoo

Re: nvidia-drivers-390.116-r2

Сообщение /dev/random » 12.05.2019 01:36

А более новый драйвер точно не подойдёт? Сайт nvidia при выборе GT 630 предлагает скачать 418.74, а не 390.116.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 1726
ОС: Mandriva => Gentoo (~amd64)

Re: nvidia-drivers-390.116-r2

Сообщение devilr » 12.05.2019 01:44

Ну, в какой то момент новые драйвера просто не работали с такой видеокартой. Было ограничение на 390.*. А если просто поставить - был чёрный экран и туча ошибок в dmesg
Впрочем, может сейчас что и изменилось. Посмотрю и сообщу результат.
Добавлено (02:03):
Чудес не произошло. Я не знаю, что именно говорит сайт nvidia, но в /var/log/Xorg.0.log

Код: Выделить всё

[     9.748] (II) Module "ramdac" already built-in
[     9.748] (WW) NVIDIA(0): The NVIDIA GeForce GT 630 GPU installed in this system is
[     9.748] (WW) NVIDIA(0):     supported through the NVIDIA 390.xx Legacy drivers. Please
[     9.748] (WW) NVIDIA(0):     visit http://www.nvidia.com/object/unix.html for more
[     9.748] (WW) NVIDIA(0):     information.  The 418.74 NVIDIA driver will ignore this
[     9.748] (WW) NVIDIA(0):     GPU.  Continuing probe... 
[     9.748] (EE) No devices detected.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 1726
ОС: Mandriva => Gentoo (~amd64)

Re: nvidia-drivers-390.116-r2

Сообщение devilr » 16.05.2019 12:58

Слепил из нескольких патчей один. Вроде работает.
Патч положу сюда, чтобы не потерять.

Код: Выделить всё

--- a/kernel/common/inc/nv-list-helpers.h       2019-01-28 00:12:19.000000000 +0800
+++ b/kernel/common/inc/nv-list-helpers.h       2019-05-07 18:34:16.710188281 +0800
@@ -91,7 +91,7 @@
         list_entry((pos)->member.next, typeof(*(pos)), member)
 #endif
 
-static inline int list_is_first(const struct list_head *list,
+static inline int nv_list_is_first(const struct list_head *list,
                                 const struct list_head *head)
 {
     return list->prev == head;
--- a/kernel/nvidia-drm/nvidia-drm-connector.c  2019-05-07 18:24:26.082167627 +0800
+++ b/kernel/nvidia-drm/nvidia-drm-connector.c  2019-05-07 18:38:06.492196316 +0800
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -201,6 +202,13 @@
     return __nv_drm_connector_detect_internal(connector);
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
+/* Add header constants missing after 5.1 */
+int drm_helper_probe_single_connector_modes(struct drm_connector
+*connector, uint32_t maxX,
+uint32_t maxY);
+#endif
+
 static struct drm_connector_funcs nv_connector_funcs = {
 #if defined NV_DRM_ATOMIC_HELPER_CONNECTOR_DPMS_PRESENT
     .dpms                   = drm_atomic_helper_connector_dpms,
--- a/kernel/nvidia-drm/nvidia-drm-drv.c        2019-05-07 18:26:38.401172254 +0800
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c        2019-05-07 18:40:05.756200486 +0800
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
 
 #include "nvidia-drm-priv.h"
@@ -35,6 +36,14 @@
 #include "nvidia-drm-gem-nvkms-memory.h"
 #include "nvidia-drm-gem-user-memory.h"
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
+/* Add header constants missing after 5.1 */
+void drm_kms_helper_poll_init(struct drm_device *dev);
+void drm_kms_helper_poll_fini(struct drm_device *dev);
+bool drm_helper_hpd_irq_event(struct drm_device *dev);
+void drm_kms_helper_poll_disable(struct drm_device *dev);
+#endif
+
 #if defined(NV_DRM_AVAILABLE)
 
 #include "nvidia-drm-ioctl.h"
--- a/kernel/nvidia-drm/nvidia-drm-encoder.c    2019-05-07 18:28:33.180176268 +0800
+++ b/kernel/nvidia-drm/nvidia-drm-encoder.c    2019-05-07 18:42:10.951204864 +0800
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -31,6 +32,11 @@
 #include "nvidia-drm-crtc.h"
 #include "nvidia-drm-helper.h"
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
+/* Add header constants missing after 5.1 */
+void drm_kms_helper_hotplug_event(struct drm_device *dev);
+#endif
+
 #include <drm/drm_crtc_helper.h>
 
 #include <drm/drm_atomic.h>
@@ -160,6 +166,13 @@
 {
     struct nv_drm_device *nv_dev = to_nv_device(dev);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
+/* Add header constants missing after 5.1 */
+int drm_helper_probe_single_connector_modes(struct drm_connector
+*connector, uint32_t maxX,
+uint32_t maxY);
+#endif
+
     struct NvKmsKapiStaticDisplayInfo *displayInfo = NULL;
     struct NvKmsKapiConnectorInfo *connectorInfo = NULL;
 
--- a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c   2019-05-07 18:29:44.575178764 +0800
+++ b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c   2019-05-07 18:44:44.866210247 +0800
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
 #include "nvidia-drm-conftest.h"
 
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -268,7 +269,11 @@
  */
 
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
 static int nv_drm_vma_fault(struct vm_fault *vmf)
+#else
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
+#endif
 {
     return __nv_drm_vma_fault(vmf->vma, vmf);
 }
--- a/kernel/nvidia-uvm/uvm8.c  2019-01-28 00:12:22.000000000 +0800
+++ b/kernel/nvidia-uvm/uvm8.c  2019-05-07 18:48:51.096218857 +0800
@@ -172,7 +172,11 @@
     return VM_FAULT_SIGBUS;
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
 static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+#else
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+#endif
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -507,7 +511,11 @@
     }
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
 static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+#else
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
+#endif
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault(vmf->vma, vmf);
--- a/kernel/nvidia-uvm/uvm8_range_tree.c       2019-01-28 00:12:23.000000000 +0800
+++ b/kernel/nvidia-uvm/uvm8_range_tree.c       2019-05-07 18:50:18.079221899 +0800
@@ -31,7 +31,7 @@
 
 uvm_range_tree_node_t *uvm_range_tree_prev(uvm_range_tree_t *tree, uvm_range_tree_node_t *node)
 {
-    if (list_is_first(&node->list, &tree->head))
+    if (nv_list_is_first(&node->list, &tree->head))
         return NULL;
     return list_prev_entry(node, list);
 }
--- a/kernel/nvidia-drm/nvidia-drm-drv.c 2019-05-16 12:38:00.788450287 +0300
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c 2019-05-16 12:46:59.711469878 +0300
@@ -21,6 +21,7 @@
  */
 
 #include <linux/version.h>
+#include <stdbool.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
 
 #include "nvidia-drm-priv.h"
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали: