@@ -72,6 +72,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
file://0001-tools-Work-around-broken-stdin-handling-in-home-made.patch \
file://0001-gatt-client-Fix-use-after-free-caused-by-reentrant-c.patch \
file://0001-transport-Fix-set-volume-failure-with-invalid-device.patch \
+ file://0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch \
"
S = "${UNPACKDIR}/bluez-${PV}"
new file mode 100644
@@ -0,0 +1,118 @@
+From 646014a6a246fe99df27da12d2de7bcd2e04d0df Mon Sep 17 00:00:00 2001
+From: Wei Deng <wei.deng@oss.qualcomm.com>
+Date: Thu, 4 Jun 2026 15:00:24 +0530
+Subject: [PATCH] profile: Set L2CAP IMTU for OBEX profile listeners
+
+The default_settings entries for OBEX profiles (OPP, FTP, PBAP, MAS,
+MNS) have no imtu field, so ext_start_servers() creates the L2CAP
+listening socket without an explicit IMTU. This causes the socket to
+advertise the L2CAP minimum of 672 bytes in L2CAP_CONFIGURATION_RSP,
+limiting the peer's outgoing PDU size and degrading Rx throughput.
+
+Add an imtu field to default_settings and set it to 32767 for all
+OBEX profiles that use L2CAP. Copy the value in ext_set_defaults()
+and apply it to the listening socket via bt_io_set() after
+bt_io_listen() succeeds.
+
+Signed-off-by: Wei Deng <wei.deng@oss.qualcomm.com>
+Upstream-Status: Backport [https://github.com/bluez/bluez/commit/646014a6a246fe99df27da12d2de7bcd2e04d0df]
+---
+ src/profile.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/src/profile.c b/src/profile.c
+index dfc5f7161..65df0f7a0 100644
+--- a/src/profile.c
++++ b/src/profile.c
+@@ -55,6 +55,8 @@
+ #define MAS_DEFAULT_CHANNEL 16
+ #define MNS_DEFAULT_CHANNEL 17
+
++#define BT_RX_MTU 32767
++
+ #define BTD_PROFILE_PSM_AUTO -1
+ #define BTD_PROFILE_CHAN_AUTO -1
+
+@@ -678,6 +680,7 @@ struct ext_profile {
+
+ uint16_t version;
+ uint16_t features;
++ uint16_t imtu;
+
+ GSList *records;
+ GSList *servers;
+@@ -1423,6 +1426,9 @@ static uint32_t ext_start_servers(struct ext_profile *ext,
+ if (psm == 0)
+ bt_io_get(io, NULL, BT_IO_OPT_PSM, &psm,
+ BT_IO_OPT_INVALID);
++ if (ext->imtu)
++ bt_io_set(io, NULL, BT_IO_OPT_IMTU, ext->imtu,
++ BT_IO_OPT_INVALID);
+ l2cap->io = io;
+ l2cap->proto = BTPROTO_L2CAP;
+ l2cap->psm = psm;
+@@ -2075,6 +2081,7 @@ static struct default_settings {
+ struct ext_io *rfcomm);
+ uint16_t version;
+ uint16_t features;
++ uint16_t imtu;
+ } defaults[] = {
+ {
+ .uuid = SPP_UUID,
+@@ -2142,6 +2149,7 @@ static struct default_settings {
+ .authorize = false,
+ .get_record = get_opp_record,
+ .version = 0x0102,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_FTP_UUID,
+ .name = "File Transfer",
+@@ -2151,6 +2159,7 @@ static struct default_settings {
+ .authorize = true,
+ .get_record = get_ftp_record,
+ .version = 0x0103,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_SYNC_UUID,
+ .name = "Synchronization",
+@@ -2167,6 +2176,7 @@ static struct default_settings {
+ .authorize = true,
+ .get_record = get_pse_record,
+ .version = 0x0101,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_PCE_UUID,
+ .name = "Phone Book Access Client",
+@@ -2182,7 +2192,8 @@ static struct default_settings {
+ .mode = BT_IO_MODE_ERTM,
+ .authorize = true,
+ .get_record = get_mas_record,
+- .version = 0x0100
++ .version = 0x0100,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_MNS_UUID,
+ .name = "Message Notification",
+@@ -2191,7 +2202,8 @@ static struct default_settings {
+ .mode = BT_IO_MODE_ERTM,
+ .authorize = true,
+ .get_record = get_mns_record,
+- .version = 0x0104
++ .version = 0x0104,
++ .imtu = BT_RX_MTU,
+ },
+ };
+
+@@ -2249,6 +2261,9 @@ static void ext_set_defaults(struct ext_profile *ext)
+ if (settings->features)
+ ext->features = settings->features;
+
++ if (settings->imtu)
++ ext->imtu = settings->imtu;
++
+ if (settings->name)
+ ext->name = g_strdup(settings->name);
+ }
+--
+2.34.1
+
Backport upstream fix that adds an imtu field to default_settings for OBEX profiles (OPP, FTP, PBAP, MAS, MNS) and applies it to the L2CAP listening socket via bt_io_set(). Without this, the listening socket advertises the L2CAP minimum of 672 bytes in L2CAP_CONFIGURATION_RSP, limiting the peer's outgoing PDU size and degrading Rx throughput. Upstream-Status: Backport [bluez/bluez@646014a] Signed-off-by: Wei Deng <wei.deng@oss.qualcomm.com> --- meta/recipes-connectivity/bluez5/bluez5.inc | 1 + ...2CAP-IMTU-for-OBEX-profile-listeners.patch | 118 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 meta/recipes-connectivity/bluez5/bluez5/0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch