From owner-freebsd-net@FreeBSD.ORG Fri Mar 11 21:14:39 2005 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 578AC16A4CE; Fri, 11 Mar 2005 21:14:39 +0000 (GMT) Received: from mail.vicor-nb.com (bigwoop.vicor-nb.com [208.206.78.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id B73D043D1D; Fri, 11 Mar 2005 21:14:38 +0000 (GMT) (envelope-from julian@elischer.org) Received: from [208.206.78.97] (julian.vicor-nb.com [208.206.78.97]) by mail.vicor-nb.com (Postfix) with ESMTP id 8D7037A403; Fri, 11 Mar 2005 13:14:38 -0800 (PST) Message-ID: <42320A3E.1020708@elischer.org> Date: Fri, 11 Mar 2005 13:14:38 -0800 From: Julian Elischer User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.5) Gecko/20050218 X-Accept-Language: en, hu MIME-Version: 1.0 To: Gleb Smirnoff References: <20050311110234.GA87255@cell.sick.ru> <20050311141450.GF9291@darkness.comp.waw.pl> <20050311142805.GB88801@cell.sick.ru> In-Reply-To: <20050311142805.GB88801@cell.sick.ru> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit cc: dima <_pppp@mail.ru> cc: Pawel Jakub Dawidek cc: John Baldwin cc: Luigi Rizzo cc: rwatson@freebsd.org cc: net@freebsd.org Subject: Re: Giant-free polling [PATCH] X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2005 21:14:39 -0000 Gleb Smirnoff wrote: >On Fri, Mar 11, 2005 at 03:14:50PM +0100, Pawel Jakub Dawidek wrote: >P> On Fri, Mar 11, 2005 at 04:55:25PM +0300, dima wrote: >P> +> I thought about using list also, but considered it to bring >P> +> too much overhead to the code. The original idea of handling arrays >P> +> seems to be very elegant. >P> >P> Overhead? Did you run any benchmarks to prove it? >P> I find list-version much more elegant that using an array. > >It is also a small cookie for future. Now we have IFF_POLLING flag and >IFCAP_POLLING, which indicate whether interface support polling and whether >it actually does polling. This is not nice, from my viewpoint. I'd like >to see only IFCAP_POLLING present and turning polling on/off for particular >interface should be done by inserting/removing iface from polling list. > >This will also remove an extra unlocked check of interface flags (?). > >P> I also don't like the idea of calling handler method with two locks >P> held (one sx and one mutex)... > >I agree with Pawel. We have LOR here between sx lock and driver lock: > > normal polling: (get sx shared) -> (get driver mutex) > driver stop: (get driver mutex) -> (get sx exclusive) > >We will have deadlock if this two things process in parallel. > >And the per-interface mutex protects only reentrancy of interface poll >method, is that right? > >P> There is still an unresolved problem (in your and our patch as well) of >P> using ifnet structure fields without synchronization, as we don't have >P> access tointerface's internal mutex, which protects those fields. > > you need to add an interface method that has access to it.. >This is unresolved in our patch, too, and I believe throughout many >other places in kernel. > > >