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 A256725B3 for ; Sat, 7 Oct 2017 13:42:55 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 2A89D209EE; Sat, 7 Oct 2017 07:42:55 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Sat, 07 Oct 2017 07:42:55 -0400 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:x-sasl-enc; s=mesmtp; bh=A3uZUErSlzAkzzA os7E88cc1bQKCJGmN5MksFWZtx5I=; b=PyFDHGf6LqaGMfCxnYvAERyNoAq97qS Qb7e4j3fCgAu56tRIucqPs93loXuWyRwFL4oXonUBzrjgVt8zydRoqLk3oDtmLlu r8ixBmvWyK+Z+5EEqbERKp7sdfdHFXUNnFrQjB5WpHxliOSrMhfc0CUSlnn0L87e s9DCeEbBYXSQ= 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:x-sasl-enc; s= fm1; bh=A3uZUErSlzAkzzAos7E88cc1bQKCJGmN5MksFWZtx5I=; b=VPZ1RpqA LUYOx/Pvfcza9mVCEzONPmC5Q5m590wieQOG0bC2uloSv603+2GJl7Le793FEszR K26yowAts0yhRom/Ji3xiW+Fy/U9X9lNvNXgJPJC6uWM0r2n2bONNkJTZjzNiWTE dEzUtQr1u0a20mbX24GA0oDAg6/AATou7h2lmQvuzJ6etvOM2Jxe4qcw+tf9Vm0+ ac7j+vuiCgTaFBfwHQlTbuWVaGCbFVUtOA56rT/ojeEFkocg4Yj2oMTYRp188WFI 8yuvlkM/INjIvlgA6eVqUjCcKfFshJidnBrcdW06W4igtCLjVGpBHo3zTQ5y37Dv Q1PAagIxo8KUdw== X-ME-Sender: X-Sasl-enc: Y9+DyASL2cmHrNpTKS1ZtaCtmvXC9VHWo3IRwjD6/wOA 1507376574 Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id CE5C624586; Sat, 7 Oct 2017 07:42:54 -0400 (EDT) From: Thomas Monjalon To: "Mokhtar, Amr" Cc: dev@dpdk.org, fbl@redhat.com, aconole@redhat.com, bluca@debian.org Date: Sat, 07 Oct 2017 13:42:53 +0200 Message-ID: <13466624.bsl2bo8MYO@xps> In-Reply-To: <3D3765A8CDB52A4C8B410430AA19CB236EC358A3@IRSMSX104.ger.corp.intel.com> References: <1503668796-65832-1-git-send-email-amr.mokhtar@intel.com> <34263409.OrRmme2Ibo@xps> <3D3765A8CDB52A4C8B410430AA19CB236EC358A3@IRSMSX104.ger.corp.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: Re: [dpdk-dev] [RFC] Wireless Base Band Device (bbdev) 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: Sat, 07 Oct 2017 11:42:55 -0000 07/10/2017 01:27, Mokhtar, Amr: > > > -----Original Message----- > > From: Thomas Monjalon [mailto:thomas@monjalon.net] > > Sent: Thursday 5 October 2017 23:23 > > To: Mokhtar, Amr > > Cc: dev@dpdk.org; fbl@redhat.com; aconole@redhat.com; bluca@debian.org > > Subject: Re: [dpdk-dev] [RFC] Wireless Base Band Device (bbdev) > > > > 05/10/2017 23:55, Mokhtar, Amr: > > > From: Thomas Monjalon [mailto:thomas@monjalon.net] > > > > 03/10/2017 16:29, Mokhtar, Amr: > > > > > From: Thomas Monjalon [mailto:thomas@monjalon.net] > > > > > > 25/08/2017 15:46, Amr Mokhtar: > > > > > > > +int > > > > > > > +rte_bbdev_configure(uint8_t dev_id, uint16_t num_queues, > > > > > > > + const struct rte_bbdev_conf *conf); > > > > > > > > > > > > I am not convinced by the "configure all" function in ethdev. > > > > > > We break the ABI each time we add a new feature to configure. > > > > > > And it does not really help to have all configurations in one struct. > > > > > > Would you mind to split the struct rte_bbdev_conf and split the > > > > > > function accordingly? > > > > > > > > > > There is nothing to split tbh. The only parameter it has is the socket_id. > > > > > And in fact, it's optional, can be null. The only config we need is > > num_queues. > > > > > > > > Indeed, there is nothing in this struct. > > > > If you need only to allocate queues, you just have to rename this function. > > > > > > > > > I don't see in the near future that we may need to add more config params. > > > > > As a side, in the time of the implementation we were trying to > > > > > avoid any diversions from the current design ideology of ethdev and > > cryptodev. > > > > > > > > There is no ideology in ethdev, just some mistakes ;) > > > > > > > > > Can we leave it for consideration with future releases? > > > > > > > > No it should be addressed from the beginning. > > > > > > > > When you will need to add something more to configure port-wise, you > > > > should add a new function instead of breaking the ABI of the global conf > > struct. > > > > That's why the configure option should be more specialized. > > > > > > > > Distro people were complaining about ABI breakage last week. > > > > This is exactly an example of how to avoid it from the beginning. > > > > > > > > > > Ok, got your point. I was looking at it from an API-only standpoint. > > > How about modifying it into? > > > int > > > rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int > > > socket_id); > > > > Yes OK > > > > [...] > > > > > > > +struct __rte_cache_aligned rte_bbdev { > > > > > > > + rte_bbdev_enqueue_ops_t enqueue_ops; /**< Enqueue > > function */ > > > > > > > + rte_bbdev_dequeue_ops_t dequeue_ops; /**< Dequeue > > function */ > > > > > > > + const struct rte_bbdev_ops *dev_ops; /**< Functions > > > > > > > +exported by PMD > > > > > > */ > > > > > > > + struct rte_bbdev_data *data; /**< Pointer to device data */ > > > > > > > + bool attached; /**< If device is currently attached or not > > > > > > > +*/ > > > > > > > > > > > > What "attached" means? > > > > > > I'm afraid you are trying to manage hotplug in the wrong layer. > > > > > > > > > > Hotplug is not supported in the current release. > > > > > > > > It is not answering the question. > > > > What is an "attached" device? > > > > > > "Attached" means that the PCI device was probed and the bbdev device slot is > > allocated. > > > For software devices, means that a virtual bbdev device (vdev) is allocated for > > bbdev. > > > Same way the "attached" approach used in cryptodev. > > > > Not sure to understand. > > If "attached" means "allocated", when is it false? > > Currently in bbdev, it is set to true and never goes false. > As I said the Hotplug feature is not fully supported in the current version. I can remove that flag for now. > > But generally, it should be cleared to false when rte_pci_driver->remove function is called. (Hotplug?) Hotplug is still a work in progress in DPDK. Please remove this flag if it is useless. We will add something if needed when hotplug support will be better designed. > > [...] > > > > > > > +/** Structure specifying a single operation */ struct rte_bbdev_op { > > > > > > > + enum rte_bbdev_op_type type; /**< Type of this operation */ > > > > > > > + int status; /**< Status of operation that was performed */ > > > > > > > + struct rte_mempool *mempool; /**< Mempool which op > > instance > > > > > > > +is in > > > > > > */ > > > > > > > + void *opaque_data; /**< Opaque pointer for user data */ > > > > > > > + /** > > > > > > > + * Anonymous union of operation-type specific parameters. > > > > > > > +When > > > > > > allocated > > > > > > > + * using rte_bbdev_op_pool_create(), space is allocated for the > > > > > > > + * parameters at the end of each rte_bbdev_op structure, and > > the > > > > > > > + * pointers here point to it. > > > > > > > + */ > > > > > > > + RTE_STD_C11 > > > > > > > + union { > > > > > > > + void *generic; > > > > > > > + struct rte_bbdev_op_turbo_dec *turbo_dec; > > > > > > > + struct rte_bbdev_op_turbo_enc *turbo_enc; > > > > > > > + }; > > > > > > > +}; > > > > > > > > > > > > I am not sure it is a good idea to fit every operations in the > > > > > > same struct and the same functions. > > > > > > > > > > Due to the fact that our design adopts this idea that a device can > > > > > support both the encode and decode operations. > > > > > Then, at the time of PMD registration, the enqueue functions is allocated. > > > > > This enqueue() function is common for both operations. > > > > > This fitted operation structure is essential for the driver to > > > > > decide on the > > > > operation. > > > > > > > > Sorry I do not understand why you must have a "generic operation". > > > > Please, could you try again to explain this design to someone not > > > > fully understanding how turbo enc/dec works? > > > > > > Oh, sorry, I was not paying attention that you're referring to "void *generic" > > > It is just a place-holder for any other operation types. Can be removed if you > > like. > > > > No I was not referring to void *generic. > > It is the same question as in the RFC. > > I don't understand the benefit of grouping different things in an union. > > There is no benefit, this is a restriction because there is only one function pointer > for enq and another one for deq in the ops structure. Again for the same reason > of trying to keep things in sync with ethdev and cryptodev. > I've always wanted to make it as you proposed, that way it is more performant > (no checking for the type of operation.) If this is agreed, I will do it with all my pleasure :) > > The optimum solution though IMHO would be to make the generic enq/deq function pointers > per queue, instead of being per device; that way every enqueue goes straight to > the queue-specific function that matches its operation type. > Notice that currently we have turbo_enc/turbo_dec, but in the future we may have more.. Please do not impose some restrictions to your API just because you want to mimic ethdev. Feel free to innovate :)