aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress
Make qemu_run_timers and qemu_run_all_timers return progress so that aio_poll etc. can determine whether a timer has been run. Signed-off-by: Alex Bligh <alex@alex.org.uk> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									cd758dd0ac
								
							
						
					
					
						commit
						f9a976b740
					
				| 
						 | 
					@ -92,8 +92,25 @@ bool timer_pending(QEMUTimer *ts);
 | 
				
			||||||
bool timer_expired(QEMUTimer *timer_head, int64_t current_time);
 | 
					bool timer_expired(QEMUTimer *timer_head, int64_t current_time);
 | 
				
			||||||
uint64_t timer_expire_time_ns(QEMUTimer *ts);
 | 
					uint64_t timer_expire_time_ns(QEMUTimer *ts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void qemu_run_timers(QEMUClock *clock);
 | 
					/**
 | 
				
			||||||
void qemu_run_all_timers(void);
 | 
					 * qemu_run_timers:
 | 
				
			||||||
 | 
					 * @clock: clock on which to operate
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Run all the timers associated with a clock.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns: true if any timer ran.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool qemu_run_timers(QEMUClock *clock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * qemu_run_all_timers:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Run all the timers associated with every clock.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns: true if any timer ran.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool qemu_run_all_timers(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void configure_alarms(char const *opt);
 | 
					void configure_alarms(char const *opt);
 | 
				
			||||||
void init_clocks(void);
 | 
					void init_clocks(void);
 | 
				
			||||||
int init_timer_alarm(void);
 | 
					int init_timer_alarm(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								qemu-timer.c
								
								
								
								
							
							
						
						
									
										18
									
								
								qemu-timer.c
								
								
								
								
							| 
						 | 
					@ -446,13 +446,14 @@ bool timer_expired(QEMUTimer *timer_head, int64_t current_time)
 | 
				
			||||||
    return timer_expired_ns(timer_head, current_time * timer_head->scale);
 | 
					    return timer_expired_ns(timer_head, current_time * timer_head->scale);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void qemu_run_timers(QEMUClock *clock)
 | 
					bool qemu_run_timers(QEMUClock *clock)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QEMUTimer *ts;
 | 
					    QEMUTimer *ts;
 | 
				
			||||||
    int64_t current_time;
 | 
					    int64_t current_time;
 | 
				
			||||||
 | 
					    bool progress = false;
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
    if (!clock->enabled)
 | 
					    if (!clock->enabled)
 | 
				
			||||||
        return;
 | 
					        return progress;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    current_time = qemu_get_clock_ns(clock);
 | 
					    current_time = qemu_get_clock_ns(clock);
 | 
				
			||||||
    for(;;) {
 | 
					    for(;;) {
 | 
				
			||||||
| 
						 | 
					@ -466,7 +467,9 @@ void qemu_run_timers(QEMUClock *clock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* run the callback (the timer list can be modified) */
 | 
					        /* run the callback (the timer list can be modified) */
 | 
				
			||||||
        ts->cb(ts->opaque);
 | 
					        ts->cb(ts->opaque);
 | 
				
			||||||
 | 
					        progress = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return progress;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int64_t qemu_get_clock_ns(QEMUClock *clock)
 | 
					int64_t qemu_get_clock_ns(QEMUClock *clock)
 | 
				
			||||||
| 
						 | 
					@ -521,20 +524,23 @@ uint64_t timer_expire_time_ns(QEMUTimer *ts)
 | 
				
			||||||
    return timer_pending(ts) ? ts->expire_time : -1;
 | 
					    return timer_pending(ts) ? ts->expire_time : -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void qemu_run_all_timers(void)
 | 
					bool qemu_run_all_timers(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    bool progress = false;
 | 
				
			||||||
    alarm_timer->pending = false;
 | 
					    alarm_timer->pending = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* vm time timers */
 | 
					    /* vm time timers */
 | 
				
			||||||
    qemu_run_timers(vm_clock);
 | 
					    progress |= qemu_run_timers(vm_clock);
 | 
				
			||||||
    qemu_run_timers(rt_clock);
 | 
					    progress |= qemu_run_timers(rt_clock);
 | 
				
			||||||
    qemu_run_timers(host_clock);
 | 
					    progress |= qemu_run_timers(host_clock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* rearm timer, if not periodic */
 | 
					    /* rearm timer, if not periodic */
 | 
				
			||||||
    if (alarm_timer->expired) {
 | 
					    if (alarm_timer->expired) {
 | 
				
			||||||
        alarm_timer->expired = false;
 | 
					        alarm_timer->expired = false;
 | 
				
			||||||
        qemu_rearm_alarm_timer(alarm_timer);
 | 
					        qemu_rearm_alarm_timer(alarm_timer);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return progress;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue