From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by dpdk.org (Postfix) with ESMTP id 800542C8 for ; Tue, 27 Jun 2017 18:11:32 +0200 (CEST) Received: by mail-wm0-f45.google.com with SMTP id i127so31942300wma.0 for ; Tue, 27 Jun 2017 09:11:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YhHT/LuxoCdmBW1hzFYT8aoTEQ/5Jj6+WgnT77CCYxM=; b=NWYSeS4RlnN8dyPYTJSwReYwo4vdC7iYsy/+YdKpQ6PgVm6yAuCVDDWxGFcMxj0YAb CyIPOaaqG4egJKK4o348o0wBGRW1P4dH5QMU2zATVcbFKr9GScR1dO9alj/OdtGcLi75 zWvH1lr2bymfB3es15SntK5iBgvI3g3W9xuUk4OPiQnfZHoF4frYQn3BsMQjObjFesyA Igq29gdT+NpzpO4RbG2EBqk/JFEczyRm52eRkky1OTuISsDwFSWFDjJgzZH2KjDJnPZy Msv3/FEEqyRzyZ/eE4RBy/Ks7GNy3gcqE4cusvuydl7u0jOqNXuJnV7lIjuQLnNWs2fg /m9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YhHT/LuxoCdmBW1hzFYT8aoTEQ/5Jj6+WgnT77CCYxM=; b=IGTP8zkX4fWLo414Xnmu+6JbrUqOyYRyPj2Tepa51iGpIyjp4cT1jQqgYJvUp9gJCS 1Rgeu9Eawa7yXRdvP9o+/zn1TG+LXcWY9KkGynY+VfgHsKJW3f0o6p/OOBMJvh3wSjxz mMQxYTJXRHOWB09L6x8qf1kKudrHJ5u9DsITzII33ITIXrb716i/2um/ZfFsTH3yMfO6 K5X6q8vBarfT4THQGqiY/7lMeQYDdpFKRrr47M+s6FuLQ8LyOCk+IQ4Q/N6KJIAl/YAW Is9S7nNOsvjdH16b2ss89hEHUZprb5eU+w9djXfD5gJqZReBUpXS0WcW3mFQOi0Yn7Z7 8pzg== X-Gm-Message-State: AKS2vOxoHdGHyktQY7r0avD8m0E+1kvZSFV2r+IADhj4XSHBsnKGTCi4 /6rgRAlbXwnjA7JjqM4= X-Received: by 10.28.178.198 with SMTP id b189mr4096102wmf.106.1498579891576; Tue, 27 Jun 2017 09:11:31 -0700 (PDT) Received: from bidouze.dev.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id v13sm4080465wmd.5.2017.06.27.09.11.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Jun 2017 09:11:30 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet , Jan Blunck , Shreyansh Jain , Stephen Hemminger Date: Tue, 27 Jun 2017 18:11:07 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v6 00/11] bus: attach / detach API 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, 27 Jun 2017 16:11:32 -0000 Following the work from Jan: This patchset introduces the attach / detach API to rte_bus. The rte_device structure is used as the generic device representation. This API is implemented for the virtual bus. The functions rte_eal_dev_attach and rte_eal_dev_detach are updated to use this new interface. -- v2 0. API rework ------------- I would like to propose an evolution on the API developed by Jan. The attach / detach rte_bus API is necessary to support the attach/detach rte_dev API. Those are two different levels for one similar functionality. Attach / detach does not allow true hotplugging, because the attach function expects the devices operated upon to already exist within the buses / sub-layers. This means that this API expects devices meta-datas (bus-internal device representation and associated device information read from the system) to be present upon attach. This part of the work is done during scanning. While it is best to avoid changing the public rte_dev API as it already exists, nothing prevents this new rte_bus API from superseeding it. It has been said during the previous release cycle that device hotplug was a feature that interested users. True hotplug is not allowed by the current attach / detach API. Worse, this API hinders the effort to bring this new functionality by squatting its semantic field. Thus, I propose to rename rte_bus attach / detach; plug / unplug. As it is a superset of the attach / detach functionality, it can be used to implement rte_dev attach / detach. Now is the right time to pivot to this new feature. This should help maintainers understanding the aim of this API and the differences with the APIs higher-up, clarify the field and allow a new functionality to be proposed. The vdev bus is inherently supporting the new API, however it has been made explicit. My implementation in the PCI bus in further patchset also follows the rte_bus hotplug API instead of only attach / detach. One remaining problem with the vdev bus is the rte_dev attach implementation, which needs the rte_devargs rework to be properly fixed. 1. Additional evolutions in the patchset ---------------------------------------- The RTE_VERIFY on the find_device is too stringent I think and forces all buses to implement a public device iterator. While it could be argued that it would push for quicker support for the functionality, I think it's possible that some buses are not interested at all in it and should simply be ignored. The bus devices iterator has been fixed. The internal rte_device handle was not properly setup within the net_ring PMD. -- v3 The new API is now typedef struct rte_device * (*rte_bus_plug_t)(struct rte_devargs *da); typedef int (*rte_bus_unplug_t)(struct rte_device *dev); So, plugging a device takes an rte_devargs as input and returns an rte_device. While implementing related subsystems, I found that I usually needed this rte_device handle upon a successful device plugging. This seems the sensible and useful thing to do. As such, on error NULL is returned and rte_errno is set by the bus. Unplugging a device however now returns to the first version, which used an rte_device. The explicit contract here is that if one has an rte_device that has been obtained by calling bus->plug(), then this handle can be used for bus->unplug(). Additionally, bus and device comparators now returns 0 on match, following strcmp-like behavior. -- v4 * rte_bus_find now takes a *start* parameter, that can be null. The bus search starts from this element if set. * A few doc fixes. * The rte_device field was fixed within the rte_ring PMD in a previous patch. This fix has been integrated by other means, it is not necessary anymore. -- v5 * The commit ethdev: use embedded rte_device to detach driver has been removed from this series to be sent separately. * The PCI support for device access and hotplug is merged in this series instead of being proposed as a separate patchset. * A few nitpicks to the code itself have been fixed. * Some documentation has been reworked. -- v6 * Fixed a bug in rte_eal_dev_attach with a wrong comparison callback used to find detached devices. * Fixed coding style errors in PCI hotplug implementation. * rte_bus find_device() method now takes a *start* parameter. Gaetan Rivet (4): vdev: implement hotplug bus operation vdev: use standard bus registration function pci: implement find_device bus operation pci: implement hotplug bus operation Jan Blunck (7): bus: add bus iterator to find a bus bus: add device iterator method bus: add helper to find which bus holds a device bus: add bus iterator to find a device bus: introduce hotplug functionality vdev: implement find_device bus operation dev: use new hotplug API in attach / detach lib/librte_eal/bsdapp/eal/rte_eal_version.map | 3 + lib/librte_eal/common/eal_common_bus.c | 64 ++++++++++++ lib/librte_eal/common/eal_common_dev.c | 92 ++++++++++++---- lib/librte_eal/common/eal_common_pci.c | 65 ++++++++++++ lib/librte_eal/common/eal_common_vdev.c | 73 ++++++++++--- lib/librte_eal/common/include/rte_bus.h | 133 ++++++++++++++++++++++++ lib/librte_eal/common/include/rte_dev.h | 21 ++++ lib/librte_eal/common/include/rte_vdev.h | 2 + lib/librte_eal/linuxapp/eal/rte_eal_version.map | 3 + 9 files changed, 418 insertions(+), 38 deletions(-) -- 2.1.4