From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60378) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZjXoI-0001mj-Vz for qemu-devel@nongnu.org; Tue, 06 Oct 2015 15:22:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZjXnx-00069F-7x for qemu-devel@nongnu.org; Tue, 06 Oct 2015 15:22:02 -0400 Received: from mail-qg0-x229.google.com ([2607:f8b0:400d:c04::229]:34716) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZjXnw-00068J-OK for qemu-devel@nongnu.org; Tue, 06 Oct 2015 15:21:40 -0400 Received: by qgez77 with SMTP id z77so184254013qge.1 for ; Tue, 06 Oct 2015 12:21:40 -0700 (PDT) Sender: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= From: marcandre.lureau@redhat.com Date: Tue, 6 Oct 2015 21:19:29 +0200 Message-Id: <1444159184-18153-34-git-send-email-marcandre.lureau@redhat.com> In-Reply-To: <1444159184-18153-1-git-send-email-marcandre.lureau@redhat.com> References: <1444159184-18153-1-git-send-email-marcandre.lureau@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PULL 33/48] ivshmem-server: use a uint16 for client ID List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: peter.maydell@linaro.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , qemu-devel@nongnu.org From: Marc-André Lureau In practice, the number of VM is limited to MAXUINT16 in ivshmem, so use the same limit on the server (removes a theorical infinite loop) Signed-off-by: Marc-André Lureau Reviewed-by: Claudio Fontana --- contrib/ivshmem-server/ivshmem-server.c | 11 ++++++++++- contrib/ivshmem-server/ivshmem-server.h | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/contrib/ivshmem-server/ivshmem-server.c b/contrib/ivshmem-server/ivshmem-server.c index 16ee583..972fda2 100644 --- a/contrib/ivshmem-server/ivshmem-server.c +++ b/contrib/ivshmem-server/ivshmem-server.c @@ -145,9 +145,18 @@ ivshmem_server_handle_new_conn(IvshmemServer *server) peer->sock_fd = newfd; /* get an unused peer id */ - while (ivshmem_server_search_peer(server, server->cur_id) != NULL) { + /* XXX: this could use id allocation such as Linux IDA, or simply + * a free-list */ + for (i = 0; i < G_MAXUINT16; i++) { + if (ivshmem_server_search_peer(server, server->cur_id) == NULL) { + break; + } server->cur_id++; } + if (i == G_MAXUINT16) { + IVSHMEM_SERVER_DEBUG(server, "cannot allocate new client id\n"); + goto fail; + } peer->id = server->cur_id++; /* create eventfd, one per vector */ diff --git a/contrib/ivshmem-server/ivshmem-server.h b/contrib/ivshmem-server/ivshmem-server.h index cd584fc..2176d5e 100644 --- a/contrib/ivshmem-server/ivshmem-server.h +++ b/contrib/ivshmem-server/ivshmem-server.h @@ -70,7 +70,7 @@ typedef struct IvshmemServer { size_t shm_size; /**< size of shm */ int shm_fd; /**< shm file descriptor */ unsigned n_vectors; /**< number of vectors */ - long cur_id; /**< id to be given to next client */ + uint16_t cur_id; /**< id to be given to next client */ bool verbose; /**< true in verbose mode */ IvshmemServerPeerList peer_list; /**< list of peers */ } IvshmemServer; -- 2.4.3