diff --git a/include/kvm/uip.h b/include/kvm/uip.h index 4e63808..a9a8d85 100644 --- a/include/kvm/uip.h +++ b/include/kvm/uip.h @@ -334,6 +334,7 @@ static inline u16 uip_eth_hdrlen(struct uip_eth *eth) int uip_tx(struct iovec *iov, u16 out, struct uip_info *info); int uip_rx(struct iovec *iov, u16 in, struct uip_info *info); +void uip_static_init(struct uip_info *info); int uip_init(struct uip_info *info); int uip_tx_do_ipv4_udp_dhcp(struct uip_tx_arg *arg); diff --git a/net/uip/core.c b/net/uip/core.c index 789b814..b3cd8c2 100644 --- a/net/uip/core.c +++ b/net/uip/core.c @@ -94,19 +94,15 @@ int uip_rx(struct iovec *iov, u16 in, struct uip_info *info) return len; } -int uip_init(struct uip_info *info) +void uip_static_init(struct uip_info *info) { struct list_head *udp_socket_head; struct list_head *tcp_socket_head; struct list_head *buf_head; - struct uip_buf *buf; - int buf_nr; - int i; udp_socket_head = &info->udp_socket_head; tcp_socket_head = &info->tcp_socket_head; buf_head = &info->buf_head; - buf_nr = info->buf_nr; INIT_LIST_HEAD(udp_socket_head); INIT_LIST_HEAD(tcp_socket_head); @@ -119,6 +115,18 @@ int uip_init(struct uip_info *info) pthread_cond_init(&info->buf_used_cond, NULL); pthread_cond_init(&info->buf_free_cond, NULL); + info->buf_used_nr = 0; +} + +int uip_init(struct uip_info *info) +{ + struct list_head *buf_head; + struct uip_buf *buf; + int buf_nr; + int i; + + buf_head = &info->buf_head; + buf_nr = info->buf_nr; for (i = 0; i < buf_nr; i++) { buf = malloc(sizeof(*buf)); @@ -141,7 +149,6 @@ int uip_init(struct uip_info *info) } info->buf_free_nr = buf_nr; - info->buf_used_nr = 0; uip_dhcp_get_dns(info); diff --git a/virtio/net.c b/virtio/net.c index 298903c..2c34996 100644 --- a/virtio/net.c +++ b/virtio/net.c @@ -712,6 +712,7 @@ static int virtio_net__init_one(struct virtio_net_params *params) ndev->info.guest_netmask = ntohl(inet_addr("255.255.255.0")); ndev->info.buf_nr = 20, ndev->ops = &uip_ops; + uip_static_init(&ndev->info); } if (params->trans && strcmp(params->trans, "mmio") == 0)