xen-220615, more SOB lines
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJViYb8AAoJEIlPj0hw4a6Qb3QP+wamEtk1SjkiIbdJRmTpGWIv E3SNZzTCP6c8Y6IBawk+5RHxzhepnbpYEhf/IPB6EJ+Ie9mZLcLTfkLiALMzGobZ 1hmrGwyoR76DJClDSCqOhKTjQKWaaGO1VLGv/iezXDJZxNb6C/OvbPVeE/KNEpVh aJ4//IqYVrJH+FuoJH1bmySWp4vvJljIAz1M0QoR4wJ303inRurKaY9wXuEQrnSx eX2P4ofCr1r23msMFEOK4hZol0cb7dQakP0i3mjEfXkv7glq6aBXrE94udbHGXuQ HRnoNZ1cJh8NSWck82WuAV5TIB3xjht7n3S/VqePAgVq77iXEc8DvrWyU6LL1BnZ xpyylZOYL6uE14yyVfyLTSoa5TcUZFWH1a0/KMF/b4LPUexqUGv/biagGANpgQeZ wnn+RiB3lvDAYpoVmpsfYxL+VDZwpq+C5EpKI1BTtB3xnyNv/+KD7GCH9u5oJUpt 83KlF902mqPkT2Lf0iAyTtSNrFeXdVcb1/yiobjmKLCA1rFfqGq6mVX5Q8B+tWYS gSXG3rAOBDjqoWZPrXsmLyYS0yvVpKNXBgUmA/7myPCg1TyJTpNL6NdrpY8So3xJ OAZ494vNz+rRs3IQbwkr38s1NkFfvDHcn2zk0oyVg2aRUB+dBJB39Gg9E4/KDode 3VM3Izi1kzTi2kGCfiHv =zq9t -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/sstabellini/tags/xen-220615-3' into staging xen-220615, more SOB lines # gpg: Signature made Tue Jun 23 17:19:08 2015 BST using RSA key ID 70E1AE90 # gpg: Good signature from "Stefano Stabellini <stefano.stabellini@eu.citrix.com>" * remotes/sstabellini/tags/xen-220615-3: Revert "xen-hvm: increase maxmem before calling xc_domain_populate_physmap" xen/pass-through: constify some static data xen/pass-through: log errno values rather than function return ones xen/pass-through: ROM BAR handling adjustments xen/pass-through: fold host PCI command register writes Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
						commit
						000d6042da
					
				| @ -249,10 +249,18 @@ static void xen_pt_pci_write_config(PCIDevice *d, uint32_t addr, | ||||
| 
 | ||||
|     /* check unused BAR register */ | ||||
|     index = xen_pt_bar_offset_to_index(addr); | ||||
|     if ((index >= 0) && (val > 0 && val < XEN_PT_BAR_ALLF) && | ||||
|         (s->bases[index].bar_flag == XEN_PT_BAR_FLAG_UNUSED)) { | ||||
|         XEN_PT_WARN(d, "Guest attempt to set address to unused Base Address " | ||||
|                     "Register. (addr: 0x%02x, len: %d)\n", addr, len); | ||||
|     if ((index >= 0) && (val != 0)) { | ||||
|         uint32_t chk = val; | ||||
| 
 | ||||
|         if (index == PCI_ROM_SLOT) | ||||
|             chk |= (uint32_t)~PCI_ROM_ADDRESS_MASK; | ||||
| 
 | ||||
|         if ((chk != XEN_PT_BAR_ALLF) && | ||||
|             (s->bases[index].bar_flag == XEN_PT_BAR_FLAG_UNUSED)) { | ||||
|             XEN_PT_WARN(d, "Guest attempt to set address to unused " | ||||
|                         "Base Address Register. (addr: 0x%02x, len: %d)\n", | ||||
|                         addr, len); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /* find register group entry */ | ||||
| @ -607,8 +615,8 @@ static void xen_pt_region_update(XenPCIPassthroughState *s, | ||||
|                                       guest_port, machine_port, size, | ||||
|                                       op); | ||||
|         if (rc) { | ||||
|             XEN_PT_ERR(d, "%s ioport mapping failed! (rc: %i)\n", | ||||
|                        adding ? "create new" : "remove old", rc); | ||||
|             XEN_PT_ERR(d, "%s ioport mapping failed! (err: %i)\n", | ||||
|                        adding ? "create new" : "remove old", errno); | ||||
|         } | ||||
|     } else { | ||||
|         pcibus_t guest_addr = sec->offset_within_address_space; | ||||
| @ -621,8 +629,8 @@ static void xen_pt_region_update(XenPCIPassthroughState *s, | ||||
|                                       XEN_PFN(size + XC_PAGE_SIZE - 1), | ||||
|                                       op); | ||||
|         if (rc) { | ||||
|             XEN_PT_ERR(d, "%s mem mapping failed! (rc: %i)\n", | ||||
|                        adding ? "create new" : "remove old", rc); | ||||
|             XEN_PT_ERR(d, "%s mem mapping failed! (err: %i)\n", | ||||
|                        adding ? "create new" : "remove old", errno); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -736,14 +744,11 @@ static int xen_pt_initfn(PCIDevice *d) | ||||
|     rc = xc_physdev_map_pirq(xen_xc, xen_domid, machine_irq, &pirq); | ||||
| 
 | ||||
|     if (rc < 0) { | ||||
|         XEN_PT_ERR(d, "Mapping machine irq %u to pirq %i failed, (rc: %d)\n", | ||||
|                    machine_irq, pirq, rc); | ||||
|         XEN_PT_ERR(d, "Mapping machine irq %u to pirq %i failed, (err: %d)\n", | ||||
|                    machine_irq, pirq, errno); | ||||
| 
 | ||||
|         /* Disable PCI intx assertion (turn on bit10 of devctl) */ | ||||
|         xen_host_pci_set_word(&s->real_device, | ||||
|                               PCI_COMMAND, | ||||
|                               pci_get_word(s->dev.config + PCI_COMMAND) | ||||
|                               | PCI_COMMAND_INTX_DISABLE); | ||||
|         cmd |= PCI_COMMAND_INTX_DISABLE; | ||||
|         machine_irq = 0; | ||||
|         s->machine_irq = 0; | ||||
|     } else { | ||||
| @ -761,19 +766,17 @@ static int xen_pt_initfn(PCIDevice *d) | ||||
|                                        PCI_SLOT(d->devfn), | ||||
|                                        e_intx); | ||||
|         if (rc < 0) { | ||||
|             XEN_PT_ERR(d, "Binding of interrupt %i failed! (rc: %d)\n", | ||||
|                        e_intx, rc); | ||||
|             XEN_PT_ERR(d, "Binding of interrupt %i failed! (err: %d)\n", | ||||
|                        e_intx, errno); | ||||
| 
 | ||||
|             /* Disable PCI intx assertion (turn on bit10 of devctl) */ | ||||
|             xen_host_pci_set_word(&s->real_device, PCI_COMMAND, | ||||
|                                   *(uint16_t *)(&s->dev.config[PCI_COMMAND]) | ||||
|                                   | PCI_COMMAND_INTX_DISABLE); | ||||
|             cmd |= PCI_COMMAND_INTX_DISABLE; | ||||
|             xen_pt_mapped_machine_irq[machine_irq]--; | ||||
| 
 | ||||
|             if (xen_pt_mapped_machine_irq[machine_irq] == 0) { | ||||
|                 if (xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq)) { | ||||
|                     XEN_PT_ERR(d, "Unmapping of machine interrupt %i failed!" | ||||
|                                " (rc: %d)\n", machine_irq, rc); | ||||
|                                " (err: %d)\n", machine_irq, errno); | ||||
|                 } | ||||
|             } | ||||
|             s->machine_irq = 0; | ||||
| @ -811,9 +814,9 @@ static void xen_pt_unregister_device(PCIDevice *d) | ||||
|                                      0 /* isa_irq */); | ||||
|         if (rc < 0) { | ||||
|             XEN_PT_ERR(d, "unbinding of interrupt INT%c failed." | ||||
|                        " (machine irq: %i, rc: %d)" | ||||
|                        " (machine irq: %i, err: %d)" | ||||
|                        " But bravely continuing on..\n", | ||||
|                        'a' + intx, machine_irq, rc); | ||||
|                        'a' + intx, machine_irq, errno); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -831,9 +834,9 @@ static void xen_pt_unregister_device(PCIDevice *d) | ||||
|             rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq); | ||||
| 
 | ||||
|             if (rc < 0) { | ||||
|                 XEN_PT_ERR(d, "unmapping of interrupt %i failed. (rc: %d)" | ||||
|                 XEN_PT_ERR(d, "unmapping of interrupt %i failed. (err: %d)" | ||||
|                            " But bravely continuing on..\n", | ||||
|                            machine_irq, rc); | ||||
|                            machine_irq, errno); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -31,7 +31,7 @@ void xen_pt_log(const PCIDevice *d, const char *f, ...) GCC_FMT_ATTR(2, 3); | ||||
| /* Helper */ | ||||
| #define XEN_PFN(x) ((x) >> XC_PAGE_SHIFT) | ||||
| 
 | ||||
| typedef struct XenPTRegInfo XenPTRegInfo; | ||||
| typedef const struct XenPTRegInfo XenPTRegInfo; | ||||
| typedef struct XenPTReg XenPTReg; | ||||
| 
 | ||||
| typedef struct XenPCIPassthroughState XenPCIPassthroughState; | ||||
| @ -133,11 +133,11 @@ struct XenPTReg { | ||||
|     uint32_t data; /* emulated value */ | ||||
| }; | ||||
| 
 | ||||
| typedef struct XenPTRegGroupInfo XenPTRegGroupInfo; | ||||
| typedef const struct XenPTRegGroupInfo XenPTRegGroupInfo; | ||||
| 
 | ||||
| /* emul reg group size initialize method */ | ||||
| typedef int (*xen_pt_reg_size_init_fn) | ||||
|     (XenPCIPassthroughState *, const XenPTRegGroupInfo *, | ||||
|     (XenPCIPassthroughState *, XenPTRegGroupInfo *, | ||||
|      uint32_t base_offset, uint8_t *size); | ||||
| 
 | ||||
| /* emulated register group information */ | ||||
| @ -152,7 +152,7 @@ struct XenPTRegGroupInfo { | ||||
| /* emul register group management table */ | ||||
| typedef struct XenPTRegGroup { | ||||
|     QLIST_ENTRY(XenPTRegGroup) entries; | ||||
|     const XenPTRegGroupInfo *reg_grp; | ||||
|     XenPTRegGroupInfo *reg_grp; | ||||
|     uint32_t base_offset; | ||||
|     uint8_t size; | ||||
|     QLIST_HEAD(, XenPTReg) reg_tbl_list; | ||||
|  | ||||
| @ -96,8 +96,7 @@ XenPTReg *xen_pt_find_reg(XenPTRegGroup *reg_grp, uint32_t address) | ||||
| } | ||||
| 
 | ||||
| static uint32_t get_throughable_mask(const XenPCIPassthroughState *s, | ||||
|                                      const XenPTRegInfo *reg, | ||||
|                                      uint32_t valid_mask) | ||||
|                                      XenPTRegInfo *reg, uint32_t valid_mask) | ||||
| { | ||||
|     uint32_t throughable_mask = ~(reg->emu_mask | reg->ro_mask); | ||||
| 
 | ||||
| @ -729,8 +728,8 @@ static XenPTRegInfo xen_pt_emu_reg_header0[] = { | ||||
|         .offset     = PCI_ROM_ADDRESS, | ||||
|         .size       = 4, | ||||
|         .init_val   = 0x00000000, | ||||
|         .ro_mask    = 0x000007FE, | ||||
|         .emu_mask   = 0xFFFFF800, | ||||
|         .ro_mask    = ~PCI_ROM_ADDRESS_MASK & ~PCI_ROM_ADDRESS_ENABLE, | ||||
|         .emu_mask   = (uint32_t)PCI_ROM_ADDRESS_MASK, | ||||
|         .init       = xen_pt_bar_reg_init, | ||||
|         .u.dw.read  = xen_pt_long_reg_read, | ||||
|         .u.dw.write = xen_pt_exp_rom_bar_reg_write, | ||||
|  | ||||
| @ -132,8 +132,8 @@ static int msi_msix_setup(XenPCIPassthroughState *s, | ||||
|                                      msix_entry, table_base); | ||||
|         if (rc) { | ||||
|             XEN_PT_ERR(&s->dev, | ||||
|                        "Mapping of MSI%s (rc: %i, vec: %#x, entry %#x)\n", | ||||
|                        is_msix ? "-X" : "", rc, gvec, msix_entry); | ||||
|                        "Mapping of MSI%s (err: %i, vec: %#x, entry %#x)\n", | ||||
|                        is_msix ? "-X" : "", errno, gvec, msix_entry); | ||||
|             return rc; | ||||
|         } | ||||
|     } | ||||
| @ -166,12 +166,12 @@ static int msi_msix_update(XenPCIPassthroughState *s, | ||||
|                                   pirq, gflags, table_addr); | ||||
| 
 | ||||
|     if (rc) { | ||||
|         XEN_PT_ERR(d, "Updating of MSI%s failed. (rc: %d)\n", | ||||
|                    is_msix ? "-X" : "", rc); | ||||
|         XEN_PT_ERR(d, "Updating of MSI%s failed. (err: %d)\n", | ||||
|                    is_msix ? "-X" : "", errno); | ||||
| 
 | ||||
|         if (xc_physdev_unmap_pirq(xen_xc, xen_domid, *old_pirq)) { | ||||
|             XEN_PT_ERR(d, "Unmapping of MSI%s pirq %d failed.\n", | ||||
|                        is_msix ? "-X" : "", *old_pirq); | ||||
|             XEN_PT_ERR(d, "Unmapping of MSI%s pirq %d failed. (err: %d)\n", | ||||
|                        is_msix ? "-X" : "", *old_pirq, errno); | ||||
|         } | ||||
|         *old_pirq = XEN_PT_UNASSIGNED_PIRQ; | ||||
|     } | ||||
| @ -199,8 +199,8 @@ static int msi_msix_disable(XenPCIPassthroughState *s, | ||||
|                    is_msix ? "-X" : "", pirq, gvec); | ||||
|         rc = xc_domain_unbind_msi_irq(xen_xc, xen_domid, gvec, pirq, gflags); | ||||
|         if (rc) { | ||||
|             XEN_PT_ERR(d, "Unbinding of MSI%s failed. (pirq: %d, gvec: %#x)\n", | ||||
|                        is_msix ? "-X" : "", pirq, gvec); | ||||
|             XEN_PT_ERR(d, "Unbinding of MSI%s failed. (err: %d, pirq: %d, gvec: %#x)\n", | ||||
|                        is_msix ? "-X" : "", errno, pirq, gvec); | ||||
|             return rc; | ||||
|         } | ||||
|     } | ||||
| @ -208,8 +208,8 @@ static int msi_msix_disable(XenPCIPassthroughState *s, | ||||
|     XEN_PT_LOG(d, "Unmap MSI%s pirq %d\n", is_msix ? "-X" : "", pirq); | ||||
|     rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, pirq); | ||||
|     if (rc) { | ||||
|         XEN_PT_ERR(d, "Unmapping of MSI%s pirq %d failed. (rc: %i)\n", | ||||
|                    is_msix ? "-X" : "", pirq, rc); | ||||
|         XEN_PT_ERR(d, "Unmapping of MSI%s pirq %d failed. (err: %i)\n", | ||||
|                    is_msix ? "-X" : "", pirq, errno); | ||||
|         return rc; | ||||
|     } | ||||
| 
 | ||||
| @ -385,8 +385,8 @@ int xen_pt_msix_update_remap(XenPCIPassthroughState *s, int bar_index) | ||||
|             ret = xc_domain_unbind_pt_irq(xen_xc, xen_domid, entry->pirq, | ||||
|                                           PT_IRQ_TYPE_MSI, 0, 0, 0, 0); | ||||
|             if (ret) { | ||||
|                 XEN_PT_ERR(&s->dev, "unbind MSI-X entry %d failed\n", | ||||
|                            entry->pirq); | ||||
|                 XEN_PT_ERR(&s->dev, "unbind MSI-X entry %d failed (err: %d)\n", | ||||
|                            entry->pirq, errno); | ||||
|             } | ||||
|             entry->updated = true; | ||||
|         } | ||||
|  | ||||
							
								
								
									
										24
									
								
								xen-hvm.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								xen-hvm.c
									
									
									
									
									
								
							| @ -87,12 +87,6 @@ static inline ioreq_t *xen_vcpu_ioreq(shared_iopage_t *shared_page, int vcpu) | ||||
| #endif | ||||
| 
 | ||||
| #define BUFFER_IO_MAX_DELAY  100 | ||||
| /* Leave some slack so that hvmloader does not complain about lack of
 | ||||
|  * memory at boot time ("Could not allocate order=0 extent"). | ||||
|  * Once hvmloader is modified to cope with that situation without | ||||
|  * printing warning messages, QEMU_SPARE_PAGES can be removed. | ||||
|  */ | ||||
| #define QEMU_SPARE_PAGES 16 | ||||
| 
 | ||||
| typedef struct XenPhysmap { | ||||
|     hwaddr start_addr; | ||||
| @ -250,8 +244,6 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) | ||||
|     unsigned long nr_pfn; | ||||
|     xen_pfn_t *pfn_list; | ||||
|     int i; | ||||
|     xc_domaininfo_t info; | ||||
|     unsigned long free_pages; | ||||
| 
 | ||||
|     if (runstate_check(RUN_STATE_INMIGRATE)) { | ||||
|         /* RAM already populated in Xen */ | ||||
| @ -274,22 +266,6 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) | ||||
|         pfn_list[i] = (ram_addr >> TARGET_PAGE_BITS) + i; | ||||
|     } | ||||
| 
 | ||||
|     if ((xc_domain_getinfolist(xen_xc, xen_domid, 1, &info) != 1) || | ||||
|         (info.domain != xen_domid)) { | ||||
|         hw_error("xc_domain_getinfolist failed"); | ||||
|     } | ||||
|     free_pages = info.max_pages - info.tot_pages; | ||||
|     if (free_pages > QEMU_SPARE_PAGES) { | ||||
|         free_pages -= QEMU_SPARE_PAGES; | ||||
|     } else { | ||||
|         free_pages = 0; | ||||
|     } | ||||
|     if ((free_pages < nr_pfn) && | ||||
|         (xc_domain_setmaxmem(xen_xc, xen_domid, | ||||
|                              ((info.max_pages + nr_pfn - free_pages) | ||||
|                               << (XC_PAGE_SHIFT - 10))) < 0)) { | ||||
|         hw_error("xc_domain_setmaxmem failed"); | ||||
|     } | ||||
|     if (xc_domain_populate_physmap_exact(xen_xc, xen_domid, nr_pfn, 0, 0, pfn_list)) { | ||||
|         hw_error("xen: failed to populate ram at " RAM_ADDR_FMT, ram_addr); | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Maydell
						Peter Maydell