Page 1 of 1

blackmagic-14.2.1a1 not compiled over DKMS with kernel 6.4.0

PostPosted: Tue Oct 01, 2024 2:00 pm
by lemurcard
blackmagic-io is fine but blackmagic kernel module failing in compile over dkms

uname -a
Linux host 6.4.0-150600.23.22-default #1 SMP PREEMPT_DYNAMIC Fri Sep 13 10:42:50 UTC 2024 (5c05eeb) x86_64

DKMS make.log for blackmagic-14.2.1a1 for kernel 6.4.0-150600.23.22-default (x86_64)
Tue Oct 1 01:20:25 PM CEST 2024
touch .bmd-support.o.cmd
make -C /lib/modules/6.4.0-150600.23.22-default/build M=/var/lib/dkms/blackmagic/14.2.1a1/build
make[1]: Entering directory '/usr/src/linux-6.4.0-150600.23.22-obj/x86_64/default'
CC [M] /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_serial.o
CC [M] /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_core.o
CC [M] /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_lib.o
CC [M] /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_gate.o
CC [M] /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_dma.o
COPY /var/lib/dkms/blackmagic/14.2.1a1/build/bmd-support.o
/var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_lib.c: In function ‘dl_get_user_pages’:
/var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_lib.c:686:10: error: too many arguments to function ‘get_user_pages’
ret = get_user_pages((unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages, NULL);
^~~~~~~~~~~~~~
In file included from /usr/src/linux-6.4.0-150600.23.22/include/linux/scatterlist.h:8:0,
from /usr/src/linux-6.4.0-150600.23.22/include/linux/dmapool.h:14,
from /usr/src/linux-6.4.0-150600.23.22/include/linux/pci.h:1666,
from /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_lib.c:30:
/usr/src/linux-6.4.0-150600.23.22/include/linux/mm.h:2457:6: note: declared here
long get_user_pages(unsigned long start, unsigned long nr_pages,
^~~~~~~~~~~~~~
make[2]: *** [/usr/src/linux-6.4.0-150600.23.22/scripts/Makefile.build:252: /var/lib/dkms/blackmagic/14.2.1a1/build/blackmagic_lib.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [../../../linux-6.4.0-150600.23.22/Makefile:2066: /var/lib/dkms/blackmagic/14.2.1a1/build] Error 2
make[1]: Leaving directory '/usr/src/linux-6.4.0-150600.23.22-obj/x86_64/default'
make: *** [Makefile:44: all] Error 2


problematic funcion is - too many arguments to function ‘get_user_pages’
ret = get_user_pages((unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages, NULL);

Re: blackmagic-14.2.1a1 not compiled over DKMS with kernel 6

PostPosted: Fri Oct 11, 2024 4:44 am
by Cameron Nichols
Hi Petr,

Please be aware that Linux kernel 6.4 is supported as early as Desktop Video 12.5. The extension -150600.23.22-default, suggests that it is distribution packaged kernel, which I believe is OpenSUSE 15.6? Please be aware that OpenSUSE is not a tested distribution for Desktop Video releases.

That said, you should be able to patch the blackmagic module sources and rebuild as follows:

As su, modify /usr/src/blackmagic-14.2.1a1/blackmagic_lib.c in editor. Replace lines 679-683:
Code: Select all
#if KERNEL_VERSION_OR_LATER(6, 5, 0)
      if (current_task == current)
         ret = get_user_pages((unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages);
      else
         ret = get_user_pages_remote(current_task->mm, (unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages, NULL);
with:
Code: Select all
#if KERNEL_VERSION_OR_LATER(6, 4, 0)
      if (current_task == current)
         ret = get_user_pages((unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages);
      else
         ret = get_user_pages_remote(current_task->mm, (unsigned long)ptr & PAGE_MASK, *nr_pages, write ? FOLL_WRITE : 0, pages, NULL, NULL);
Then rebuild the blackmagic module with:
Code: Select all
$ sudo dkms build -m blackmagic -v 14.2.1a1
$ sudo dkms install -m blackmagic -v 14.2.1a1
Please be aware that these steps are specific to OpenSUSE 15.6. This change is not portable and will likely cause build issues with other distributions.

Regards
Cameron