iothread: add polling parameters
Poll mode can be configured with -object iothread,poll-max-ns=NUM. Polling is disabled with a value of 0 nanoseconds. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 20161201192652.9509-7-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									ee68697551
								
							
						
					
					
						commit
						0d9d86fb4d
					
				| 
						 | 
				
			
			@ -28,6 +28,9 @@ typedef struct {
 | 
			
		|||
    QemuCond init_done_cond;    /* is thread initialization done? */
 | 
			
		||||
    bool stopping;
 | 
			
		||||
    int thread_id;
 | 
			
		||||
 | 
			
		||||
    /* AioContext poll parameters */
 | 
			
		||||
    int64_t poll_max_ns;
 | 
			
		||||
} IOThread;
 | 
			
		||||
 | 
			
		||||
#define IOTHREAD(obj) \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										50
									
								
								iothread.c
								
								
								
								
							
							
						
						
									
										50
									
								
								iothread.c
								
								
								
								
							| 
						 | 
				
			
			@ -98,6 +98,15 @@ static void iothread_complete(UserCreatable *obj, Error **errp)
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    aio_context_set_poll_params(iothread->ctx, iothread->poll_max_ns,
 | 
			
		||||
                                &local_error);
 | 
			
		||||
    if (local_error) {
 | 
			
		||||
        error_propagate(errp, local_error);
 | 
			
		||||
        aio_context_unref(iothread->ctx);
 | 
			
		||||
        iothread->ctx = NULL;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    qemu_mutex_init(&iothread->init_done_lock);
 | 
			
		||||
    qemu_cond_init(&iothread->init_done_cond);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -120,10 +129,51 @@ static void iothread_complete(UserCreatable *obj, Error **errp)
 | 
			
		|||
    qemu_mutex_unlock(&iothread->init_done_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void iothread_get_poll_max_ns(Object *obj, Visitor *v,
 | 
			
		||||
        const char *name, void *opaque, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    IOThread *iothread = IOTHREAD(obj);
 | 
			
		||||
 | 
			
		||||
    visit_type_int64(v, name, &iothread->poll_max_ns, errp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void iothread_set_poll_max_ns(Object *obj, Visitor *v,
 | 
			
		||||
        const char *name, void *opaque, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    IOThread *iothread = IOTHREAD(obj);
 | 
			
		||||
    Error *local_err = NULL;
 | 
			
		||||
    int64_t value;
 | 
			
		||||
 | 
			
		||||
    visit_type_int64(v, name, &value, &local_err);
 | 
			
		||||
    if (local_err) {
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (value < 0) {
 | 
			
		||||
        error_setg(&local_err, "poll_max_ns value must be in range "
 | 
			
		||||
                   "[0, %"PRId64"]", INT64_MAX);
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    iothread->poll_max_ns = value;
 | 
			
		||||
 | 
			
		||||
    if (iothread->ctx) {
 | 
			
		||||
        aio_context_set_poll_params(iothread->ctx, value, &local_err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
    error_propagate(errp, local_err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void iothread_class_init(ObjectClass *klass, void *class_data)
 | 
			
		||||
{
 | 
			
		||||
    UserCreatableClass *ucc = USER_CREATABLE_CLASS(klass);
 | 
			
		||||
    ucc->complete = iothread_complete;
 | 
			
		||||
 | 
			
		||||
    object_class_property_add(klass, "poll-max-ns", "int",
 | 
			
		||||
                              iothread_get_poll_max_ns,
 | 
			
		||||
                              iothread_set_poll_max_ns,
 | 
			
		||||
                              NULL, NULL, &error_abort);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const TypeInfo iothread_info = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue