From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yuanhan Liu Subject: Re: [PATCH] vhost: allow for many vhost user ports Date: Wed, 7 Dec 2016 18:12:57 +0800 Message-ID: <20161207101257.GK31182@yliu-dev.sh.intel.com> References: <1480606010-6132-1-git-send-email-jan.wickbom@ericsson.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, patrik.r.andersson@ericsson.com To: Jan Wickbom Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id A91F82B96 for ; Wed, 7 Dec 2016 11:12:13 +0100 (CET) Content-Disposition: inline In-Reply-To: <1480606010-6132-1-git-send-email-jan.wickbom@ericsson.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, Dec 01, 2016 at 04:26:50PM +0100, Jan Wickbom wrote: > static int > -fdset_fill(fd_set *rfset, fd_set *wfset, struct fdset *pfdset) > +fdset_fill(struct pollfd *rwfds, struct fdset *pfdset) > { > struct fdentry *pfdentry; > - int i, maxfds = -1; > - int num = MAX_FDS; > - > - if (pfdset == NULL) > - return -1; > + int i; > + int num; > > - for (i = 0; i < num; i++) { > + for (i = 0, num = pfdset->num; i < num; i++) { > pfdentry = &pfdset->fd[i]; > - if (pfdentry->fd != -1) { > - int added = 0; > - if (pfdentry->rcb && rfset) { > - FD_SET(pfdentry->fd, rfset); > - added = 1; > - } > - if (pfdentry->wcb && wfset) { > - FD_SET(pfdentry->fd, wfset); > - added = 1; > - } > - if (added) > - maxfds = pfdentry->fd < maxfds ? > - maxfds : pfdentry->fd; > + > + if (pfdentry->fd < 0) { > + /* Hole in the list. Move the last one here */ > + > + *pfdentry = pfdset->fd[num - 1]; > + pfdset->fd[num - 1].fd = -1; > + num = fdset_adjust_num(pfdset); > } > + rwfds[i].fd = pfdentry->fd; > + rwfds[i].events = pfdentry->rcb ? POLLIN : 0; > + rwfds[i].events |= pfdentry->wcb ? POLLOUT : 0; Another thing is we don't have to re-init this rwfds array again and again. Instead, we could - set it up correctly when fdset_add is invoked: set the fd and events. - reset revents when it's been handled at fdset_event_dispatch(). - swap with the last one and shrink the array on fd delete Could you make a follow up patch for that? Thanks. --yliu