From e9261121b3224f893b31e9b979a7037cabbf7674 Mon Sep 17 00:00:00 2001 From: Peter Fang Date: Mon, 1 Apr 2019 03:53:44 -0700 Subject: [PATCH] dm: mei: code cleanup - explicitly initialize the connections list - use a do-while loop for vmei_proc_tx() since the first call must always succeed - make sure active_clients is initialized before creating the tx thread v1 -> v2: - split the cleanup commit into two parts Tracked-On: #2763 Signed-off-by: Peter Fang Acked-by: Anthony Xu --- devicemodel/hw/pci/virtio/virtio_mei.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/devicemodel/hw/pci/virtio/virtio_mei.c b/devicemodel/hw/pci/virtio/virtio_mei.c index 15f5e28bf..23d469f36 100644 --- a/devicemodel/hw/pci/virtio/virtio_mei.c +++ b/devicemodel/hw/pci/virtio/virtio_mei.c @@ -543,6 +543,7 @@ vmei_me_client_create(struct virtio_mei *vmei, uint8_t client_id, pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mclient->list_mutex, &attr); pthread_mutexattr_destroy(&attr); + LIST_INIT(&mclient->connections); mclient->vmei = vmei; mclient->client_id = client_id; @@ -1589,8 +1590,9 @@ vmei_notify_tx(void *data, struct virtio_vq_info *vq) vq->used->flags |= VRING_USED_F_NO_NOTIFY; pthread_mutex_unlock(&vmei->tx_mutex); - while (vq_has_descs(vq)) + do { vmei_proc_tx(vmei, vq); + } while (vq_has_descs(vq)); vq_endchains(vq, 1); @@ -2294,6 +2296,15 @@ init: goto setup_fail; virtio_set_io_bar(&vmei->base, 0); + /* + * init clients + */ + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&vmei->list_mutex, &attr); + pthread_mutexattr_destroy(&attr); + LIST_INIT(&vmei->active_clients); + /* * tx stuff, thread, mutex, cond */ @@ -2314,15 +2325,6 @@ init: snprintf(tname, sizeof(tname), "vmei-%d:%d rx", dev->slot, dev->func); pthread_setname_np(vmei->rx_thread, tname); - /* - * init clients - */ - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&vmei->list_mutex, &attr); - pthread_mutexattr_destroy(&attr); - LIST_INIT(&vmei->active_clients); - /* * start mei backend */