Skip to content

Commit e837116

Browse files
gaojunhao0504acrnsi
authored andcommitted
dm: clean up assert in virtio_rnd.c
clean up assert in virtio_rnd.c Tracked-On: #3252 Signed-off-by: Gao Junhao <junhao.gao@intel.com> Reviewed-by: Yonghua Huang <yonghua.huang@intel.com>
1 parent 842da0a commit e837116

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

devicemodel/hw/pci/virtio/virtio_rnd.c

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
#include <stdlib.h>
3535
#include <string.h>
3636
#include <unistd.h>
37-
#include <assert.h>
3837
#include <pthread.h>
38+
#include <errno.h>
3939

4040
#include "dm.h"
4141
#include "pci_core.h"
@@ -193,7 +193,6 @@ virtio_rnd_k_set_status(void *base, uint64_t status)
193193
static int
194194
virtio_rnd_kernel_init(struct virtio_rnd *rnd)
195195
{
196-
assert(rnd->vbs_k.fd == 0);
197196

198197
rnd->vbs_k.fd = open("/dev/vbs_rng", O_RDWR);
199198
if (rnd->vbs_k.fd < 0) {
@@ -305,7 +304,6 @@ virtio_rnd_get_entropy(void *param)
305304
struct virtio_vq_info *vq = &rnd->vq;
306305
struct iovec iov;
307306
uint16_t idx;
308-
int ret;
309307
ssize_t len;
310308

311309
for (;;) {
@@ -317,20 +315,24 @@ virtio_rnd_get_entropy(void *param)
317315
* - avoid vring processing due to spurious wakeups
318316
* - catch missing notifications before acquiring rx_mtx
319317
*/
320-
while (!vq_has_descs(vq)) {
321-
ret = pthread_cond_wait(&rnd->rx_cond, &rnd->rx_mtx);
322-
assert(ret == 0);
323-
}
318+
while (!vq_has_descs(vq))
319+
pthread_cond_wait(&rnd->rx_cond, &rnd->rx_mtx);
324320

325321
rnd->in_progress = 1;
326322
pthread_mutex_unlock(&rnd->rx_mtx);
327323

328324
do {
329-
ret = vq_getchain(vq, &idx, &iov, 1, NULL);
330-
assert(ret > 0);
331-
325+
vq_getchain(vq, &idx, &iov, 1, NULL);
332326
len = read(rnd->fd, iov.iov_base, iov.iov_len);
333-
assert(len > 0);
327+
if (len <= 0) {
328+
vq_retchain(vq);
329+
vq_endchains(vq, 0);
330+
331+
/* no data available */
332+
if (len == -1 && errno == EAGAIN)
333+
return NULL;
334+
break;
335+
}
334336

335337
/* release this chain and handle more */
336338
vq_relchain(vq, idx, len);
@@ -384,7 +386,10 @@ virtio_rnd_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
384386
* Should always be able to open /dev/random.
385387
*/
386388
fd = open("/dev/random", O_RDONLY);
387-
assert(fd >= 0);
389+
if (fd < 0) {
390+
WPRINTF(("virtio_rnd: open failed: /dev/random \n"));
391+
return -1;
392+
}
388393

389394
rnd = calloc(1, sizeof(struct virtio_rnd));
390395
if (!rnd) {
@@ -495,13 +500,16 @@ virtio_rnd_deinit(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
495500
virtio_rnd_kernel_stop(rnd);
496501
virtio_rnd_kernel_reset(rnd);
497502
rnd->vbs_k.status = VIRTIO_DEV_INITIAL;
498-
assert(rnd->vbs_k.fd >= 0);
499-
close(rnd->vbs_k.fd);
500-
rnd->vbs_k.fd = -1;
503+
if (rnd->vbs_k.fd >= 0) {
504+
close(rnd->vbs_k.fd);
505+
rnd->vbs_k.fd = -1;
506+
}
501507
}
502508

503-
assert(rnd->fd >= 0);
504-
close(rnd->fd);
509+
if (rnd->fd >= 0) {
510+
close(rnd->fd);
511+
rnd->fd = -1;
512+
}
505513
DPRINTF(("%s: free struct virtio_rnd!\n", __func__));
506514
free(rnd);
507515
}

0 commit comments

Comments
 (0)