spapr/xive: Rework error handling of kvmppc_xive_mmap()
Callers currently check failures of kvmppc_xive_mmap() through the @errp argument, which isn't a recommanded practice. It is preferred to use a return value when possible. Since NULL isn't an invalid address in theory, it seems better to return MAP_FAILED and to teach callers to handle it. Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <159707845972.1489912.719896767746375765.stgit@bahia.lan> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
		
							parent
							
								
									46407a2531
								
							
						
					
					
						commit
						b14adb4a27
					
				@ -698,6 +698,7 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns MAP_FAILED on error and sets errno */
 | 
				
			||||||
static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
 | 
					static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
 | 
				
			||||||
                              Error **errp)
 | 
					                              Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -708,7 +709,6 @@ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
 | 
				
			|||||||
                pgoff << page_shift);
 | 
					                pgoff << page_shift);
 | 
				
			||||||
    if (addr == MAP_FAILED) {
 | 
					    if (addr == MAP_FAILED) {
 | 
				
			||||||
        error_setg_errno(errp, errno, "XIVE: unable to set memory mapping");
 | 
					        error_setg_errno(errp, errno, "XIVE: unable to set memory mapping");
 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return addr;
 | 
					    return addr;
 | 
				
			||||||
@ -728,6 +728,7 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers,
 | 
				
			|||||||
    size_t tima_len = 4ull << TM_SHIFT;
 | 
					    size_t tima_len = 4ull << TM_SHIFT;
 | 
				
			||||||
    CPUState *cs;
 | 
					    CPUState *cs;
 | 
				
			||||||
    int fd;
 | 
					    int fd;
 | 
				
			||||||
 | 
					    void *addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * The KVM XIVE device already in use. This is the case when
 | 
					     * The KVM XIVE device already in use. This is the case when
 | 
				
			||||||
@ -763,11 +764,12 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers,
 | 
				
			|||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * 1. Source ESB pages - KVM mapping
 | 
					     * 1. Source ESB pages - KVM mapping
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    xsrc->esb_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
 | 
					    addr = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
 | 
				
			||||||
                                      &local_err);
 | 
					                            &local_err);
 | 
				
			||||||
    if (local_err) {
 | 
					    if (addr == MAP_FAILED) {
 | 
				
			||||||
        goto fail;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    xsrc->esb_mmap = addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc),
 | 
					    memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc),
 | 
				
			||||||
                                      "xive.esb-kvm", esb_len, xsrc->esb_mmap);
 | 
					                                      "xive.esb-kvm", esb_len, xsrc->esb_mmap);
 | 
				
			||||||
@ -781,11 +783,13 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers,
 | 
				
			|||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * 3. TIMA pages - KVM mapping
 | 
					     * 3. TIMA pages - KVM mapping
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    xive->tm_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
 | 
					    addr = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
 | 
				
			||||||
                                     &local_err);
 | 
					                            &local_err);
 | 
				
			||||||
    if (local_err) {
 | 
					    if (addr == MAP_FAILED) {
 | 
				
			||||||
        goto fail;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    xive->tm_mmap = addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive),
 | 
					    memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive),
 | 
				
			||||||
                                      "xive.tima", tima_len, xive->tm_mmap);
 | 
					                                      "xive.tima", tima_len, xive->tm_mmap);
 | 
				
			||||||
    memory_region_add_subregion_overlap(&xive->tm_mmio, 0,
 | 
					    memory_region_add_subregion_overlap(&xive->tm_mmio, 0,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user