X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Flnx_virtio_balloon.c;h=f6608d260364afb2545f4a083a67658752b81cb8;hb=e3b62e7befa086a4fb320890952f54667ee46329;hp=0bd5727f9f1b8eb50d4a283fcec5680d402c4fbc;hpb=72420d58d18ec71d4777d029daaf0c6a1c820b32;p=palacios.git diff --git a/palacios/src/devices/lnx_virtio_balloon.c b/palacios/src/devices/lnx_virtio_balloon.c index 0bd5727..f6608d2 100644 --- a/palacios/src/devices/lnx_virtio_balloon.c +++ b/palacios/src/devices/lnx_virtio_balloon.c @@ -77,9 +77,7 @@ struct virtio_balloon_state { }; -static int virtio_free(struct vm_device * dev) { - return -1; -} + static int virtio_reset(struct virtio_balloon_state * virtio) { @@ -174,7 +172,7 @@ static int handle_kick(struct guest_info * core, struct virtio_balloon_state * v if (!(q->avail->flags & VIRTIO_NO_IRQ_FLAG)) { PrintDebug("Raising IRQ %d\n", virtio->pci_dev->config_header.intr_line); - v3_pci_raise_irq(virtio->pci_bus, 0, virtio->pci_dev); + v3_pci_raise_irq(virtio->pci_bus, virtio->pci_dev, 0); virtio->virtio_cfg.pci_isr = VIRTIO_ISR_ACTIVE; } @@ -338,7 +336,7 @@ static int virtio_io_read(struct guest_info * core, uint16_t port, void * dst, u case VIRTIO_ISR_PORT: *(uint8_t *)dst = virtio->virtio_cfg.pci_isr; virtio->virtio_cfg.pci_isr = 0; - v3_pci_lower_irq(virtio->pci_bus, 0, virtio->pci_dev); + v3_pci_lower_irq(virtio->pci_bus, virtio->pci_dev, 0); break; default: @@ -361,10 +359,17 @@ static int virtio_io_read(struct guest_info * core, uint16_t port, void * dst, u } +static int virtio_free(struct virtio_balloon_state * virtio) { + + // unregister from PCI + + V3_Free(virtio); + return 0; +} static struct v3_device_ops dev_ops = { - .free = virtio_free, + .free = (int (*)(void *))virtio_free, }; @@ -374,7 +379,7 @@ static int set_size(struct virtio_balloon_state * virtio, addr_t size) { PrintDebug("Requesting %d pages\n", virtio->balloon_cfg.requested_pages); - v3_pci_raise_irq(virtio->pci_bus, 0, virtio->pci_dev); + v3_pci_raise_irq(virtio->pci_bus, virtio->pci_dev, 0); virtio->virtio_cfg.pci_isr = VIRTIO_ISR_ACTIVE | VIRTIO_ISR_CFG_CHANGED; return 0; @@ -420,6 +425,12 @@ static int virtio_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { virtio_state = (struct virtio_balloon_state *)V3_Malloc(sizeof(struct virtio_balloon_state)); + + if (!virtio_state) { + PrintError("Cannot allocate in init\n"); + return -1; + } + memset(virtio_state, 0, sizeof(struct virtio_balloon_state)); @@ -471,7 +482,7 @@ static int virtio_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { pci_dev = v3_pci_register_device(pci_bus, PCI_STD_DEVICE, 0, PCI_AUTO_DEV_NUM, 0, "LNX_VIRTIO_BALLOON", bars, - NULL, NULL, NULL, virtio_state); + NULL, NULL, NULL, NULL, virtio_state); if (!pci_dev) { PrintError("Could not register PCI Device\n");