From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gaetan.rivet@6wind.com>
Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43])
 by dpdk.org (Postfix) with ESMTP id 0C4D51B53
 for <dev@dpdk.org>; Wed, 31 May 2017 15:18:08 +0200 (CEST)
Received: by mail-wm0-f43.google.com with SMTP id e127so19919500wmg.1
 for <dev@dpdk.org>; Wed, 31 May 2017 06:18:08 -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=1oikD07DG1KxHIFLY9NbisbTooIqtQzlOmzqKAGWeUI=;
 b=MnoNJhWt6fYBRsqL5VyPL4worfrRbXfrjYO/8Km7p0h2THDS9bczsae7uL9BXg9HRM
 R7BFSHh2tUx+rWkMREd/EfkgISZrE9ITh7qdmLwxOU4HKM3vZ+1rUtmV73/JFLCVS7T6
 q5oo/OxiTfQ3ZZhXTQTU5snCNGiA2qMb2LyWovaIl1xZ+78BMklBQkfRtyiD4Akgev45
 cNPIZ1rJ8sFlQ9Bdhb0F9mVrRXBQNv5hDjCnFnoIaT7GVWluzQsOeBTzuf9cFAldVkOw
 D3CO8V4bGgDtqRV+ag3dUDxvOZBRrp8NoLpU6hdBF7IWRc7z/xx2c+mwJvK/wpSb3dv5
 +1bQ==
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=1oikD07DG1KxHIFLY9NbisbTooIqtQzlOmzqKAGWeUI=;
 b=lmjR6ovEgxEBYE12ky/X2B8mEKQRJB5bxI05APMXMCinYfQNQy0AD0PWZelPBVJrk5
 kR1SPLqv/iMMVyEIkDTGvrpp3QEq/uvkW36rrW7Os0E3lW7l/PeoHRxJMMf8d/gT8ab6
 knKB6Tw3DkhHFNp2gtG0UeGf1rAfKd3SEE9BMmV7W8kfYMF9+cc+GXcYJAW7QOBoS+d3
 8ME7GTNYoy959p7TLMf6FPdjrGBPP1GYbuFW5BRJt2uWF4e+HSZKtWzoVEq+NRlJSOsJ
 wpYm6WuW6SdYCQoimIjZ5QVRKZi3C4XzJA1Mq6uUhmJLSvQycTtlHi6i0103L88Jx80a
 nUBw==
X-Gm-Message-State: AODbwcBBAa76TCu4IDcqob8GOnAFfPiVenCA7A/Ds+70Sz1Kq6iHC4Iz
 bZXwZy1Qr7C8aZ11RF0=
X-Received: by 10.28.103.214 with SMTP id b205mr5622019wmc.122.1496236688278; 
 Wed, 31 May 2017 06:18:08 -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 g77sm10045744wmd.19.2017.05.31.06.18.06
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
 Wed, 31 May 2017 06:18:07 -0700 (PDT)
From: Gaetan Rivet <gaetan.rivet@6wind.com>
To: dev@dpdk.org
Cc: Gaetan Rivet <gaetan.rivet@6wind.com>, Jan Blunck <jblunck@infradead.org>
Date: Wed, 31 May 2017 15:17:45 +0200
Message-Id: <cover.1496235017.git.gaetan.rivet@6wind.com>
X-Mailer: git-send-email 2.1.4
In-Reply-To: <cover.1495637723.git.gaetan.rivet@6wind.com>
References: <cover.1495637723.git.gaetan.rivet@6wind.com>
Subject: [dpdk-dev] [PATCH v2 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 <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 31 May 2017 13:18:09 -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.

--

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.

Gaetan Rivet (2):
  vdev: implement hotplug functionality
  net/ring: fix dev handle in eth_dev

Jan Blunck (9):
  bus: add bus iterator to find a particular bus
  bus: add device iterator
  bus: add helper to find bus for a particular device
  bus: add bus helper iterator to find a particular device
  bus: introduce hotplug functionality
  vdev: implement find_device bus operation
  vdev: implement unplug bus operation
  eal: make virtual driver probe and remove take rte_vdev_device
  ethdev: Use embedded rte_device to detach driver

 drivers/net/ring/rte_eth_ring.c                 |   7 ++
 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |   4 +
 lib/librte_eal/common/eal_common_bus.c          |  65 +++++++++++++++
 lib/librte_eal/common/eal_common_dev.c          | 100 ++++++++++++++++++------
 lib/librte_eal/common/eal_common_vdev.c         |  27 +++++++
 lib/librte_eal/common/include/rte_bus.h         |  87 +++++++++++++++++++++
 lib/librte_eal/common/include/rte_dev.h         |  26 ++++++
 lib/librte_eal/linuxapp/eal/rte_eal_version.map |   3 +
 lib/librte_ether/rte_ethdev.c                   |   3 +-
 9 files changed, 299 insertions(+), 23 deletions(-)

-- 
2.1.4