From patchwork Sun Mar 30 12:23:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 14032921 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1CF51E4AB; Sun, 30 Mar 2025 12:23:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337440; cv=pass; b=d5CqOulj3hkN6o5FNxR0ptN7MXVwBtK1dy6BRJ3IxIxtiUFTthq1uhcnDYBguGIhVspYh7B34YGtTKdJwJBRo6dCSGXVvAANyUV6MxdRbJ8rqqX91iS5jByAGOdjr4kgPvUmjhfKMyNAGqDUeGECIH3jMssOnBgmfNRa2JZeXvg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337440; c=relaxed/simple; bh=IXWeVNUrDwiVLsyEdQ+VN9pOIe6FAnFmLtT5lPuMAqU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ppUBAFNXL4uvPB64dYpeCedZFJWFQw7+TiMoqHs/45zH/bLJMN3gyNnjOl5V+5HsuzLzxaj1IMChBesvynvPVDF1nrhkl8FWBCQE/UX0C4o+mAxh/2m/qzTEGfpCkwThuVRFBANDSfOS9X7LMQN0Zij4ibDxu8ZPOkJSIRhtsf4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=ULEoh+5A; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="ULEoh+5A" Received: from monolith.lan (unknown [193.138.7.178]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4ZQYMq0WqZz49QBV; Sun, 30 Mar 2025 15:23:50 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337432; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5iXUua0n2qyPzavE1+BdybGcZSsXWYWL87EJRkEHnm8=; b=ULEoh+5AH6+MHwMyi9PcNk9mKsXF9NowBN2Ohbu9lga83k+JE43AVgEAQsU9672YrZ4Lx4 s7R1jyYdPLlkQ0BpuPNguT4lYI9ZQHru4nNnUZ8XK6i+dlTSHJVXpS2b+KxGstiJ4K/gAm Zna1t0xIwb4FBJ420YuYss/lbY7Cxsw4k9XyVApB39/f3QKs27AojnDzD+VKfYmZcTjy49 Y3+Guz8f7+uKa3HZ/aEuQVrzjtOvH55LQ1DpVagsS0k/60fPix912I0RZNNS0rjZ+fgfQm mC/179Lskz9WNHbkd9KgFrzpL8oydhw+oi6356CkoMplf+HNPG4zDCzGHUddMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337432; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5iXUua0n2qyPzavE1+BdybGcZSsXWYWL87EJRkEHnm8=; b=nhnQb1qU5g/B02s/rFW/A4E+sQPfU/uoOHpmRbbVxJ1qDXgOAp/+kdY6RV/oP7rXxisSC1 YjpB+h5hpse/kF04PbQaYHRD5eZ0R0c5F+Y/gQOPFMRZJL3RLaHNM3iTZamu5svqPeLs3O d57i+hydKoutxD2x+3tNsq23/vVZvcBFkWwyCgBh/75gx5QeVAv/vusKvSunw/EvcDAnkB IHiru30JAKweYb96zW3kbPtZmJQHf5GQmfh8IP5Esi67xgkFC8LwoM++5M4bJ6g9REJsCw o6GuCQwllWmv4XInIs/IF7dpkJkHV4G+ojwb/dOkkUVpGnyITI0tw0QzwlCONQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1743337432; a=rsa-sha256; cv=none; b=U80OMiRKKvL6HcmR75FWKsTCZnrGCYK7FMfSse84dx0waTA2EusVTaNGvKPGijJEXFSBqn mkhjYn8ZyKezlvC67svzW+DxzZIbfg6l3aJppIzu9cjiNMS3pj+op4LjZIcAy467hm3eLq lq6RdWNy1A6bYSfdyssetxjgyK0s1RxZyKUAGOWCYgRPENNrhkttEmapfjCYoS8kTKLRSw hqB7oQUWytDPYstP9vyVZ52aFpAWEvgeXXwx/u1z3+mF7uu5qZrdmef3EY8ycBaNXfw025 XPjSkaWfxJANsp7qkKvfkOXnPKxKfyX4aMtYCXg76FWH0FpRKAh0JPzbu5lcYA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen , netdev@vger.kernel.org, bpf@vger.kernel.org, willemdebruijn.kernel@gmail.com, kerneljasonxing@gmail.com Subject: [PATCH 1/3] bpf: Add BPF_SOCK_OPS_TSTAMP_COMPLETION_CB callback Date: Sun, 30 Mar 2025 15:23:36 +0300 Message-ID: <256cac73a03d6c46b81766db0a1c67cd3220b8f5.1743337403.git.pav@iki.fi> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Support SCM_TSTAMP_COMPLETION case for bpf timestamping. Add a new sock_ops callback, BPF_SOCK_OPS_TSTAMP_SND_SW_CB. This callback shall occur at the same timestamping point as the user space's software SCM_TSTAMP_COMPLETION. The BPF program can use it to get the same SCM_TSTAMP_COMPLETION timestamp without modifying the user-space application. Emitting BPF completion timestamps is enabled in separate patches. Signed-off-by: Pauli Virtanen --- include/uapi/linux/bpf.h | 5 +++++ net/core/skbuff.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index defa5bb881f4..6cd918febcb3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7054,6 +7054,11 @@ enum { * sendmsg timestamp with corresponding * tskey. */ + BPF_SOCK_OPS_TSTAMP_COMPLETION_CB, /* Called on skb completion + * report from hardware when + * SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 6cbf77bc61fc..9b2ff115eaf5 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5552,6 +5552,9 @@ static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, case SCM_TSTAMP_ACK: op = BPF_SOCK_OPS_TSTAMP_ACK_CB; break; + case SCM_TSTAMP_COMPLETION: + op = BPF_SOCK_OPS_TSTAMP_COMPLETION_CB; + break; default: return; } From patchwork Sun Mar 30 12:23:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 14032922 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DBAE158A13; Sun, 30 Mar 2025 12:24:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337446; cv=pass; b=HwQZiL3QpSRR49IJ0ZEru4oiJqbZYivlByeVAbyW/WufTs5mPJviQuO6FkoA3X+6Hz6pHcgsIkKfJzZQR2f2q1FCJBDKSlJcBbQXqpvcgjEqpQH3OwuXllN50ULGe7oA1tHOqnfLGDsvt/XdZ315a9FFuqd8iB84WkCsJXGLg1w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337446; c=relaxed/simple; bh=SGD5O0nr6VC6fbVT1etVdb3PMfIKF7sy2ecIqezxLfA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b47cG+T/BOcf+0fRxZVoVPGQtvwTeSdELPDMuFJ3pvbe/hBDPSAnum+qmGjAuwXVQWZc8AdNzYrY33eGEu7FJFElFO5sPma3/gucNRsRP9ux4JB5T2/ikUUjg9Bujv6xoTlbmsCq12UVNdwVTPiKHUyqRI6r4oRheTsEJaXOzzI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=USRgcXdD; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="USRgcXdD" Received: from monolith.lan (unknown [193.138.7.178]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4ZQYMw5y8xz49QB9; Sun, 30 Mar 2025 15:23:56 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337438; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RGk790DxeR6uG6Xv1mTCCd3mPVISN0jmLoUn7FXY/PA=; b=USRgcXdDb/njzFsAUDq8GL97BdDGtYhunEk5Lb46d6o4TGyESl4G8TlPAvAqPLe0i7Ego/ JSVlGbLAB9aNiAUOpvhTny/gUyhl4gS6/Mg9vHqInx18r0xPcPUiUs1VJnxK6a52m9zOoI rErfcL8Ytdq86kn4R4sL6EeLB6ECSnzZRyIKUloiJDi/SdLuHxrQ01HPGfvr47J4tzxGme bi9vPDeIe/kMrUizGBODtLVDXafQxkO1QIX21ApdBMmepZckOzxJjYzsud++x/nR1L2O5R zfHYg57o7f9BKY0mEMKsnmfR0JTbnm1XAfRhwt5HrMTM64Mwr/xsnize02T4Ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337438; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RGk790DxeR6uG6Xv1mTCCd3mPVISN0jmLoUn7FXY/PA=; b=iqq3sYfCWEM66p+OyAc6bxjtvTqeGK5YkvGxr8YGKVj/iIKIF8xdZM5x9wxq71HhkoJzgr NwY/w/Lmo3qAJK/2EAAJ3hZp2abVcSWPOD19h9+z3+Kgexv6RA1E3XL1LfQEI3yrXzDhRT MMF6hGaCJ8o5ixNY2M5uOe5OBv7d5vsgI20/Ht37H36O73ggDK4SOqgPCswTG0e/USWqul vSPb3sI/4+6kw3lB+ZMWPGdv9RoKWVKQXAr2YXppq4W2xLOnVWrNzzMal+LJ4wzxgIjqRo OvqD+A50i3NU9EyPRD79h2WUIxo26xVfHuQq6FAvCxWbG02NT6tbVDhp0tdjrQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1743337438; a=rsa-sha256; cv=none; b=cZ8ZBV9wHJUdbbwdUEis9P5U5Trk9FJs2BmmURi6PQOi7BcGXPdFwLrhEMcuiDlLZxu2Aa l8d7l6fpyftg+q85W3ce1QkyiaR0ytfAhls64SyR/bjBFxCF4bgI+ZWmjmrVAuHRidgBvZ xtZDHTK8omM+dNeOyMB9tBqDCLLr+dVa8LlM90aWEY2xdbczNjBHw308e3Tau0GVZwLfat MRvTeXOrk/DdqqNej1GXmRTMwBpN6eOxMEHDokU1GF3q15PwlY+KVmnUQU/cTuXyl0s3Oa qokUHI96IS+lp2DpMK0Uq/3OdMGQf1XOmoL38hJtLbG8aEWheHpTGx5zDMXUJw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen , netdev@vger.kernel.org, bpf@vger.kernel.org, willemdebruijn.kernel@gmail.com, kerneljasonxing@gmail.com Subject: [PATCH 2/3] [RFC] bpf: allow non-TCP skbs for bpf_sock_ops_enable_tx_tstamp Date: Sun, 30 Mar 2025 15:23:37 +0300 Message-ID: <4c44029f32c3e6d5e3190e1f5687a604ebeafdff.1743337403.git.pav@iki.fi> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Change bpf_sock_ops_enable_tx_tstamp() kfunc to only set SKBTX_BPF flag, so that it can be used also for non-TCP skbs. Do not set TCP-specific fields if the socket is not TCP. *** Doing it this way requires a valid tskey is set by the socket family, before BPF_SOCK_OPS_TSTAMP_SENDMSG_CB. Alternatively, it maybe could be hardcoded per socket type here, or some new proto_ops added. --- net/core/filter.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index 46ae8eb7a03c..1300b0ef3620 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -12127,6 +12127,7 @@ __bpf_kfunc int bpf_sk_assign_tcp_reqsk(struct __sk_buff *s, struct sock *sk, __bpf_kfunc int bpf_sock_ops_enable_tx_tstamp(struct bpf_sock_ops_kern *skops, u64 flags) { + struct sock *sk; struct sk_buff *skb; if (skops->op != BPF_SOCK_OPS_TSTAMP_SENDMSG_CB) @@ -12135,10 +12136,17 @@ __bpf_kfunc int bpf_sock_ops_enable_tx_tstamp(struct bpf_sock_ops_kern *skops, if (flags) return -EINVAL; + sk = skops->sk; + if (!sk) + return -EINVAL; + skb = skops->skb; skb_shinfo(skb)->tx_flags |= SKBTX_BPF; - TCP_SKB_CB(skb)->txstamp_ack |= TSTAMP_ACK_BPF; - skb_shinfo(skb)->tskey = TCP_SKB_CB(skb)->seq + skb->len - 1; + + if (sk_is_tcp(sk)) { + TCP_SKB_CB(skb)->txstamp_ack |= TSTAMP_ACK_BPF; + skb_shinfo(skb)->tskey = TCP_SKB_CB(skb)->seq + skb->len - 1; + } return 0; } From patchwork Sun Mar 30 12:23:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 14032923 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2B26158A13; Sun, 30 Mar 2025 12:24:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337451; cv=pass; b=dlrl2WxYj233x/1tCyfjBjCqK9wysg+I072enzD0xFn6vipWN3rdKWJY1gsajgdVjwZ07d+PmDyHuVA/K6M3s2XgjzPCGcsiVlu/OSGzxVoXuNPa9FUQftq+hljtWe5efkJQZthlTJcMJnvnP5R0jyhIKdWztC5pp0f4CYe5PnM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743337451; c=relaxed/simple; bh=oVeFAI7piMnHF4YnHOy1gBLcP24XFytf+ah6CTXpPow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uo+4k7VJaBqp4CfQhJQO9MHIao7RW8uGaneX/1ijJkAhYOacO1n3nRUaZQzwKzWxceLHVRhnVbKVKJ74P0LvlImGaD0DH+IoKHzWjVETNec9wepVgRMPoEoYp5V2B1zYdCk0zwEHO/yZfv3IXh+FqaeqThhwsl/2XK8NcItlF7s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=SZOFCeTq; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="SZOFCeTq" Received: from monolith.lan (unknown [193.138.7.178]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4ZQYN306Gxz49QBV; Sun, 30 Mar 2025 15:24:02 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337445; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iHgOmlyF/u0xf4oOA2xxDbXezfoxwB3V0WUM3ag/w6o=; b=SZOFCeTqaD9WbHsIlahmE9wx7V1Dy63Zp/DLSfH3wsAibJgvTLKn9B1/p/0n2h4jKCN+vr zxUP3ddM29BhWmw5r/0WyJRZiZQKH0N2rA+ZSAQqv2j5QTz5guJblNfsE+3HL3rvauKHeE 0in5Zbfb+NcR5moz+MTpOk8YljWDyjoFr1TIAo2JqqLj3I4JmUxW2r23TyoOjQvGio1RV7 RBvdj2xrlZx4kLcwEgy4nM7NwG54XOWXGhvD7vaIMOscY5rqk1Wsj21s41pPDXLC66rUuh PhyRZclE7UCGra32aGTNvk+wHmDc4WLR3w8Mh6N0s0D2qmRCCSZOfRAzG5mnTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743337445; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iHgOmlyF/u0xf4oOA2xxDbXezfoxwB3V0WUM3ag/w6o=; b=aDxyEPs7AL/tSGS+d8CjNUBrTb9IMtOCzxOkzM0nd0QEMc3sYh1g/YypQo/USPJAaOsA/A ux63oUQDM03S60Kqxhy00MbRCWWMTEyrTIuD2hUeRndnexiJjPDxKQKbeHqQ1kvNuX4XsT DAWXmj5JYpLby1rnHmS1PyLqQqt11npw3X8lKYGB2GG7JeNCK2cp8vJJqgdWYeeqdCw0c2 4S+wRfCIiGfe/FaQuiRMB5bb0SsVDlOqq7gSUDWEWMRhhg7PQZNZ2ZmHdRIoPLyIyMsF8r Si+iJlvdNYHZBDfve0fQXXs2cIqskE09HT1tJhwD5r9pY9wgXkh9Tcv9IsUaiQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1743337445; a=rsa-sha256; cv=none; b=imgpFEQt4GqDcpuQanSOzOr76SDpkn+k7zyDUFwjLvPnMqBQfSpjfTErCyBiPRnmA7QRKy M8kbxq9qv8ZEwEgKSXn+Y9OIFQ9NPdsShUBS1/fFPicApNvD5iAa4UVB61OHA5uE/raXq9 gnztNkfLPTOHUIGDNKQ3B+illNZMLrziGege2B0rkhe2mogjies2MlGxgTqhLhAio8JvRP uCPXwfBoB32pUsi3BJ6qdB6BSrypT1WfjbQ2McgMsQ0zGa7oEahCG5AYwjWLOwP7jUaV3o a0DQe7+JvofQ4TWsM0dZuubih/d5ZlC8W8lSLM1uiYX1OD1RMQSIZ93KXuf1KA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen , netdev@vger.kernel.org, bpf@vger.kernel.org, willemdebruijn.kernel@gmail.com, kerneljasonxing@gmail.com Subject: [PATCH 3/3] [RFC] Bluetooth: enable bpf TX timestamping Date: Sun, 30 Mar 2025 15:23:38 +0300 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Emit timestamps also for BPF timestamping. *** The tskey management here is not quite right: see cover letter. --- include/net/bluetooth/bluetooth.h | 1 + net/bluetooth/hci_conn.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index bbefde319f95..3b2e59cedd2d 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h @@ -383,6 +383,7 @@ struct bt_sock { struct list_head accept_q; struct sock *parent; unsigned long flags; + atomic_t bpf_tskey; void (*skb_msg_name)(struct sk_buff *, void *, int *); void (*skb_put_cmsg)(struct sk_buff *, struct msghdr *, struct sock *); }; diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 95972fd4c784..7430df1c5822 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -3072,6 +3073,7 @@ void hci_setup_tx_timestamp(struct sk_buff *skb, size_t key_offset, const struct sockcm_cookie *sockc) { struct sock *sk = skb ? skb->sk : NULL; + bool have_tskey = false; /* This shall be called on a single skb of those generated by user * sendmsg(), and only when the sendmsg() does not return error to @@ -3096,6 +3098,20 @@ void hci_setup_tx_timestamp(struct sk_buff *skb, size_t key_offset, skb_shinfo(skb)->tskey = key - 1; } + have_tskey = true; + } + + if (cgroup_bpf_enabled(CGROUP_SOCK_OPS) && + SK_BPF_CB_FLAG_TEST(sk, SK_BPF_CB_TX_TIMESTAMPING)) { + struct bt_sock *bt_sk = container_of(sk, struct bt_sock, sk); + int key = atomic_inc_return(&bt_sk->bpf_tskey); + + if (!have_tskey) + skb_shinfo(skb)->tskey = key - 1; + + bpf_skops_tx_timestamping(sk, skb, + BPF_SOCK_OPS_TSTAMP_SENDMSG_CB); + } } @@ -3105,7 +3121,7 @@ void hci_conn_tx_queue(struct hci_conn *conn, struct sk_buff *skb) bool track = false; /* Emit SND now, ie. just before sending to driver */ - if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP) + if (skb_shinfo(skb)->tx_flags & (SKBTX_SW_TSTAMP | SKBTX_BPF)) __skb_tstamp_tx(skb, NULL, NULL, skb->sk, SCM_TSTAMP_SND); /* COMPLETION tstamp is emitted for tracked skb later in Number of @@ -3127,7 +3143,8 @@ void hci_conn_tx_queue(struct hci_conn *conn, struct sk_buff *skb) return; } - if (skb->sk && (skb_shinfo(skb)->tx_flags & SKBTX_COMPLETION_TSTAMP)) + if (skb->sk && (skb_shinfo(skb)->tx_flags & + (SKBTX_COMPLETION_TSTAMP | SKBTX_BPF))) track = true; /* If nothing is tracked, just count extra skbs at the queue head */