From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 4F86A1B017 for ; Tue, 23 Jan 2018 18:23:34 +0100 (CET) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 28AA720D6D; Tue, 23 Jan 2018 12:23:33 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Tue, 23 Jan 2018 12:23:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=mesmtp; bh=QcYf8l3bh4UE9WXWg124sQINjL ncl4Pb/NSARagdtUQ=; b=MR5d/v69wi+zhOUwtLR0tMJ6Z4NrKtFL+BhSWVOI/a KCBRCZPHVbmZGjDslhsXvabkakRjNhbTXblMzTnXP2JFD8RLIeTqQP1lB7di7guU Lp8EjK/qWsvF0z4RSraq8okvpBonmaMTQwS1eOdgTVBr1EPcZWkopcsYY8wj1vLR E= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=QcYf8l 3bh4UE9WXWg124sQINjLncl4Pb/NSARagdtUQ=; b=WuLscmd1+Aq0I92FJkZ7lX b7qT5vKXB2in2N9/GX6kJ6wXvwtRLZ1OW1Ysk9FZTMa3//CTLF2MswfrWGR8Awhm SiC0WAS0ePuSpkdAj2oYMfz1Ce7zWslGEzh8cu7E1ab1teTIHM+H3xptLg64t2vo echXldDou/Lcd2JOk/0RkjpVuGJtSGDATlUR6rK/RwoMPaGFctFJswS75ErOBlFq LrJ4ZF5ygT3SaTwxZCXWdciTyv6LtvAhyt2L5NvwXykGpe2NOAKTb4xx8AcpI8GG zcWeEJfJtc3IU7WoZW08QPUKJeX2KLoMbkw2nAjM2KK2HmZt6lEmzewB72Kh+Y3w == X-ME-Sender: Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id BE610240F6; Tue, 23 Jan 2018 12:23:32 -0500 (EST) From: Thomas Monjalon To: =?ISO-8859-1?Q?Ga=EBtan?= Rivet Cc: Yuanhan Liu , Ferruh Yigit , dev@dpdk.org Date: Tue, 23 Jan 2018 18:22:53 +0100 Message-ID: <3336592.DqqRBrUkFp@xps> In-Reply-To: <20180123160816.uvsvegtltmzrr4yi@bidouze.vm.6wind.com> References: <1516114218-21501-1-git-send-email-yliu@fridaylinux.org> <17059484.9s6tGoQGou@xps> <20180123160816.uvsvegtltmzrr4yi@bidouze.vm.6wind.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="iso-8859-1" Subject: Re: [dpdk-dev] [PATCH] doc: document the new devargs syntax X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jan 2018 17:23:34 -0000 23/01/2018 17:08, Ga=EBtan Rivet: > Hi Yuanhan, Thomas, >=20 > On Tue, Jan 23, 2018 at 03:29:34PM +0100, Thomas Monjalon wrote: > > 23/01/2018 13:46, Yuanhan Liu: > > > On Thu, Jan 18, 2018 at 10:46:23AM +0100, Ga=EBtan Rivet wrote: > > > > On Thu, Jan 18, 2018 at 09:46:29AM +0100, Thomas Monjalon wrote: > > > > > 18/01/2018 08:35, Yuanhan Liu: > > > > > > On Wed, Jan 17, 2018 at 12:34:08PM +0000, Ferruh Yigit wrote: > > > > > > > So does it make sense to separate them logically? Perhaps as = "device identifier" > > > > > > > and "device args". > > > > > >=20 > > > > > > Then I think it returns back to the old issue: how could we ide= ntify a > > > > > > port when the bus id (say BDF for PCI bus) is not enough for id= entifying > > > > > > a port? Such case could happen when a single NIC has 2 ports sh= aring > > > > > > the same BDF. It could also happen with the VF representors tha= t will > > > > > > be introduced shortly. > > > > >=20 > > > > > Yes, the device matching syntax must include bus category, class = category > > > > > and driver category. So any device can be identified in future. > > > > >=20 > > > > > But I think Ferruh is talking about separating device matching > > > > > (which is described in this proposal) and device settings > > > > > (which are usually mixed in -w and --vdev options). > > > > > I agree there are different things and may be separate. > > > > > They could share the same syntax (bus/class/driver) but be separa= te > > > > > with a semicolon: > > > > > matching;settings > > > > > > > > Can you give an example? > > >=20 > > > Let's take port addition in OVS-DPDK as an example. It happens in 2 > > > steps: > > > - port lookup (if port is already probed) > > > - dev attachment (if lookup fails) > > >=20 > > > And also let's assume we need probe a ConnectX-3 port. Note that for > > > ConnectX-3, there are 2 ports sharing the same PCI addr. Thus, PCI > > > BDF is not enough. And let's assume we use another extra property > > > "port". > > >=20 > > > If the proposal described in this patch is being used, the devarg > > > would look like following: > > >=20 > > > bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0/driver=3Dmlx4,mlx4_ar= g_A=3Dval,... > > >=20 > > > Then "bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0" will be used for l= ookup, > > > It means we are looking for a port with PCI BDF =3D=3D 04:00.0 AND > > > port =3D=3D 0 (the first port of the 2 ports). > > >=20 > > > Note that in my proposal the driver category is not intended for look= up. > > > If any properties needed be looked in the driver category, they would > > > probably need be elevated to the class category. > >=20 > > It is not my thought. > > I think we should be able to use bus, class and driver properties for l= ookup. > > We can imagine doing a lookup on a driver specific id, which is not > > candidate to elevation to the class category. >=20 > This means having a new set of ops for drivers to implement (get / set > on specific properties -- configuration items). Just new ops to parse the string. Then the driver is free to do whatever he wants internally. > > > If port not found, then the whole string will be used for dev attachm= ent. > > > It means we are attaching a port with PCI BDF =3D=3D 04.00.0 AND > > > port =3D=3D 0 (the 2nd port will not be attached). > > >=20 > > >=20 > > > And here is how the devargs would look like if "matching;settings" is > > > being used: > > >=20 > > > bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0;bus=3Dpci,id=3D04:00.= 0/class=3Deth,port=3D0/driver=3Dmlx4,mlx4_arg_A=3Dval,... > > >=20 > > > The part before ";" will be used for lookup and the later part will be > > > used for attachment. It should work. It just looks redundant. > >=20 > > It does not have to be redundant. > > It can be: > > bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0;driver=3Dmlx4,mlx4_arg1=3D= settings1,... > >=20 >=20 > Did you mean >=20 > > bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0;class=3Ddriver,name=3Dmlx4= ,mlx4_arg1=3Dsettings1,... No :) There are 3 categories: bus, class and driver. class is for eth, crypto, event, etc. > Here? Or is it that you "elevated" driver to be a property of the eth > class, and then immediately chained with driver parameters without > declaring the new driver class? No I think you misunderstand. I re-use the same syntax for matching and settings. Overview is: bus/class/driver;bus/class/driver where first part is for matching, and second part is for settings if any. Another overview is: matching;settings > > Another example, setting the MAC address: > > bus=3Dpci,id=3D04:00.0/class=3Deth,port=3D0;class=3Deth,mac=3D00:11:22= :33:44:55 >=20 > So, I guess this ";" syntax is meant for a user to provide once and for > all a device string: perhaps on the command line, or programmatically. > It would be used first for EAL init, then reused as-is (the entire > string) for lookup / port matching afterward. >=20 > I think this is forcing the user to keep in mind a logic that should be > abstracted away ("Here I am writing for init time, here I am writing for > matching -- but I need to put it at the same place for 'reasons'"). >=20 > I think mashing those two concepts together introduce complexity, and I > think keeping them separate is user hostile as the devargs that was used > for initializing a device cannot be re-used afterward for matching the > device that resulted from this initialization string. >=20 > Drivers answers to a specific API (ethdev, cryptodev, ...), to create > standardized objects in response to parameters that are given to them > for init. I think matching properties should be restricted to higher > classes (bus, eth/crypto), while the driver class should be left > free-form and to the responsibility of the PMD itself (while having the > proper libraries for helping parsing safely, thus driving developpers > toward similar syntaxes, while not forcing them in those). >=20 > Match could be performed on bus / eth classes only, while init could > use elements of the three classes. For simplicity, the same syntax rules > could be enforced at all level, or for flexibility some leeway could be > left on the most specific (driver). I think it is more generic to allow bus/class/driver for matching and for settings. You seem to disagree about having driver-specific matching properties. I argue it will address all future corner cases. You say driver settings should be free form while I propose just key=3Dvalue syntax for them; it is a kind of free form.