DisplayLink / evdi

Extensible Virtual Display Interface
MIT License
717 stars 187 forks source link

Kernel 5.9 breaks DisplayLink #225

Closed robotard closed 3 years ago

robotard commented 4 years ago

Initially please make sure the problem hasn't been already addressed:

Some information for baseline would help a lot:

Please provide good title for the issue and description. If you can give us logs they will be welcome but please don't paste long listings as they will make it hard to read the thread, instead you can use other services for sharing raw text like pastebin or gist. Also anything that may help to understand the problem will be appreciated (configuration files, screenshots, photos, video capturing the problem).

Thanks!

abucodonosor commented 4 years ago

If you wish I have a testing patch, untested since I don't have any HW to test right now and will only work with a 5.9 kernel.

Patch against latest release:

https://crazy.dev.frugalware.org/evdi-kernel-5.9-test.patch

robotard commented 4 years ago

That’s great. Will test when back home. Guessing it was just a one liner allowing 5.9.x to pass? Or is there more to it?

Sent from my iPhone

On 13 Oct 2020, at 12:06, abucodonosor notifications@github.com wrote:

 If you wish I have a testing patch, untested since I don't have any HW to test right now and will only work with a 5.9 kernel.

Patch against latest release:

https://crazy.dev.frugalware.org/evdi-kernel-5.9-test.patch

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

robotard commented 4 years ago

I see there’s quite a bit more to it 😉

Just a heads up, I’m on AMD Ryzen 7 (Radeon + Nvidia).

Sent from my iPhone

On 13 Oct 2020, at 12:06, abucodonosor notifications@github.com wrote:

 If you wish I have a testing patch, untested since I don't have any HW to test right now and will only work with a 5.9 kernel.

Patch against latest release:

https://crazy.dev.frugalware.org/evdi-kernel-5.9-test.patch

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

abucodonosor commented 4 years ago

@robotard

It is a bit more than a one-liner:).

The Intel workaround is now somewhat strange but it should, in theory, work like this.

robotard commented 4 years ago

Oooof, n00b to patching (can read them, but not applied before)... Where's likely to be the path to my DisplayLink?

Ubuntu... Latest DL from website...

Seeing this:

"patch < '/home/robsta/Downloads/evdi-kernel-5.9-test.patch' can't find file to patch at input line 4 Perhaps you should have used the -p or --strip option? The text leading up to this was:

|diff -Naur evdi-1.8.0/module/evdi_cursor.c evdi-1.8.0-p/module/evdi_cursor.c |--- evdi-1.8.0/module/evdi_cursor.c 2020-07-31 12:07:08.000000000 +0200 |+++ evdi-1.8.0-p/module/evdi_cursor.c 2020-10-12 16:05:56.615556087 +0200

File to patch: "

On Tue, 13 Oct 2020 at 14:49, abucodonosor notifications@github.com wrote:

@robotard https://github.com/robotard

It is a bit more than a one-liner:).

The Intel workaround is now somewhat strange but it should, in theory, work like this.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DisplayLink/evdi/issues/225#issuecomment-707751718, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABB6C4MOMBYUJOKDUHHSGBTSKRLGLANCNFSM4SOANJSA .

displaylink-dkurek commented 4 years ago

@robotard Try with patch -Np1 instead of patch

@abucodonosor You are delivering great patches, as always :+1:, thanks :) Are you interested in creating PR? :)

I've just checked it with evdi master and v1.7.0 tag - compiles fine.

Note: For usage with DisplayLinkManager 5.3.1 please apply it on top of tag v1.7.0 (in v1.8.0 there was API change).

Something like this should work:

# get sources
git clone https://github.com/DisplayLink/evdi.git
cd evdi
git checkout v1.7.0

# patch
curl https://crazy.dev.frugalware.org/evdi-kernel-5.9-test.patch | patch -Np1

# install
make
sudo make install

# reboot
abucodonosor commented 4 years ago

@displaylink-dkurek

I can do an PR.

What is the rule now regarding #ifdef's for kernels?

#if KERNEL_VERSION(X, X, X) <= LINUX_VERSION_CODE
  throw in new code
#else ....

IOW, newest changes first in form of <= ?

displaylink-dkurek commented 4 years ago

Yes, exactly. Please use only KERNEL_VERSION(X, Y, Z) <= LINUX_VERSION_CODE format, newest top. Thanks!

abucodonosor commented 4 years ago

@displaylink-dkurek

Ok done.

https://github.com/DisplayLink/evdi/pull/227

sickcodes commented 4 years ago

Works for the 1.7.0 tag too, thanks @abucodonosor & @displaylink-dkurek!

https://github.com/DisplayLink/evdi/pull/228

Master was 1 ahead of 1.7.0 tag which worked for me too, any reason why tag was one behind, @displaylink-dkurek?

robotard commented 4 years ago

Unfortunately no bueno for me

@robotard Try with patch -Np1 instead of patch

@abucodonosor You are delivering great patches, as always , thanks :) Are you interested in creating PR? :)

I've just checked it with evdi master and v1.7.0 tag - compiles fine.

Note: For usage with DisplayLinkManager 5.3.1 please apply it on top of tag v1.7.0 (in v1.8.0 there was API change).

Something like this should work:

# get sources
git clone https://github.com/DisplayLink/evdi.git
cd evdi
git checkout v1.7.0

# patch
curl https://crazy.dev.frugalware.org/evdi-kernel-5.9-test.patch | patch -Np1

# install
make
sudo make install

# reboot

Thanks again for another swift response :)

Unfortunately no bueno for me here... I dis mention that I'm a Groovy Gorilla (20.10) too right? Here's my kernel info: uname -a Linux robstas-um433iq 5.9.0-050900-generic #202010112230 SMP Sun Oct 11 22:34:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

I've attached the DLSupportTool output for your perusal too, and am more than happy to do any testing you need for both this fix, and anything that I may be able to help with in the future... Am usually close to latest Ubuntu/Kernel versions too :) DLSupportTool_Output_2020-10-15T07:16:25.723360.zip

sickcodes commented 4 years ago

Working on 5.9 with 1.7.0, love you @abucodonosor

git clone https://github.com/DisplayLink/evdi
cd evdi
git checkout -f master
git remote add abucodonosor https://github.com/abucodonosor/evdi.git
git fetch --all
git cherry-pick abucodonosor/issue-225 --no-commit
make

Or

git clone https://github.com/sickcodes/evdi
git checkout -f master
cd evdi
make
displaylink-dkurek commented 4 years ago

@sickcodes Tag v1.7.0 is made on devel branch, and then devel is merged to master. So master has one extra 'merge' commit on it. This is made this way so tagged version is the same commit as we are shipping with DisplayLinkManager.

PathosEthosLogos commented 4 years ago

Working on 5.9 with 1.7.0, love you @abucodonosor

git clone https://github.com/DisplayLink/evdi
cd evdi
git remote add abucodonosor https://github.com/abucodonosor/evdi.git
git fetch --all
git cherry-pick abucodonosor/issue-225 --no-commit
make

Or

git clone https://github.com/sickcodes/evdi
cd evdi
make

I tried both of these methods and it gives me error 2.

cat: /etc/redhat-release: No such file or directory
CFLAGS="-Werror -Wextra -Wall -Wmissing-prototypes -Wstrict-prototypes -Wno-error=missing-field-initializers" make -C module
make -C /lib/modules/5.8.11-1-MANJARO/build M=$PWD
make[2]: Entering directory '/usr/lib/modules/5.8.11-1-MANJARO/build'
make[2]: *** No targets specified and no makefile found.  Stop.
make[2]: Leaving directory '/usr/lib/modules/5.8.11-1-MANJARO/build'
make[1]: *** [Makefile:71: module] Error 2
make: *** [Makefile:13: all] Error 2

I also tried the code block in the comments of https://aur.archlinux.org/packages/displaylink but even the first line sudo pacman -R evdi-git #used -Rns does not seem to work, saying that evdi-git is not found.

abucodonosor commented 4 years ago

@PathosEthosLogos

there is something wrong with your kernel source. You are also compiling against 5.8.11, while that should work just fine with the patch, it should work the same without. The patch only adjusts some API changes for the 5.9 kernel.

bnavigator commented 4 years ago

I also tried the code block in the comments of https://aur.archlinux.org/packages/displaylink but even the first line sudo pacman -R evdi-git #used -Rns does not seem to work, saying that evdi-git is not found.

If you haven't installed evdi-git you don't need to uninstall it.

PathosEthosLogos commented 4 years ago

Yeah I tried installing evdi-git as well, but that didn't work.

I think I'll just install 5.9 kernel. Hopefully other things won't break and hopefully this will work.

bnavigator commented 4 years ago

@PathosEthosLogos, do you understand the commands you are trying to execute? Because if not, please stay away from any AUR package, because you are exposing yourself to a big security risk.

@sickcodes' code block does this:

Note: I do not say, you can't trust @sickcodes, but he is a random person on the internet as anyone else here is.

abucodonosor commented 4 years ago

@bnavigator

Well, you are right but one can compare the fork and the original online even, right now no difference.

@sickcodes

I think you forgot to push something out in your fork? :)

bnavigator commented 4 years ago

@bnavigator

Well, you are right but one can compare the fork and the original online even, right now no difference.

Yes, of course. https://github.com/DisplayLink/evdi/compare/master...sickcodes:master is the same as just examining https://github.com/DisplayLink/evdi/pull/228/files. But if you just replace the repo in the PKGBUILD and don't look at anything, this is dangerous.

@sickcodes

I think you forgot to push something out in your fork? :)

? It's all there, otherwise no PR would have been possible.

sickcodes commented 4 years ago

I forgot to insert the malware 🤪

PathosEthosLogos commented 4 years ago

Haha yeah, I knew all except sed.

But it seems like updating to 5.9 kernel didn't fix it. Same 'Error 2' with some additions.

cat: /etc/redhat-release: No such file or directory
CFLAGS="-Werror -Wextra -Wall -Wmissing-prototypes -Wstrict-prototypes -Wno-error=missing-field-initializers" make -C module 
make -C /lib/modules/5.9.0-1-MANJARO/build M=$PWD
make[2]: Entering directory '/usr/lib/modules/5.9.0-1-MANJARO/build'
  AR      ~/evdi/module/built-in.a
  CC [M]  ~/evdi/module/evdi_drv.o
/home/pathos/evdi/module/evdi_drv.c:94:3: error: 'struct drm_driver' has no member named 'gem_free_object'; did you mean 'gem_open_object'?
   94 |  .gem_free_object = evdi_gem_free_object,
      |   ^~~~~~~~~~~~~~~
      |   gem_open_object
/home/pathos/evdi/module/evdi_drv.c:94:21: error: initialization of 'void (*)(struct drm_device *)' from incompatible pointer type 'void (*)(struct drm_gem_object *)' [-Werror=incompatible-pointer-types]
   94 |  .gem_free_object = evdi_gem_free_object,
      |                     ^~~~~~~~~~~~~~~~~~~~
/home/pathos/evdi/module/evdi_drv.c:94:21: note: (near initialization for 'driver.lastclose')
/home/pathos/evdi/module/evdi_drv.c: In function 'evdi_platform_probe':
/home/pathos/evdi/module/evdi_drv.c:175:20: error: 'struct dev_archdata' has no member named 'iommu'
  175 |  pdev->dev.archdata.iommu = INTEL_IOMMU_DUMMY_DOMAIN;
      |                    ^
cc1: all warnings being treated as errors
make[3]: *** [scripts/Makefile.build:283: /home/pathos/evdi/module/evdi_drv.o] Error 1
make[2]: Leaving directory '/usr/lib/modules/5.9.0-1-MANJARO/build'
make[1]: *** [Makefile:71: module] Error 2
make: *** [Makefile:13: all] Error 2
sickcodes commented 4 years ago

You haven't cherry-picked @abucodonosor's changes yet you're building the DisplayLink/master

abucodonosor commented 4 years ago

I forgot to insert the malware

No, you forgot devel is the default branch. so one need to clone your fork and checkout master :)

abucodonosor commented 4 years ago

@sickcodes

git clone https://github.com/sickcodes/evdi

will clone devel branch, your patch pulled from me doesn't exist in devel so make will fail on a 5.9 kernel:)

abucodonosor commented 4 years ago

@PathosEthosLogos

That error is now different you are missing my patch :)

sickcodes commented 4 years ago

Yeah you're right, need to checkout master first. The AUR PKGBUILD from @bnavigator checks out master so I am missing that in my above comment.

I was supposed to commit to devel tag 1.7.0?

bnavigator commented 4 years ago

I was supposed to commit to devel tag 1.7.0?

No, master is correct. There is no 1.7.0 branch.

bnavigator commented 4 years ago

The AUR PKGBUILD from @bnavigator checks out master so I am missing that in my above comment.

Its not mine. Check https://aur.archlinux.org/packages/evdi-git/ for a list of maintainers. I am preparing a evdi-1.7 package with your patch applied though.

PathosEthosLogos commented 4 years ago

Ah oops -- now cherry picked, but then:

cat: /etc/redhat-release: No such file or directory
make -C module install
make[1]: Entering directory '~/evdi/module'
make -C /lib/modules/5.9.0-1-MANJARO/build M=$PWD INSTALL_MOD_PATH= INSTALL_MOD_DIR=/kernel/drivers/gpu/drm/evdi modules_install
make[2]: Entering directory '/usr/lib/modules/5.9.0-1-MANJARO/build'
  INSTALL ~/evdi/module/evdi.ko
At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: crypto/bio/bss_file.c:69
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: crypto/bio/bss_file.c:76
sign-file: certs/signing_key.pem: No such file or directory
  DEPMOD  5.9.0-1-MANJARO

Now SSL error... why?

bnavigator commented 4 years ago

@PathosEthosLogos building on Arch/Manjaro without a PKGBUILD requires you to prepare everything yourself. Adjust evdi-git yourself according to the instructions or wait on the evdi-1.7 package.

abucodonosor commented 4 years ago

@PathosEthosLogos

probably because Manjaro wants to sign the modules by default if they don't enforce that you can ignore the SSL warnings/errors.

However, I don't have any idea what Arch/Manjaro is doing but I guess @bnavigator and @sickcodes can help :)

sickcodes commented 4 years ago

The AUR PKGBUILD from @bnavigator checks out master so I am missing that in my above comment.

Its not mine. Check https://aur.archlinux.org/packages/evdi-git/ for a list of maintainers. I am preparing a evdi-1.7 package with your patch applied though.

Good idea! It's @abucodonosor patch btw, I'm just the cherry-picking backporter 😆

bnavigator commented 4 years ago

https://aur.archlinux.org/packages/evdi-1.7 is ready.

sickcodes commented 4 years ago

@bnavigator Great! You gonna change it as the requirement on DisplayLink too?

bnavigator commented 4 years ago

@bnavigator Great! You gonna change it as the requirement on DisplayLink too?

You mean to explicitly require the evdi-1.7 package? I would rather not. evdi-git or evdi could get updated and provide the patch too.

dummys commented 4 years ago

hey guys,

Thanks for the hard work. On my Arch linux box with latest kernel in the package, I still can't restart lightdm when displaylink is started.

when I connect displaylink, I can switch to the screen, whitout problem, but when restarting lightdm, no more screen, and huge crash in the journalctl. I tried connecting usb before boot, same problem. I tried switching back to the laptop screen before restarting lightdm, same problem, lightdm wont start anymore. My kernel version is: 5.8.14-arch1-1 and evdi 1.7

Do you have such problem ?

bnavigator commented 4 years ago

On my Arch linux box with latest kernel in the package,

My kernel version is: 5.8.14-arch1-1 and evdi 1.7

I thought we are talking about kernel 5.9 now? ~Did you restart yet?~

Edit: Ah, Arch stable is still on 5.8.14, only Manjaro created all this fuzz about the new kernel.

robotard commented 4 years ago

Now, I know that my above post was opened as Kernel and DL versions, but I'm a Groovy Gorilla Ubuntu guy, so a lot of the commands don't apply too well for me...

Is there a version agnostic patch available, so after testing on 5.9 I can then still boot back into 5.8.14 and use my extra screen?

Have given my DL Logger output above...

robotard commented 4 years ago

Also, did we not begin here with a patch file rather than a switch of repository for EVDI?

Now I've not been playing around with DisplayLink for a while, but I remember that @AdnanHodzic brought together a bunch of patches (https://github.com/AdnanHodzic/) prior to when the current DisplayLink build did not play nicely with Ubuntu... It worked very well, and was back then superceded by a new official DisplayLink Build...

There were issues when patching relating to Kernel versions breaking bits and pieces, so can't see why we couldn't put together a universal patch, and then after testing, get that pushed into the actual EVDI repo (avoiding other repos)?

I've raised this thread across there discussing the original patch as the item of work, as they have a great team together... https://github.com/AdnanHodzic/displaylink-debian/issues/474

abucodonosor commented 4 years ago

@robotard

I have no idea what do you mean with a 'universal patch'. The patch and the PR https://github.com/DisplayLink/evdi/pull/227 is against official evdi code.

If you mean 'distribution' packages/packaging with the patch/PR this is up2 whoever maintains the package.

bnavigator commented 4 years ago

Is there a version agnostic patch available, so after testing on 5.9 I can then still boot back into 5.8.14 and use my extra screen?

The evdi kernel module has to be compiled for every kernel version. But you can also compile the module for 5.8, because #227 and #228 use preprocessor macros like #if KERNEL_VERSION(5, 9, 0) <= LINUX_VERSION_CODE.

bnavigator commented 4 years ago

@robotard

(untested) instructions for Ubuntu:

  1. get and unzip the DisplayLink package and extract the inner archive

    $ unzip 'DisplayLink USB Graphics Software for Ubuntu 5.3.1.zip'
    $ chmod +x displaylink-driver-5.3.1.34.run
    $ ./displaylink-driver-5.3.1.34.run --noexec --keep
  2. get evdi 1.7 and patch it with #228 or clone directly

     $ wget https://github.com/DisplayLink/evdi/archive/v1.7.0.tar.gz
     $ tar xf v1.7.0.tar.gz
     $ pushd evdi-1.7.0
     $ wget https://github.com/DisplayLink/evdi/pull/228.patch
     $ patch -p1 < 228.patch
     $ popd

    or

     $ git clone https://github.com/DisplayLink/evdi.git evdi-1.7.0
     $ pushd evdi-1.7.0
     $ git fetch origin pull/228/head
     $ git checkout -b pr228 FETCH_HEAD
     $ popd
  3. replace evdi

    $ rm displaylink-driver-5.3.1.34/evdi.tar.gz
    $ pushd evdi-1.7.0
    $ tar cf evdi.tar.gz *
    $ cp evdi.tar.gz ../displaylink-driver-5.3.1.34/
    $ popd
  4. install displaylink

    $ cd displaylink-driver-5.3.1.34
    $ sudo ./displaylink-installer.sh install
robotard commented 4 years ago

Thanks for further instructions. These seem more rounded than in the earlier post that I had replied to.

Will let you know the outcome...

Sent from my iPhone

On 17 Oct 2020, at 11:34, Ben Greiner notifications@github.com wrote:

 @robotard

(untested) instructions for Ubuntu:

get and unzip the DisplayLink package and extract the inner archive

$ unzip 'DisplayLink USB Graphics Software for Ubuntu 5.3.1.zip' $ chmod +x displaylink-driver-5.3.1.34.run $ ./displaylink-driver-5.3.1.34.run --noexec --keep get evdi 1.7 and patch it with #228 or clone directly

$ wget https://github.com/DisplayLink/evdi/archive/v1.7.0.tar.gz $ tar xf v1.7.0.tar.gz $ pushd evdi-1.7.0 $ wget https://github.com/DisplayLink/evdi/pull/228.patch $ patch -p1 < 228.patch $ popd or

$ git clone https://github.com/DisplayLink/evdi.git evdi-1.7.0 $ pushd evdi-1.7.0 $ git fetch origin pull/228/head $ git checkout -b pr228 FETCH_HEAD $ popd replace evdi

$ rm displaylink-driver-5.3.1.34/evdi.tar.gz $ pushd evdi-1.7.0 $ tar cf evdi.tar.gz * $ cp evdi.tar.gz ../displaylink-driver-5.3.1.34/ $ popd install displaylink

$ cd displaylink-driver-5.3.1.34 $ sudo ./displaylink-installer.sh install — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

sickcodes commented 4 years ago

$ wget https://github.com/DisplayLink/evdi/pull/228.patch

Woahhhh did not know you could download PR's as patches, that's awesome

robotard commented 4 years ago

I did not... That's wicked sick!

Thanks bro!

On Sat, 17 Oct 2020 at 17:40, sickcodes notifications@github.com wrote:

$ wget https://github.com/DisplayLink/evdi/pull/228.patch

Woahhhh did not know you could download PR's as patches, that's awesome

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DisplayLink/evdi/issues/225#issuecomment-711042628, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABB6C4M6DOPPLXC6GO5OTEDSLHCIDANCNFSM4SOANJSA .

robotard commented 4 years ago

Is there a way to get around the "Xorg is running" reboot loop?

On Sun, 18 Oct 2020 at 04:11, Rob Hendricks robstahendricks@gmail.com wrote:

I did not... That's wicked sick!

Thanks bro!

On Sat, 17 Oct 2020 at 17:40, sickcodes notifications@github.com wrote:

$ wget https://github.com/DisplayLink/evdi/pull/228.patch

Woahhhh did not know you could download PR's as patches, that's awesome

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DisplayLink/evdi/issues/225#issuecomment-711042628, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABB6C4M6DOPPLXC6GO5OTEDSLHCIDANCNFSM4SOANJSA .

robotard commented 4 years ago

Ok, booted without GDM and installed... Still no joy... Here are my DLSupport logs...

On Sun, 18 Oct 2020 at 04:26, Rob Hendricks robstahendricks@gmail.com wrote:

Is there a way to get around the "Xorg is running" reboot loop?

On Sun, 18 Oct 2020 at 04:11, Rob Hendricks robstahendricks@gmail.com wrote:

I did not... That's wicked sick!

Thanks bro!

On Sat, 17 Oct 2020 at 17:40, sickcodes notifications@github.com wrote:

$ wget https://github.com/DisplayLink/evdi/pull/228.patch

Woahhhh did not know you could download PR's as patches, that's awesome

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DisplayLink/evdi/issues/225#issuecomment-711042628, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABB6C4M6DOPPLXC6GO5OTEDSLHCIDANCNFSM4SOANJSA .

robotard commented 4 years ago

Ah, just noticed this: patch -pl < 228.patch patch: **** strip count l is not a number

On Sun, 18 Oct 2020 at 05:26, Rob Hendricks robstahendricks@gmail.com wrote:

Ok, booted without GDM and installed... Still no joy... Here are my DLSupport logs...

On Sun, 18 Oct 2020 at 04:26, Rob Hendricks robstahendricks@gmail.com wrote:

Is there a way to get around the "Xorg is running" reboot loop?

On Sun, 18 Oct 2020 at 04:11, Rob Hendricks robstahendricks@gmail.com wrote:

I did not... That's wicked sick!

Thanks bro!

On Sat, 17 Oct 2020 at 17:40, sickcodes notifications@github.com wrote:

$ wget https://github.com/DisplayLink/evdi/pull/228.patch

Woahhhh did not know you could download PR's as patches, that's awesome

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DisplayLink/evdi/issues/225#issuecomment-711042628, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABB6C4M6DOPPLXC6GO5OTEDSLHCIDANCNFSM4SOANJSA .

robotard commented 4 years ago

ignore... used i instead of 1...

Doesn't appear to want to play ball... See above logs