|
@@ -152,6 +152,24 @@ static void iothread_init_gcontext(IOThread *iothread)
|
|
iothread->main_loop = g_main_loop_new(iothread->worker_context, TRUE);
|
|
iothread->main_loop = g_main_loop_new(iothread->worker_context, TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void iothread_set_aio_context_params(IOThread *iothread, Error **errp)
|
|
|
|
+{
|
|
|
|
+ ERRP_GUARD();
|
|
|
|
+
|
|
|
|
+ aio_context_set_poll_params(iothread->ctx,
|
|
|
|
+ iothread->poll_max_ns,
|
|
|
|
+ iothread->poll_grow,
|
|
|
|
+ iothread->poll_shrink,
|
|
|
|
+ errp);
|
|
|
|
+ if (*errp) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ aio_context_set_aio_params(iothread->ctx,
|
|
|
|
+ iothread->aio_max_batch,
|
|
|
|
+ errp);
|
|
|
|
+}
|
|
|
|
+
|
|
static void iothread_complete(UserCreatable *obj, Error **errp)
|
|
static void iothread_complete(UserCreatable *obj, Error **errp)
|
|
{
|
|
{
|
|
Error *local_error = NULL;
|
|
Error *local_error = NULL;
|
|
@@ -171,11 +189,7 @@ static void iothread_complete(UserCreatable *obj, Error **errp)
|
|
*/
|
|
*/
|
|
iothread_init_gcontext(iothread);
|
|
iothread_init_gcontext(iothread);
|
|
|
|
|
|
- aio_context_set_poll_params(iothread->ctx,
|
|
|
|
- iothread->poll_max_ns,
|
|
|
|
- iothread->poll_grow,
|
|
|
|
- iothread->poll_shrink,
|
|
|
|
- &local_error);
|
|
|
|
|
|
+ iothread_set_aio_context_params(iothread, &local_error);
|
|
if (local_error) {
|
|
if (local_error) {
|
|
error_propagate(errp, local_error);
|
|
error_propagate(errp, local_error);
|
|
aio_context_unref(iothread->ctx);
|
|
aio_context_unref(iothread->ctx);
|
|
@@ -212,6 +226,9 @@ static PollParamInfo poll_grow_info = {
|
|
static PollParamInfo poll_shrink_info = {
|
|
static PollParamInfo poll_shrink_info = {
|
|
"poll-shrink", offsetof(IOThread, poll_shrink),
|
|
"poll-shrink", offsetof(IOThread, poll_shrink),
|
|
};
|
|
};
|
|
|
|
+static PollParamInfo aio_max_batch_info = {
|
|
|
|
+ "aio-max-batch", offsetof(IOThread, aio_max_batch),
|
|
|
|
+};
|
|
|
|
|
|
static void iothread_get_param(Object *obj, Visitor *v,
|
|
static void iothread_get_param(Object *obj, Visitor *v,
|
|
const char *name, void *opaque, Error **errp)
|
|
const char *name, void *opaque, Error **errp)
|
|
@@ -271,6 +288,29 @@ static void iothread_set_poll_param(Object *obj, Visitor *v,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void iothread_get_aio_param(Object *obj, Visitor *v,
|
|
|
|
+ const char *name, void *opaque, Error **errp)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+ iothread_get_param(obj, v, name, opaque, errp);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void iothread_set_aio_param(Object *obj, Visitor *v,
|
|
|
|
+ const char *name, void *opaque, Error **errp)
|
|
|
|
+{
|
|
|
|
+ IOThread *iothread = IOTHREAD(obj);
|
|
|
|
+
|
|
|
|
+ if (!iothread_set_param(obj, v, name, opaque, errp)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (iothread->ctx) {
|
|
|
|
+ aio_context_set_aio_params(iothread->ctx,
|
|
|
|
+ iothread->aio_max_batch,
|
|
|
|
+ errp);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
static void iothread_class_init(ObjectClass *klass, void *class_data)
|
|
static void iothread_class_init(ObjectClass *klass, void *class_data)
|
|
{
|
|
{
|
|
UserCreatableClass *ucc = USER_CREATABLE_CLASS(klass);
|
|
UserCreatableClass *ucc = USER_CREATABLE_CLASS(klass);
|
|
@@ -288,6 +328,10 @@ static void iothread_class_init(ObjectClass *klass, void *class_data)
|
|
iothread_get_poll_param,
|
|
iothread_get_poll_param,
|
|
iothread_set_poll_param,
|
|
iothread_set_poll_param,
|
|
NULL, &poll_shrink_info);
|
|
NULL, &poll_shrink_info);
|
|
|
|
+ object_class_property_add(klass, "aio-max-batch", "int",
|
|
|
|
+ iothread_get_aio_param,
|
|
|
|
+ iothread_set_aio_param,
|
|
|
|
+ NULL, &aio_max_batch_info);
|
|
}
|
|
}
|
|
|
|
|
|
static const TypeInfo iothread_info = {
|
|
static const TypeInfo iothread_info = {
|
|
@@ -337,6 +381,7 @@ static int query_one_iothread(Object *object, void *opaque)
|
|
info->poll_max_ns = iothread->poll_max_ns;
|
|
info->poll_max_ns = iothread->poll_max_ns;
|
|
info->poll_grow = iothread->poll_grow;
|
|
info->poll_grow = iothread->poll_grow;
|
|
info->poll_shrink = iothread->poll_shrink;
|
|
info->poll_shrink = iothread->poll_shrink;
|
|
|
|
+ info->aio_max_batch = iothread->aio_max_batch;
|
|
|
|
|
|
QAPI_LIST_APPEND(*tail, info);
|
|
QAPI_LIST_APPEND(*tail, info);
|
|
return 0;
|
|
return 0;
|