mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-10 20:43:48 +00:00
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>
This commit is contained in:
parent
842da0ac1e
commit
e837116691
@ -34,8 +34,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <assert.h>
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "dm.h"
|
#include "dm.h"
|
||||||
#include "pci_core.h"
|
#include "pci_core.h"
|
||||||
@ -193,7 +193,6 @@ virtio_rnd_k_set_status(void *base, uint64_t status)
|
|||||||
static int
|
static int
|
||||||
virtio_rnd_kernel_init(struct virtio_rnd *rnd)
|
virtio_rnd_kernel_init(struct virtio_rnd *rnd)
|
||||||
{
|
{
|
||||||
assert(rnd->vbs_k.fd == 0);
|
|
||||||
|
|
||||||
rnd->vbs_k.fd = open("/dev/vbs_rng", O_RDWR);
|
rnd->vbs_k.fd = open("/dev/vbs_rng", O_RDWR);
|
||||||
if (rnd->vbs_k.fd < 0) {
|
if (rnd->vbs_k.fd < 0) {
|
||||||
@ -305,7 +304,6 @@ virtio_rnd_get_entropy(void *param)
|
|||||||
struct virtio_vq_info *vq = &rnd->vq;
|
struct virtio_vq_info *vq = &rnd->vq;
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
uint16_t idx;
|
uint16_t idx;
|
||||||
int ret;
|
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -317,20 +315,24 @@ virtio_rnd_get_entropy(void *param)
|
|||||||
* - avoid vring processing due to spurious wakeups
|
* - avoid vring processing due to spurious wakeups
|
||||||
* - catch missing notifications before acquiring rx_mtx
|
* - catch missing notifications before acquiring rx_mtx
|
||||||
*/
|
*/
|
||||||
while (!vq_has_descs(vq)) {
|
while (!vq_has_descs(vq))
|
||||||
ret = pthread_cond_wait(&rnd->rx_cond, &rnd->rx_mtx);
|
pthread_cond_wait(&rnd->rx_cond, &rnd->rx_mtx);
|
||||||
assert(ret == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
rnd->in_progress = 1;
|
rnd->in_progress = 1;
|
||||||
pthread_mutex_unlock(&rnd->rx_mtx);
|
pthread_mutex_unlock(&rnd->rx_mtx);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ret = vq_getchain(vq, &idx, &iov, 1, NULL);
|
vq_getchain(vq, &idx, &iov, 1, NULL);
|
||||||
assert(ret > 0);
|
|
||||||
|
|
||||||
len = read(rnd->fd, iov.iov_base, iov.iov_len);
|
len = read(rnd->fd, iov.iov_base, iov.iov_len);
|
||||||
assert(len > 0);
|
if (len <= 0) {
|
||||||
|
vq_retchain(vq);
|
||||||
|
vq_endchains(vq, 0);
|
||||||
|
|
||||||
|
/* no data available */
|
||||||
|
if (len == -1 && errno == EAGAIN)
|
||||||
|
return NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* release this chain and handle more */
|
/* release this chain and handle more */
|
||||||
vq_relchain(vq, idx, len);
|
vq_relchain(vq, idx, len);
|
||||||
@ -384,7 +386,10 @@ virtio_rnd_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
* Should always be able to open /dev/random.
|
* Should always be able to open /dev/random.
|
||||||
*/
|
*/
|
||||||
fd = open("/dev/random", O_RDONLY);
|
fd = open("/dev/random", O_RDONLY);
|
||||||
assert(fd >= 0);
|
if (fd < 0) {
|
||||||
|
WPRINTF(("virtio_rnd: open failed: /dev/random \n"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
rnd = calloc(1, sizeof(struct virtio_rnd));
|
rnd = calloc(1, sizeof(struct virtio_rnd));
|
||||||
if (!rnd) {
|
if (!rnd) {
|
||||||
@ -495,13 +500,16 @@ virtio_rnd_deinit(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
virtio_rnd_kernel_stop(rnd);
|
virtio_rnd_kernel_stop(rnd);
|
||||||
virtio_rnd_kernel_reset(rnd);
|
virtio_rnd_kernel_reset(rnd);
|
||||||
rnd->vbs_k.status = VIRTIO_DEV_INITIAL;
|
rnd->vbs_k.status = VIRTIO_DEV_INITIAL;
|
||||||
assert(rnd->vbs_k.fd >= 0);
|
if (rnd->vbs_k.fd >= 0) {
|
||||||
close(rnd->vbs_k.fd);
|
close(rnd->vbs_k.fd);
|
||||||
rnd->vbs_k.fd = -1;
|
rnd->vbs_k.fd = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(rnd->fd >= 0);
|
if (rnd->fd >= 0) {
|
||||||
close(rnd->fd);
|
close(rnd->fd);
|
||||||
|
rnd->fd = -1;
|
||||||
|
}
|
||||||
DPRINTF(("%s: free struct virtio_rnd!\n", __func__));
|
DPRINTF(("%s: free struct virtio_rnd!\n", __func__));
|
||||||
free(rnd);
|
free(rnd);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user