From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Zhiyong" Subject: Re: [PATCH 1/4] vhost: move fdset functions from fd_man.c to fd_man.h Date: Mon, 5 Mar 2018 07:43:15 +0000 Message-ID: References: <20180214145330.4679-1-zhiyong.yang@intel.com> <3334571.8h0X0LI7U9@xps> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: Maxime Coquelin , "dev@dpdk.org" , "yliu@fridaylinux.org" , "Bie, Tiwei" , "Wang, Zhihong" , "Wang, Dong1" To: Thomas Monjalon , "Tan, Jianfeng" Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 8B4522C18 for ; Mon, 5 Mar 2018 08:43:22 +0100 (CET) In-Reply-To: <3334571.8h0X0LI7U9@xps> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > -----Original Message----- > From: Thomas Monjalon [mailto:thomas@monjalon.net] > Sent: Thursday, March 1, 2018 10:14 PM > To: Tan, Jianfeng > Cc: Maxime Coquelin ; Yang, Zhiyong > ; dev@dpdk.org; yliu@fridaylinux.org; Bie, Tiwei > ; Wang, Zhihong ; Wang, > Dong1 > Subject: Re: [PATCH 1/4] vhost: move fdset functions from fd_man.c to > fd_man.h >=20 > 01/03/2018 07:02, Tan, Jianfeng: > > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > > > On 02/28/2018 02:36 AM, Yang, Zhiyong wrote: > > > > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > > > >> On 02/14/2018 03:53 PM, Zhiyong Yang wrote: > > > >>> lib/librte_vhost/Makefile | 3 +- > > > >>> lib/librte_vhost/fd_man.c | 274 ------------------------------= ------------- > --- > > > >>> lib/librte_vhost/fd_man.h | 258 > > > >> +++++++++++++++++++++++++++++++++++++++++-- > > > >>> 3 files changed, 253 insertions(+), 282 deletions(-) > > > >>> delete mode 100644 lib/librte_vhost/fd_man.c > > > >> > > > >> I disagree with the patch. > > > >> It is a good thing to reuse the code, but to do it, you need to > > > >> extend the vhost lib API. > > > >> > > > >> New API need to be prefixed with rte_vhost_, and be declared in > > > >> rte_vhost.h. > > > >> > > > >> And no need to move the functions from the .c to the .h file, as > > > >> it > > > moreover > > > >> makes you inline them, which is not necessary here. > > > > > > > > Thanks for your reviewing the series firstly, Maxime. :) > > > > > > > > I considered to do it as you said. However I still preferred this o= ne at last. > > > > Here are my reasons. > > > > 1) As far as I know, this set of functions are used privately in > > > > librte_vhost > > > before this feature. > > > > No strong request from the perspective of DPDK application. If I > > > understand well, It is enough to expose the functions to all PMDs > > > > And it is better to keep internal use in DPDK. > > > > > > But what the patch is doing is adding fd_man.h to the API, without > > > doing it properly. fd_man.h will be installed with other header > > > files, and any external application can use it. > > > > > > > > > > > 2) These functions help to implement vhost user, but they are not > > > > strongly > > > related to other APIs of vhost user which have already exposed. > > > > if we want to expose them as APIs at lib layer, many functions and > > > > related > > > data structure has to be exposed in rte_vhost.h. it looks messy. > > > > Your opinion? > > > > > > Yes, it is not really vhost-related, it could be part of a more > > > generic library. It is maybe better to duplicate these lines, or to > > > move this code in a existing or new library. > > > > I vote to move it to generic library, maybe eal. Poll() has better > compatibility even though poll() is not as performant as epoll(). > > > > Thomas, how do you think? >=20 > I don't see why it should be exported outside of DPDK, except for PMDs. > I would tend to keep it internal but I understand that it would mean > duplicating some code, which is not ideal. > Please could you show what would be the content of the .h in EAL? >=20 If needed to expose them in eal.h,=20 I think that they should be the whole fdset mechanism as followings. typedef void (*fd_cb)(int fd, void *dat, int *remove); struct fdentry { int fd; /* -1 indicates this entry is empty */ fd_cb rcb; /* callback when this fd is readable. */ fd_cb wcb; /* callback when this fd is writeable.*/ void *dat; /* fd context */ int busy; /* whether this entry is being used in cb. */ }; struct fdset { struct pollfd rwfds[MAX_FDS]; struct fdentry fd[MAX_FDS]; pthread_mutex_t fd_mutex; int num; /* current fd number of this fdset */ }; void fdset_init(struct fdset *pfdset); (not used in the patchset) int fdset_add(struct fdset *pfdset, int fd, fd_cb rcb, fd_cb wcb, void *dat); (used in this patchset) void *fdset_del(struct fdset *pfdset, int fd); (not used in the patchset) void *fdset_event_dispatch(void *arg); (used in this patchset) seems that we have 4 options. 1) expose them in librte_vhost 2) expose them in other existing or new libs. for example, eal. 3) duplicate the code lines at PMD layer. 4) do it as the patch does that. thanks Zhiyong