Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3532425pxf; Mon, 15 Mar 2021 11:39:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxjgtOAcWCcZZAVXxUKvFqDYZV1MJX83QkU5z85RYSV6YWLEo1T7HGlt5vUuyJBRi4mT6hx X-Received: by 2002:a17:906:c181:: with SMTP id g1mr24548898ejz.96.1615833583408; Mon, 15 Mar 2021 11:39:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615833583; cv=none; d=google.com; s=arc-20160816; b=d0PVHNxnwqknMRzCbgdmh/LRnRdD183malonQ7v5E6agDmXGravE2aY7ULiHRcJK0z NAPQkkBwk5TJge/eG/tdGn/8Q/xJg0ChpY2QBiTHySdB4clC/j2Uddw5my5yu3LTCIoc eCKjBTCyMr/EXKUlMq9iy4lQi/6qSc/XBmzMOhST7zqdy/O7yBwRqg9o5sP/dRMnvLtE fmH9sL1bvo732aUdhXQsQCmr6zYJPgo9SdP2rQNXtfbM+rSu164icO+cMy7lJIcO3QrO EKZfUk2kx7WLAxadg7vmkCTXAGx0Hz+MgHsHK+pRRbTIdrqgvL++CJRzVVgkz1fNTOud otIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=BGuMKOkdrHOiChjiafTuYIDNIf6YOyGwUuyeMXLl7C0=; b=eE0VKjPFpiddakpJ53FDnyHnkxpqIiO5mfjKzJp/AbJ0T9/jWg9NFeRX+1AegwxWox ZOWum9a2EwMo4LhwD8rQZ6R/FfiF00HfgHgFGaiSmK+QxXxT30pShm1w3y7e8JbbKOds p8r6VCNoJGOUHMfXUWwhThQnqnJDZ7nHmHImEqJT229EpqucuBusJcKDy+oEwCbT+rzY 0a2GyGP19I84hDQW2ZuaxTrBmkrrIffWpyQWZjesmdKQ5kSkVZNICNCIW7eT/J7ou9JC H8ioVyaQQV2CO3b3uj0lwdKV5ivZrsh6s0+oOxRjm28Jppfplo/WIf4hU81DHe0CJdYu DAGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ieee.org header.s=google header.b=GVlfB9O2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ieee.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n24si11367717eds.571.2021.03.15.11.39.21; Mon, 15 Mar 2021 11:39:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ieee.org header.s=google header.b=GVlfB9O2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ieee.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235128AbhCORMf (ORCPT + 99 others); Mon, 15 Mar 2021 13:12:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235727AbhCORME (ORCPT ); Mon, 15 Mar 2021 13:12:04 -0400 Received: from mail-io1-xd36.google.com (mail-io1-xd36.google.com [IPv6:2607:f8b0:4864:20::d36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02D3CC06175F for ; Mon, 15 Mar 2021 10:12:04 -0700 (PDT) Received: by mail-io1-xd36.google.com with SMTP id f20so34141061ioo.10 for ; Mon, 15 Mar 2021 10:12:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ieee.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=BGuMKOkdrHOiChjiafTuYIDNIf6YOyGwUuyeMXLl7C0=; b=GVlfB9O2TVaFKAU9+/1TDlxsyrG3P7CDFeNmvi1VAFXXIeOM6yIYvnOQ87KMrVet7o pc8iBNLTGtMD3y5iiC79KBGTkgrPeqjbk4ckBFVsszmjyi3bph7WhvYIVxd3Gg4jxkef is0NjJ4BVjAVb2LpGSVhbL0Em39FGjFIgJgVY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BGuMKOkdrHOiChjiafTuYIDNIf6YOyGwUuyeMXLl7C0=; b=aAEfbYxqph3w2LK7RbaFZbLb3/xHy9+kzAwv9ic5xjg3Jz2cLthyOStE7AfUHQsdyA /lQ6gFAq+yoPblbbsSVcRYPmX0iJL71j4PjbcMoRMUTgxw9vRSw2UzrBDxMGqvHf3gvz xKr4R81cILmu7Sm2a6jiVSupvYE/n3wD5D2d9t55jjjpUFAzN0xJqfVdZkqNdkhKbn7Y V1bXHvv1ngOnewjAvapUqca6kqz1Ic+zlwF6x0eh0H9FjDWvRFhNxm2SmoH4rS7uL08x mi/2ziLYnKaBjLBf7QjCNAEygeMY7yE9fBlrX1v+kOlOjCDYOC/ISk/xmWZeL7wKE36x kPGg== X-Gm-Message-State: AOAM531bjeLpTAlcdBSjwerUrZkNRzap4Mi2sc7JV6yanGKRq9MKJQno Iu8CLxInZ9gVYyStIcMaaR5Vd5tf+BD/CT9i X-Received: by 2002:a05:6602:184c:: with SMTP id d12mr461866ioi.8.1615828323164; Mon, 15 Mar 2021 10:12:03 -0700 (PDT) Received: from [172.22.22.4] (c-73-185-129-58.hsd1.mn.comcast.net. [73.185.129.58]) by smtp.googlemail.com with ESMTPSA id b16sm8178597ilq.49.2021.03.15.10.12.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Mar 2021 10:12:02 -0700 (PDT) Subject: Re: [PATCH net-next v4 2/6] net: qualcomm: rmnet: simplify some byte order logic To: Alexander Duyck , Alex Elder Cc: Subash Abhinov Kasiviswanathan , stranche@codeaurora.org, David Miller , Jakub Kicinski , sharathv@codeaurora.org, bjorn.andersson@linaro.org, evgreen@chromium.org, cpratapa@codeaurora.org, David Laight , Vladimir Oltean , elder@kernel.org, Netdev , LKML References: <20210315133455.1576188-1-elder@linaro.org> <20210315133455.1576188-3-elder@linaro.org> From: Alex Elder Message-ID: Date: Mon, 15 Mar 2021 12:12:01 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/15/21 11:02 AM, Alexander Duyck wrote: > On Mon, Mar 15, 2021 at 6:36 AM Alex Elder wrote: >> >> In rmnet_map_ipv4_ul_csum_header() and rmnet_map_ipv6_ul_csum_header() >> the offset within a packet at which checksumming should commence is >> calculated. This calculation involves byte swapping and a forced type >> conversion that makes it hard to understand. >> >> Simplify this by computing the offset in host byte order, then >> converting the result when assigning it into the header field. >> >> Signed-off-by: Alex Elder >> Reviewed-by: Bjorn Andersson >> --- >> .../ethernet/qualcomm/rmnet/rmnet_map_data.c | 22 ++++++++++--------- >> 1 file changed, 12 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c >> index 21d38167f9618..bd1aa11c9ce59 100644 >> --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c >> +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c >> @@ -197,12 +197,13 @@ rmnet_map_ipv4_ul_csum_header(void *iphdr, >> struct rmnet_map_ul_csum_header *ul_header, >> struct sk_buff *skb) >> { >> - struct iphdr *ip4h = (struct iphdr *)iphdr; >> - __be16 *hdr = (__be16 *)ul_header, offset; >> + __be16 *hdr = (__be16 *)ul_header; >> + struct iphdr *ip4h = iphdr; >> + u16 offset; >> + >> + offset = skb_transport_header(skb) - (unsigned char *)iphdr; >> + ul_header->csum_start_offset = htons(offset); > > Rather than using skb_transport_header the correct pointer to use is > probably skb_checksum_start. The two are essentially synonymous but > the checksumming code is supposed to use skb_checksum_start. That's a great suggestion. I was mimicking the existing code but it would be much better to use that. > Alternatively you could look at possibly using skb_network_header_len > as that would be the same value assuming that both headers are the > outer headers. Then you could avoid the extra pointer overhead. Actually, I think this is better still, because the purpose here is to tell the hardware where to start checksumming. I.e., it's unrelated to the SKB, and hides the calculation. Thank you. I'll put together version 5, incorporating your suggestion. -Alex >> - offset = htons((__force u16)(skb_transport_header(skb) - >> - (unsigned char *)iphdr)); >> - ul_header->csum_start_offset = offset; >> ul_header->csum_insert_offset = skb->csum_offset; >> ul_header->csum_enabled = 1; >> if (ip4h->protocol == IPPROTO_UDP) >> @@ -239,12 +240,13 @@ rmnet_map_ipv6_ul_csum_header(void *ip6hdr, >> struct rmnet_map_ul_csum_header *ul_header, >> struct sk_buff *skb) >> { >> - struct ipv6hdr *ip6h = (struct ipv6hdr *)ip6hdr; >> - __be16 *hdr = (__be16 *)ul_header, offset; >> + __be16 *hdr = (__be16 *)ul_header; >> + struct ipv6hdr *ip6h = ip6hdr; >> + u16 offset; >> + >> + offset = skb_transport_header(skb) - (unsigned char *)ip6hdr; >> + ul_header->csum_start_offset = htons(offset); > > Same here. > >> >> - offset = htons((__force u16)(skb_transport_header(skb) - >> - (unsigned char *)ip6hdr)); >> - ul_header->csum_start_offset = offset; >> ul_header->csum_insert_offset = skb->csum_offset; >> ul_header->csum_enabled = 1; >> >> -- >> 2.27.0 >>