Xen 2017/02/02
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJYk3nyAAoJEIlPj0hw4a6Q4kcP/1awM8VPkvkb85sqwxIj4RI8 Yuhmx//gT8cDiXZmxxx3sEk5221kc3DpwieQf0aAHR8EsXdczY/GbkZI6LcUI4E9 2oN69gtLoxPVQY+bLJ2JXnGyhHKW2+iKKxzur1KkpgCo1FSxAuXEe1KT5WZsM6nY DcKRV7oRJWCYdCtU6LVVXY+wtLT2/4QEdQbAsLUIamSQ88u4HHtKtjAyra95oNnS 75XW7GDemPh82ATk1NF4hhxaA9wR9DThBxqmm8DUCcCJAwEYafKV/vLxmpXd2vPO tOi2QZsEgvjNxIV2Gn0kY1XQxiG1If3dRl4W8Q05oUyAGI6Cz7Yrz+l/um/usxko NYqVbD1+HcrA8BBifh+FC2lsFD+S1Yd+zqkC2O2WkMzR1raFHnvAJBUySN/HcCni /68hmHiudBgInA9bLmN5XwY3uJ6f4nWHpRGaarFuCNCxVdQy1AZOpdlUEP2p6naP fkwJCGFODhy9xNTmKS7WGlddeGkaW4XsONo5iTHcx377eX2zaUminKxIuCkGqbwd 3qrbu1aMGpTK7WchHEfO3qJBbsIC0gG9YakUzGgbUIkEuorqDOEf9RJ/qoHq4Emo sdPGwcKnrV1SUJl0RzIAqQgoB681AwGVsybFJwJv3evw9Q8DCgpZX7edAGnqZ3lG QlZbfdbVVjpz17sQebuX =xxXu -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/sstabellini/tags/xen-20170202' into staging Xen 2017/02/02 # gpg: Signature made Thu 02 Feb 2017 18:26:58 GMT # gpg: using RSA key 0x894F8F4870E1AE90 # gpg: Good signature from "Stefano Stabellini <sstabellini@kernel.org>" # gpg: aka "Stefano Stabellini <stefano.stabellini@eu.citrix.com>" # Primary key fingerprint: D04E 33AB A51F 67BA 07D3 0AEA 894F 8F48 70E1 AE90 * remotes/sstabellini/tags/xen-20170202: xen: use qdev_unplug() instead of g_free() in xen_pv_find_xendev() MAINTAINERS: Update xen-devel mailing list address xen-platform: add missing disk unplug option xen-platform: add support for unplugging NVMe disks... xen-platform: re-structure unplug_disks Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
						commit
						4100a344eb
					
				| @ -323,7 +323,7 @@ Guest CPU Cores (Xen): | ||||
| X86 | ||||
| M: Stefano Stabellini <sstabellini@kernel.org> | ||||
| M: Anthony Perard <anthony.perard@citrix.com> | ||||
| L: xen-devel@lists.xensource.com | ||||
| L: xen-devel@lists.xenproject.org | ||||
| S: Supported | ||||
| F: xen-* | ||||
| F: */xen* | ||||
|  | ||||
| @ -88,7 +88,7 @@ static void log_writeb(PCIXenPlatformState *s, char val) | ||||
| } | ||||
| 
 | ||||
| /* Xen Platform, Fixed IOPort */ | ||||
| #define UNPLUG_ALL_IDE_DISKS 1 | ||||
| #define UNPLUG_ALL_DISKS 1 | ||||
| #define UNPLUG_ALL_NICS 2 | ||||
| #define UNPLUG_AUX_IDE_DISKS 4 | ||||
| 
 | ||||
| @ -107,23 +107,37 @@ static void pci_unplug_nics(PCIBus *bus) | ||||
|     pci_for_each_device(bus, 0, unplug_nic, NULL); | ||||
| } | ||||
| 
 | ||||
| static void unplug_disks(PCIBus *b, PCIDevice *d, void *o) | ||||
| static void unplug_disks(PCIBus *b, PCIDevice *d, void *opaque) | ||||
| { | ||||
|     uint32_t flags = *(uint32_t *)opaque; | ||||
|     bool aux = (flags & UNPLUG_AUX_IDE_DISKS) && | ||||
|         !(flags & UNPLUG_ALL_DISKS); | ||||
| 
 | ||||
|     /* We have to ignore passthrough devices */ | ||||
|     if (pci_get_word(d->config + PCI_CLASS_DEVICE) == | ||||
|             PCI_CLASS_STORAGE_IDE | ||||
|             && strcmp(d->name, "xen-pci-passthrough") != 0) { | ||||
|         pci_piix3_xen_ide_unplug(DEVICE(d)); | ||||
|     } else if (pci_get_word(d->config + PCI_CLASS_DEVICE) == | ||||
|             PCI_CLASS_STORAGE_SCSI | ||||
|             && strcmp(d->name, "xen-pci-passthrough") != 0) { | ||||
|         object_unparent(OBJECT(d)); | ||||
|     if (!strcmp(d->name, "xen-pci-passthrough")) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     switch (pci_get_word(d->config + PCI_CLASS_DEVICE)) { | ||||
|     case PCI_CLASS_STORAGE_IDE: | ||||
|         pci_piix3_xen_ide_unplug(DEVICE(d), aux); | ||||
|         break; | ||||
| 
 | ||||
|     case PCI_CLASS_STORAGE_SCSI: | ||||
|     case PCI_CLASS_STORAGE_EXPRESS: | ||||
|         if (!aux) { | ||||
|             object_unparent(OBJECT(d)); | ||||
|         } | ||||
|         break; | ||||
| 
 | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static void pci_unplug_disks(PCIBus *bus) | ||||
| static void pci_unplug_disks(PCIBus *bus, uint32_t flags) | ||||
| { | ||||
|     pci_for_each_device(bus, 0, unplug_disks, NULL); | ||||
|     pci_for_each_device(bus, 0, unplug_disks, &flags); | ||||
| } | ||||
| 
 | ||||
| static void platform_fixed_ioport_writew(void *opaque, uint32_t addr, uint32_t val) | ||||
| @ -134,19 +148,16 @@ static void platform_fixed_ioport_writew(void *opaque, uint32_t addr, uint32_t v | ||||
|     case 0: { | ||||
|         PCIDevice *pci_dev = PCI_DEVICE(s); | ||||
|         /* Unplug devices.  Value is a bitmask of which devices to
 | ||||
|            unplug, with bit 0 the IDE devices, bit 1 the network | ||||
|            unplug, with bit 0 the disk devices, bit 1 the network | ||||
|            devices, and bit 2 the non-primary-master IDE devices. */ | ||||
|         if (val & UNPLUG_ALL_IDE_DISKS) { | ||||
|         if (val & (UNPLUG_ALL_DISKS | UNPLUG_AUX_IDE_DISKS)) { | ||||
|             DPRINTF("unplug disks\n"); | ||||
|             pci_unplug_disks(pci_dev->bus); | ||||
|             pci_unplug_disks(pci_dev->bus, val); | ||||
|         } | ||||
|         if (val & UNPLUG_ALL_NICS) { | ||||
|             DPRINTF("unplug nics\n"); | ||||
|             pci_unplug_nics(pci_dev->bus); | ||||
|         } | ||||
|         if (val & UNPLUG_AUX_IDE_DISKS) { | ||||
|             DPRINTF("unplug auxiliary disks not supported\n"); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|     case 2: | ||||
| @ -327,14 +338,14 @@ static void xen_platform_ioport_writeb(void *opaque, hwaddr addr, | ||||
|              * If VMDP was to control both disk and LAN it would use 4. | ||||
|              * If it controlled just disk or just LAN, it would use 8 below. | ||||
|              */ | ||||
|             pci_unplug_disks(pci_dev->bus); | ||||
|             pci_unplug_disks(pci_dev->bus, UNPLUG_ALL_DISKS); | ||||
|             pci_unplug_nics(pci_dev->bus); | ||||
|         } | ||||
|         break; | ||||
|     case 8: | ||||
|         switch (val) { | ||||
|         case 1: | ||||
|             pci_unplug_disks(pci_dev->bus); | ||||
|             pci_unplug_disks(pci_dev->bus, UNPLUG_ALL_DISKS); | ||||
|             break; | ||||
|         case 2: | ||||
|             pci_unplug_nics(pci_dev->bus); | ||||
|  | ||||
| @ -165,7 +165,7 @@ static void pci_piix_ide_realize(PCIDevice *dev, Error **errp) | ||||
|     pci_piix_init_ports(d); | ||||
| } | ||||
| 
 | ||||
| int pci_piix3_xen_ide_unplug(DeviceState *dev) | ||||
| int pci_piix3_xen_ide_unplug(DeviceState *dev, bool aux) | ||||
| { | ||||
|     PCIIDEState *pci_ide; | ||||
|     DriveInfo *di; | ||||
| @ -174,7 +174,7 @@ int pci_piix3_xen_ide_unplug(DeviceState *dev) | ||||
| 
 | ||||
|     pci_ide = PCI_IDE(dev); | ||||
| 
 | ||||
|     for (i = 0; i < 4; i++) { | ||||
|     for (i = aux ? 1 : 0; i < 4; i++) { | ||||
|         di = drive_get_by_index(IF_IDE, i); | ||||
|         if (di != NULL && !di->media_cd) { | ||||
|             BlockBackend *blk = blk_by_legacy_dinfo(di); | ||||
|  | ||||
| @ -124,10 +124,11 @@ static struct XenDevice *xen_be_get_xendev(const char *type, int dom, int dev, | ||||
|     /* init new xendev */ | ||||
|     xendev = g_malloc0(ops->size); | ||||
|     object_initialize(&xendev->qdev, ops->size, TYPE_XENBACKEND); | ||||
|     qdev_set_parent_bus(&xendev->qdev, xen_sysbus); | ||||
|     qdev_set_id(&xendev->qdev, g_strdup_printf("xen-%s-%d", type, dev)); | ||||
|     qdev_init_nofail(&xendev->qdev); | ||||
|     object_unref(OBJECT(&xendev->qdev)); | ||||
|     OBJECT(xendev)->free = g_free; | ||||
|     qdev_set_parent_bus(DEVICE(xendev), xen_sysbus); | ||||
|     qdev_set_id(DEVICE(xendev), g_strdup_printf("xen-%s-%d", type, dev)); | ||||
|     qdev_init_nofail(DEVICE(xendev)); | ||||
|     object_unref(OBJECT(xendev)); | ||||
| 
 | ||||
|     xendev->type  = type; | ||||
|     xendev->dom   = dom; | ||||
| @ -145,7 +146,7 @@ static struct XenDevice *xen_be_get_xendev(const char *type, int dom, int dev, | ||||
|     xendev->evtchndev = xenevtchn_open(NULL, 0); | ||||
|     if (xendev->evtchndev == NULL) { | ||||
|         xen_pv_printf(NULL, 0, "can't open evtchn device\n"); | ||||
|         g_free(xendev); | ||||
|         qdev_unplug(DEVICE(xendev), NULL); | ||||
|         return NULL; | ||||
|     } | ||||
|     fcntl(xenevtchn_fd(xendev->evtchndev), F_SETFD, FD_CLOEXEC); | ||||
| @ -155,7 +156,7 @@ static struct XenDevice *xen_be_get_xendev(const char *type, int dom, int dev, | ||||
|         if (xendev->gnttabdev == NULL) { | ||||
|             xen_pv_printf(NULL, 0, "can't open gnttab device\n"); | ||||
|             xenevtchn_close(xendev->evtchndev); | ||||
|             g_free(xendev); | ||||
|             qdev_unplug(DEVICE(xendev), NULL); | ||||
|             return NULL; | ||||
|         } | ||||
|     } else { | ||||
|  | ||||
| @ -17,7 +17,7 @@ void pci_cmd646_ide_init(PCIBus *bus, DriveInfo **hd_table, | ||||
| PCIDevice *pci_piix3_xen_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn); | ||||
| PCIDevice *pci_piix3_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn); | ||||
| PCIDevice *pci_piix4_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn); | ||||
| int pci_piix3_xen_ide_unplug(DeviceState *dev); | ||||
| int pci_piix3_xen_ide_unplug(DeviceState *dev, bool aux); | ||||
| void vt82c686b_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn); | ||||
| 
 | ||||
| /* ide-mmio.c */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Maydell
						Peter Maydell