From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752659AbbKKTZy (ORCPT ); Wed, 11 Nov 2015 14:25:54 -0500 Received: from unicorn.mansr.com ([81.2.72.234]:45161 "EHLO unicorn.mansr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751971AbbKKTZx convert rfc822-to-8bit (ORCPT ); Wed, 11 Nov 2015 14:25:53 -0500 From: =?iso-8859-1?Q?M=E5ns_Rullg=E5rd?= To: David Miller Cc: romieu@fr.zoreil.com, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, slash.tmp@free.fr Subject: Re: [PATCH v5] net: ethernet: add driver for Aurora VLSI NB8800 Ethernet controller References: <20151111.141311.1893172622045238748.davem@davemloft.net> <20151111.141956.1056130800039910138.davem@davemloft.net> Date: Wed, 11 Nov 2015 19:25:46 +0000 In-Reply-To: <20151111.141956.1056130800039910138.davem@davemloft.net> (David Miller's message of "Wed, 11 Nov 2015 14:19:56 -0500 (EST)") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org David Miller writes: > From: Måns Rullgård > Date: Wed, 11 Nov 2015 19:17:07 +0000 > >> David Miller writes: >> >>> From: Måns Rullgård >>> Date: Wed, 11 Nov 2015 19:09:19 +0000 >>> >>>> David Miller writes: >>>> >>>>> From: Måns Rullgård >>>>> Date: Wed, 11 Nov 2015 18:25:05 +0000 >>>>> >>>>>> If the TX DMA channel is idle when start_xmit is called, it can be >>>>>> started immediately. Checking the DMA status and starting it if >>>>>> idle has to be done atomically somehow. >>>>> >>>>> ->ndo_start_xmit() is guaranteed to be invoked atomically, protected >>>>> by the TX queue spinlock. >>>> >>>> Yes, but the DMA needs to be restarted from some other context if it was >>>> busy when start_xmit checked. >>> >>> Then you can probably use the TXQ lock in the interrupt handler just for >>> that. >> >> That seems a bit heavy-handed when the critical section for this is only >> a tiny part of the start_xmit function. > > Then what synchornization primitive other than spin locks are you going > to use for this? > > My point is that there is a spinlock the core code is _already_ taking, > unconditionally, when ->ndo_start_xmit() executes. And you can therefore > take advantage of that rather than using another lock of your own. I get that. But that remains locked for the duration of ndo_start_xmit() whereas the part that needs to be synchronised with the DMA completion IRQ handler is tiny. Having the IRQ handler spin for the duration of ndo_start_xmit() seemed silly to me. -- Måns Rullgård mans@mansr.com