sudo pacman -Syu base-devel devtools
. This will pull in the necessary dependencies to build Arch packages.pkgctl repo clone --protocol=https linux
. This will grab the PKGBUILD for thelinux
package. There should now be alinux
folder in your current directory.- Visit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=1c3366abdbe884 and download the patch by right-clicking the "patch" link next to the commit id and save as.
- Place the downloaded patch into the
linux
folder. It should be namedd39a2734bf6221a1a4fe42eea1dd6a17f08ebf5b..1c3366abdbe884be62e5a7502b4db758aa3974c6.patch
, but it really doesn't matter what you name it. - Add that patch file name as another line in the
source=()
section. This tells the PKGBUILD to include the patch as a source file for the build. - Add an extra
'SKIP'
line as the last entry in both thesha256sums=()
andb2sums=()
sections. This tells makepkg to not do checksums on the patch file. You could use thesha256sum
andb2sum
commands on the patch file to generate those sums, but since you're manually downloading it, you don't really need to check it for validity. makepkg -Cs
. Build the packages.- You may run into some GPG key signing issues like I did. You'll need to add Greh Kroah -Hartman (kernel maintainer) and Jan Alexander Steffen's (Arch maintainer) keys. Locate keys with
gpg2 --locate-keys [username]@kernel.org
and add them usinggpg --recv-keys <key id>
. After you build, you can safely remove them if you want. - After packages are built, they'll be in the
linux
folder. Install them withsudo pacman -U <pkgfile>
Last active
April 1, 2024 16:41
-
-
Save diffficult/21c5f3d41ae198695f55891da53ee561 to your computer and use it in GitHub Desktop.
Patching Linux Kernel 6.8.2 to solve BT issues
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 1c3366abdbe884be62e5a7502b4db758aa3974c6 Mon Sep 17 00:00:00 2001 | |
From: Luiz Augusto von Dentz <[email protected]> | |
Date: Tue, 26 Mar 2024 12:43:17 -0400 | |
Subject: Bluetooth: hci_sync: Fix not checking error on | |
hci_cmd_sync_cancel_sync | |
hci_cmd_sync_cancel_sync shall check the error passed to it since it | |
will be propagated using req_result which is __u32 it needs to be | |
properly set to a positive value if it was passed as negative othertise | |
IS_ERR will not trigger as -(errno) would be converted to a positive | |
value. | |
Fixes: 63298d6e752f ("Bluetooth: hci_core: Cancel request on command timeout") | |
Signed-off-by: Luiz Augusto von Dentz <[email protected]> | |
Reported-and-tested-by: Thorsten Leemhuis <[email protected]> | |
Closes: https://lore.kernel.org/all/[email protected]/ | |
--- | |
net/bluetooth/hci_core.c | 6 +++--- | |
net/bluetooth/hci_sync.c | 5 ++++- | |
2 files changed, 7 insertions(+), 4 deletions(-) | |
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c | |
index 1690ae57a09db..a7028d38c1f5c 100644 | |
--- a/net/bluetooth/hci_core.c | |
+++ b/net/bluetooth/hci_core.c | |
@@ -2874,7 +2874,7 @@ static void hci_cancel_cmd_sync(struct hci_dev *hdev, int err) | |
cancel_delayed_work_sync(&hdev->ncmd_timer); | |
atomic_set(&hdev->cmd_cnt, 1); | |
- hci_cmd_sync_cancel_sync(hdev, -err); | |
+ hci_cmd_sync_cancel_sync(hdev, err); | |
} | |
/* Suspend HCI device */ | |
@@ -2894,7 +2894,7 @@ int hci_suspend_dev(struct hci_dev *hdev) | |
return 0; | |
/* Cancel potentially blocking sync operation before suspend */ | |
- hci_cancel_cmd_sync(hdev, -EHOSTDOWN); | |
+ hci_cancel_cmd_sync(hdev, EHOSTDOWN); | |
hci_req_sync_lock(hdev); | |
ret = hci_suspend_sync(hdev); | |
@@ -4210,7 +4210,7 @@ static void hci_send_cmd_sync(struct hci_dev *hdev, struct sk_buff *skb) | |
err = hci_send_frame(hdev, skb); | |
if (err < 0) { | |
- hci_cmd_sync_cancel_sync(hdev, err); | |
+ hci_cmd_sync_cancel_sync(hdev, -err); | |
return; | |
} | |
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c | |
index 639090b9f4b85..8fe02921adf15 100644 | |
--- a/net/bluetooth/hci_sync.c | |
+++ b/net/bluetooth/hci_sync.c | |
@@ -617,7 +617,10 @@ void hci_cmd_sync_cancel_sync(struct hci_dev *hdev, int err) | |
bt_dev_dbg(hdev, "err 0x%2.2x", err); | |
if (hdev->req_status == HCI_REQ_PEND) { | |
- hdev->req_result = err; | |
+ /* req_result is __u32 so error must be positive to be properly | |
+ * propagated. | |
+ */ | |
+ hdev->req_result = err < 0 ? -err : err; | |
hdev->req_status = HCI_REQ_CANCELED; | |
wake_up_interruptible(&hdev->req_wait_q); | |
-- | |
cgit 1.2.3-korg | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment