Improve error reporting in init_timer_alarm
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5634 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									c96f1a48d2
								
							
						
					
					
						commit
						7183b4b47a
					
				
							
								
								
									
										58
									
								
								vl.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								vl.c
									
									
									
									
									
								
							@ -1374,6 +1374,21 @@ static uint64_t qemu_next_deadline_dyntick(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Sets a specific flag */
 | 
				
			||||||
 | 
					static int fcntl_setfl(int fd, int flag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    flags = fcntl(fd, F_GETFL);
 | 
				
			||||||
 | 
					    if (flags == -1)
 | 
				
			||||||
 | 
					        return -errno;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (fcntl(fd, F_SETFL, flags | flag) == -1)
 | 
				
			||||||
 | 
					        return -errno;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__linux__)
 | 
					#if defined(__linux__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RTC_FREQ 1024
 | 
					#define RTC_FREQ 1024
 | 
				
			||||||
@ -1388,7 +1403,7 @@ static void enable_sigio_timer(int fd)
 | 
				
			|||||||
    act.sa_handler = host_alarm_handler;
 | 
					    act.sa_handler = host_alarm_handler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sigaction(SIGIO, &act, NULL);
 | 
					    sigaction(SIGIO, &act, NULL);
 | 
				
			||||||
    fcntl(fd, F_SETFL, O_ASYNC);
 | 
					    fcntl_setfl(fd, O_ASYNC);
 | 
				
			||||||
    fcntl(fd, F_SETOWN, getpid());
 | 
					    fcntl(fd, F_SETOWN, getpid());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1674,22 +1689,24 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif /* _WIN32 */
 | 
					#endif /* _WIN32 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void init_timer_alarm(void)
 | 
					static int init_timer_alarm(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct qemu_alarm_timer *t = NULL;
 | 
					    struct qemu_alarm_timer *t = NULL;
 | 
				
			||||||
    int i, err = -1;
 | 
					    int i, err = -1;
 | 
				
			||||||
    int fds[2];
 | 
					    int fds[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pipe(fds) < 0) {
 | 
					    err = pipe(fds);
 | 
				
			||||||
    fail:
 | 
					    if (err == -1)
 | 
				
			||||||
        perror("creating timer pipe");
 | 
					        return -errno;
 | 
				
			||||||
        exit(1);
 | 
					
 | 
				
			||||||
    }
 | 
					    err = fcntl_setfl(fds[0], O_NONBLOCK);
 | 
				
			||||||
    for (i = 0; i < 2; i++) {
 | 
					    if (err < 0)
 | 
				
			||||||
        int flags = fcntl(fds[i], F_GETFL);
 | 
					        goto fail;
 | 
				
			||||||
        if (flags == -1 || fcntl(fds[i], F_SETFL, flags | O_NONBLOCK))
 | 
					
 | 
				
			||||||
            goto fail;
 | 
					    err = fcntl_setfl(fds[1], O_NONBLOCK);
 | 
				
			||||||
    }
 | 
					    if (err < 0)
 | 
				
			||||||
 | 
					        goto fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    alarm_timer_rfd = fds[0];
 | 
					    alarm_timer_rfd = fds[0];
 | 
				
			||||||
    alarm_timer_wfd = fds[1];
 | 
					    alarm_timer_wfd = fds[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1702,12 +1719,18 @@ static void init_timer_alarm(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (err) {
 | 
					    if (err) {
 | 
				
			||||||
        fprintf(stderr, "Unable to find any suitable alarm timer.\n");
 | 
					        err = -ENOENT;
 | 
				
			||||||
        fprintf(stderr, "Terminating\n");
 | 
					        goto fail;
 | 
				
			||||||
        exit(1);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    alarm_timer = t;
 | 
					    alarm_timer = t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fail:
 | 
				
			||||||
 | 
					    close(fds[0]);
 | 
				
			||||||
 | 
					    close(fds[1]);
 | 
				
			||||||
 | 
					    return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void quit_timers(void)
 | 
					static void quit_timers(void)
 | 
				
			||||||
@ -6075,7 +6098,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
    setvbuf(stdout, NULL, _IOLBF, 0);
 | 
					    setvbuf(stdout, NULL, _IOLBF, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_timers();
 | 
					    init_timers();
 | 
				
			||||||
    init_timer_alarm();
 | 
					    if (init_timer_alarm() < 0) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "could not initialize alarm timer\n");
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (use_icount && icount_time_shift < 0) {
 | 
					    if (use_icount && icount_time_shift < 0) {
 | 
				
			||||||
        use_icount = 2;
 | 
					        use_icount = 2;
 | 
				
			||||||
        /* 125MIPS seems a reasonable initial guess at the guest speed.
 | 
					        /* 125MIPS seems a reasonable initial guess at the guest speed.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user