Received: by 2002:a05:7412:8521:b0:e2:908c:2ebd with SMTP id t33csp2479379rdf; Mon, 6 Nov 2023 16:04:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IF2QzpN8wv9yHOAT2CC4MTQAgRZrLi0sFzQfQnqiNZCfXLXCUv+HLezPlnLsBHk/7GkoBQd X-Received: by 2002:a17:90a:34d:b0:280:c9a1:861e with SMTP id 13-20020a17090a034d00b00280c9a1861emr14916011pjf.13.1699315450631; Mon, 06 Nov 2023 16:04:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699315450; cv=none; d=google.com; s=arc-20160816; b=V1lRCa5IW+PwMCD1Vdv7vSWNbQZ9doJlR7O6gU615D9ZzzC4k0Iz5J35JnEF6yAjp/ mL+rEqLf4fJt0G8vwY4I0M1FpNTdAH8RO0eAf3NASlHxdD1Ihfxy8b4OTkMTPeXhmFDB 0Lu8GgOUV7Z85ol96PosLGriQTZF5PSoFZ467pi5s20L3Zu2fwDchTBBCxO6XyfbS/tZ X9+5LCDc5tlShAnX9vglKJVgAujv4Oc8UtkqQWn5xodI4g68W76+7ESehbMu37OWOgql ay9iUs9zZlUs1+6yP6q0jES55L1Sag3sEvmrdwtRMOQ7RHsfxRRcACqzAUjKtzdD5zKJ +mAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=+k7O7fPsM7i2kvbi4Eehiz4lx1hbxjBD0ACtWEdTidQ=; fh=qrP9GnGiN9NNXTidoe2z6Mi4daM7GMI5qV+rR+HRkyE=; b=YcrvQCRJwhk1hp27NY0v1JmF2OtIxLMAAxrp7h/a76OR0M/Zchkeq7M/reAsDNAaZl 9uvtQJ4UWfgj42Y3UTKHjGkWyDIZfs0WOHlxqRxqATwIuitD4LrTCG/B35EoRDC+TGG3 MDuTPLAWG3nEVnABEYYCub+8p+vS24l/8EYgYncOcpr0obGhU/jHPFRu+s140Q/NTKRt 83kCjiL/O65CEEgk4EOC7VSuUPLu6Rr7atL94rscKr3/m4PsITtu1QvNbXNk10MYZz7C DQbyosuEVTnQT7kI4D64yvs3d+qrpqEefYibl4wQtOPME+dBS42SFr4j9WJ1MscvXSKF mHug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=OZBThTfY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id d23-20020a17090ab31700b002803e9ddb0fsi9426896pjr.129.2023.11.06.16.04.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 16:04:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=OZBThTfY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 60AD680A1387; Mon, 6 Nov 2023 16:04:08 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233322AbjKGAD7 (ORCPT + 99 others); Mon, 6 Nov 2023 19:03:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230208AbjKGAD6 (ORCPT ); Mon, 6 Nov 2023 19:03:58 -0500 Received: from mail-vk1-xa35.google.com (mail-vk1-xa35.google.com [IPv6:2607:f8b0:4864:20::a35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63030B6 for ; Mon, 6 Nov 2023 16:03:54 -0800 (PST) Received: by mail-vk1-xa35.google.com with SMTP id 71dfb90a1353d-49d9ef118a5so1951002e0c.1 for ; Mon, 06 Nov 2023 16:03:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699315433; x=1699920233; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=+k7O7fPsM7i2kvbi4Eehiz4lx1hbxjBD0ACtWEdTidQ=; b=OZBThTfYmWxjCXnpuw2f2eRdmCYyE/P+WRlpe1p4GtgPA5fNDqSqa1H7L1OTB1PPaQ 7+Cy7JEETq/OMLB9KpyCUobSuBGZEx5aOa/tyaPJp3gOyNo0Y1kZhoEb/2sV1LITQfwB 467bQmWbHLHfklXvl7Sso4iArASp3nRBHKryyLSYe/KU5et1kEy/KWEoTGUBS8gy5Nu6 hYBDA+n/7J7tFHj9W3oBO6FSievmSXBYLa7w6I2r29MK2mbwOo6aaoIxgtoPpoH3dUH3 2lAOJF9nuWzIb0kh9o0kKP+GZgbx+JZ1aJSk7iRFWvOowcpFzzJN9ghzRcYPvmz3Lu0Q dlkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699315433; x=1699920233; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+k7O7fPsM7i2kvbi4Eehiz4lx1hbxjBD0ACtWEdTidQ=; b=l77W4VrUZZTspsYoOZZAYnCdwwAwPYkmAI/TG5x67Shpc6n9VB/J+8qgGDq/+Ab79I mwksyMSs/G6W7ngCM+Lz9nkC6e1uuLRROke4fqKhb56KRwFUrYd74VdhXEkSjzCBw5rK f5KBD3r6UxiKSRuEr54diQhOWzd7dxXf2bk02beWmXFHG9eAUfu2jrm3C2EpSoKJWldz YoToARLr297a59avQ0nXHUXYtDFzK3Rt9MVbcg97R3uj7A7AGlL2Wp7Fv4AW+I4b4koo 5DqBtfw91s316IWKRtsLd71gxiIi0vus2WS0a4bbmGi7D0KcEgdzHEwwLrVfWSS+4QXT iCYA== X-Gm-Message-State: AOJu0YwKpj6xdaQSaQwgtRV9ly4BWtn/GDYDuiufdd/Vv0vIxwTWht6w zWuMHL3oeCOonrej2Bouy31FwINZHASrg1tDxec6Kg== X-Received: by 2002:a1f:aa15:0:b0:4a8:4218:7b90 with SMTP id t21-20020a1faa15000000b004a842187b90mr19912346vke.9.1699315433224; Mon, 06 Nov 2023 16:03:53 -0800 (PST) MIME-Version: 1.0 References: <20231106024413.2801438-1-almasrymina@google.com> <20231106024413.2801438-10-almasrymina@google.com> <19129763-6f74-4b04-8a5f-441255b76d34@kernel.org> <00883386-0c4b-4ba7-84c6-553f468304e6@kernel.org> In-Reply-To: <00883386-0c4b-4ba7-84c6-553f468304e6@kernel.org> From: Mina Almasry Date: Mon, 6 Nov 2023 16:03:39 -0800 Message-ID: Subject: Re: [RFC PATCH v3 09/12] net: add support for skbs with unreadable frags To: David Ahern Cc: Stanislav Fomichev , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jesper Dangaard Brouer , Ilias Apalodimas , Arnd Bergmann , Willem de Bruijn , Shuah Khan , Sumit Semwal , =?UTF-8?Q?Christian_K=C3=B6nig?= , Shakeel Butt , Jeroen de Borst , Praveen Kaligineedi , Willem de Bruijn , Kaiyuan Zhang Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 06 Nov 2023 16:04:08 -0800 (PST) On Mon, Nov 6, 2023 at 3:37=E2=80=AFPM David Ahern wro= te: > > On 11/6/23 3:18 PM, Mina Almasry wrote: > >>>>>> @@ -991,7 +993,7 @@ struct sk_buff { > >>>>>> #if IS_ENABLED(CONFIG_IP_SCTP) > >>>>>> __u8 csum_not_inet:1; > >>>>>> #endif > >>>>>> - > >>>>>> + __u8 devmem:1; > >>>>>> #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS) > >>>>>> __u16 tc_index; /* traffic control in= dex */ > >>>>>> #endif > >>>>>> @@ -1766,6 +1768,12 @@ static inline void skb_zcopy_downgrade_mana= ged(struct sk_buff *skb) > >>>>>> __skb_zcopy_downgrade_managed(skb); > >>>>>> } > >>>>>> > >>>>>> +/* Return true if frags in this skb are not readable by the host.= */ > >>>>>> +static inline bool skb_frags_not_readable(const struct sk_buff *s= kb) > >>>>>> +{ > >>>>>> + return skb->devmem; > >>>>> > >>>>> bikeshedding: should we also rename 'devmem' sk_buff flag to 'not_r= eadable'? > >>>>> It better communicates the fact that the stack shouldn't dereferenc= e the > >>>>> frags (because it has 'devmem' fragments or for some other potentia= l > >>>>> future reason). > >>>> > >>>> +1. > >>>> > >>>> Also, the flag on the skb is an optimization - a high level signal t= hat > >>>> one or more frags is in unreadable memory. There is no requirement t= hat > >>>> all of the frags are in the same memory type. > >> > >> David: maybe there should be such a requirement (that they all are > >> unreadable)? Might be easier to support initially; we can relax later > >> on. > >> > > > > Currently devmem =3D=3D not_readable, and the restriction is that all t= he > > frags in the same skb must be either all readable or all unreadable > > (all devmem or all non-devmem). > > What requires that restriction? In all of the uses of skb->devmem and > skb_frags_not_readable() what matters is if any frag is not readable, > then frag list walk or collapse is avoided. > > Currently only tcp_recvmsg_devmem(), I think. tcp_recvmsg_locked() delegates to tcp_recvmsg_devmem() if skb->devmem, and tcp_recvmsg_devmem() net_err's if it finds a non-iov frag in the skb. This is done for some simplicity, because iov's are given to the user via cmsg, but pages are copied into the linear buffer. I think it would be confusing for the user if we simultaneously copied some data to the linear buffer and gave them a devmem cmsgs in the same recvmsg() call. So, my simplicity is: 1. in a single skb, all frags must be devmem or non-devmem, no mixing. 2. In a single recvmsg() call, we only process devmem or non-devmem skbs, no mixing. --=20 Thanks, Mina