From ae07844717d18823146d9067ffbf50eddeb06378 Mon Sep 17 00:00:00 2001 From: fuyongjie Date: Tue, 23 Apr 2019 20:12:14 +0800 Subject: [PATCH] DM: virtio-gpio: close gpio line fd When vm reset,the gpio line state is busy if we don't close the fd. Tracked-On: #3028 Signed-off-by: fuyongjie Acked-by: Yu Wang --- devicemodel/hw/pci/virtio/virtio_gpio.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/devicemodel/hw/pci/virtio/virtio_gpio.c b/devicemodel/hw/pci/virtio/virtio_gpio.c index afb24cfe3..fd347a590 100644 --- a/devicemodel/hw/pci/virtio/virtio_gpio.c +++ b/devicemodel/hw/pci/virtio/virtio_gpio.c @@ -291,6 +291,7 @@ static void print_intr_statistics(struct gpio_irq_chip *chip); static void record_intr_statistics(struct gpio_irq_chip *chip, uint64_t mask); static void gpio_pio_write(struct virtio_gpio *gpio, int n, uint64_t reg); static uint32_t gpio_pio_read(struct virtio_gpio *gpio, int n); +static void native_gpio_close_line(struct gpio_line *line); static void native_gpio_update_line_info(struct gpio_line *line) @@ -324,10 +325,14 @@ native_gpio_update_line_info(struct gpio_line *line) static void native_gpio_close_chip(struct native_gpio_chip *chip) { + int i; if (chip) { memset(chip->name, 0, sizeof(chip->name)); memset(chip->label, 0, sizeof(chip->label)); memset(chip->dev_name, 0, sizeof(chip->dev_name)); + for (i = 0; i < chip->ngpio; i++) { + native_gpio_close_line(&chip->lines[i]); + } if (chip->fd > 0) { close(chip->fd); chip->fd = -1;