Received: by 10.223.176.46 with SMTP id f43csp191845wra; Fri, 19 Jan 2018 16:01:46 -0800 (PST) X-Google-Smtp-Source: AH8x225Lw5U0sXwIdDrjVgLHA3ZueXAS4Fsa3454tuv0rG+3j1yy4aOPK5YVCxsgLl+jMMjLWEaf X-Received: by 10.99.95.3 with SMTP id t3mr191839pgb.302.1516406506754; Fri, 19 Jan 2018 16:01:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516406506; cv=none; d=google.com; s=arc-20160816; b=ftwLtRydmxr3XgyQUOgxMWhyEyrbUZlj+PkKH/aqz8n1LaDH3vBHV5iTz377f8dET9 tg8hwCAjVFbnaN9j7K6WMl42QGEbOGkW/2h9aTGkg9MjwOimS8AHHq3Su2q2o8rhdaUH JC9DYY7DglJDHP59vAhDoCRGf0jz0QiJwYpgSGwKx9yxJf11SwkPKIv7GAuz7juE5n/A RTK3UEn4Mx4Bav6jr8i0477HhXrBiYeVEJHtZ2HkWwR/pxqFRheLY5o66dXjLOO26YEU 5jBC1X+pd643pO2c4RPTfFUTgq1HieYiALo1Q86xg1nn8j9fXXMoUnrFoy6YnWX96BX+ /gkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=AjgEYaHZ78GmYLzPhHaosp+HDJJ3kbAaos9wccFuRBY=; b=c7E/eT4JAHks5KbkbJCGd2+tNBaX0vWbxHQ5b7k5bOhHvdTduXHayD34hqCUVaEDkS zZsZRuUZ2siGM3BPlT5xWuKKamo4esSkZqBnWQsBuBHOuxDzk3M/KAJL1cNFtk6n7fJC /6DsBHyAbyOowFn2IwuUuXne9zxtaceXVBLcT4n3U71ItL9sUdQ0cGOsuF2PCH9q6OtP pfrP0G/m2WrK4yESS/84np5QK+hSVlQ7vnQ4HbH3ptmHmH8F3wYZMDkB5na3F8fYhyhS TglAOOM6OegHxpy4Fz6/IOp3LDwOIrB9kpFJnFaDw8aWmx2WqVg2VfZ2yY9w/RDL9SmM zJMQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 16si10193422pfr.39.2018.01.19.16.01.32; Fri, 19 Jan 2018 16:01:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756261AbeATAAx (ORCPT + 99 others); Fri, 19 Jan 2018 19:00:53 -0500 Received: from violet.fr.zoreil.com ([92.243.8.30]:55292 "EHLO violet.fr.zoreil.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754339AbeATAAp (ORCPT ); Fri, 19 Jan 2018 19:00:45 -0500 Received: from violet.fr.zoreil.com (localhost [127.0.0.1]) by violet.fr.zoreil.com (8.14.9/8.14.9) with ESMTP id w0JNxsi6014504; Sat, 20 Jan 2018 00:59:54 +0100 Received: (from romieu@localhost) by violet.fr.zoreil.com (8.14.9/8.14.5/Submit) id w0JNxrPH014503; Sat, 20 Jan 2018 00:59:53 +0100 Date: Sat, 20 Jan 2018 00:59:53 +0100 From: Francois Romieu To: Jia-Ju Bai Cc: nic_swsd@realtek.com, alexander.h.duyck@redhat.com, David Miller , dhowells@redhat.com, paulmck@linux.vnet.ibm.com, will.deacon@arm.com, peterz@infradead.org, netdev@vger.kernel.org, Linux Kernel Mailing List Subject: Re: net: r8169: a question of memory barrier in the r8169 driver Message-ID: <20180119235952.GA14475@electric-eye.fr.zoreil.com> References: <9a373156-41e5-a78b-cd31-c4b9bdba2696@gmail.com> <20180119011101.GA15920@electric-eye.fr.zoreil.com> <31c256b2-b527-89b1-168b-b2a529811d74@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <31c256b2-b527-89b1-168b-b2a529811d74@gmail.com> X-Organisation: Land of Sunshine Inc. User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Jia-Ju Bai : > > On 2018/1/19 9:11, Francois Romieu wrote: > > Jia-Ju Bai : > > [...] > > > The function rtl8169_start_xmit reads tp->dirty_tx in TX_FRAGS_READY_FOR: > > > if (unlikely(!TX_FRAGS_READY_FOR(tp, skb_shinfo(skb)->nr_frags))) { > > > netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n"); > > > goto err_stop_0; > > > } > > > But there is no memory barrier around this code. > > > > > > Is there a possible data race here? > > This code would not even be needed if rtl8169_start_xmit was only your > > usual ndo_start_xmit handler: Realtek {ab / re}used it for GSO handling > > (see r8169_csum_workaround). > > > > If the test is not a no-op in this GSO context, it's racy. > > > > Thanks for reply. > I didn't clearly understand your meaning... It's fine. > I wonder whether there is a possible data race and whether a "smp_mb" is > needed before this code? > By the way, do you mean that this code can be removed? This code may be removed in a driver that properly stops itself its tx queueing in the ndo_start_xmit handler (I would still keep it as a bug detection helper but it's just a matter of taste). That's what the r8169 driver used to aim at. However, since e974604b453e87f8d864371786375d3d511fdf56, there is a piece of code where the r8169 driver iteratively uses its own ndo_start_xmit (without even checking its return value) in r8169_csum_workaround. It is racy. Now, let's forget races for a few seconds: how is r8169_csum_workaround supposed to work at all given that it does not care if (the "unlikely(...)" test in) rtl8169_start_xmit succeeds or not ? rtl8169_start_xmit can leave the skb as-is or map it to hardware descriptors (whence late release in rtl_tx). net/core/dev.c::dev_hard_start_xmit cares. r8169_csum_workaround doesn't. -- Ueimor