* [PATCH 0/2] yank: Always link full yank code @ 2021-03-23 17:52 Lukas Straub 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Lukas Straub @ 2021-03-23 17:52 UTC (permalink / raw) To: qemu-devel; +Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 1051 bytes --] Hello Everyone, These patches remove yank's dependency on qiochannel and always link it in. Please Review. Regards, Lukas Straub Lukas Straub (2): yank: Remove dependency on qiochannel yank: Always link full yank code MAINTAINERS | 2 +- chardev/char-socket.c | 21 ++++++++++++++------- include/qemu/yank.h | 10 ---------- migration/channel.c | 6 ++++-- migration/meson.build | 1 + migration/multifd.c | 3 ++- migration/qemu-file-channel.c | 3 ++- migration/yank_functions.c | 20 ++++++++++++++++++++ migration/yank_functions.h | 17 +++++++++++++++++ stubs/meson.build | 1 - stubs/yank.c | 29 ----------------------------- util/meson.build | 2 +- util/yank.c | 8 -------- 13 files changed, 62 insertions(+), 61 deletions(-) create mode 100644 migration/yank_functions.c create mode 100644 migration/yank_functions.h delete mode 100644 stubs/yank.c -- 2.30.2 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] yank: Remove dependency on qiochannel 2021-03-23 17:52 [PATCH 0/2] yank: Always link full yank code Lukas Straub @ 2021-03-23 17:52 ` Lukas Straub 2021-03-23 18:03 ` Thomas Huth 2021-03-25 20:29 ` Marc-André Lureau 2021-03-23 17:52 ` [PATCH 2/2] yank: Always link full yank code Lukas Straub 2021-03-23 19:09 ` [PATCH 0/2] " Daniel P. Berrangé 2 siblings, 2 replies; 11+ messages in thread From: Lukas Straub @ 2021-03-23 17:52 UTC (permalink / raw) To: qemu-devel; +Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 11121 bytes --] Remove dependency on qiochannel by removing yank_generic_iochannel and letting migration and chardev use their own yank function for iochannel. Signed-off-by: Lukas Straub <lukasstraub2@web.de> --- MAINTAINERS | 1 + chardev/char-socket.c | 21 ++++++++++++++------- include/qemu/yank.h | 10 ---------- migration/channel.c | 6 ++++-- migration/meson.build | 1 + migration/multifd.c | 3 ++- migration/qemu-file-channel.c | 3 ++- migration/yank_functions.c | 20 ++++++++++++++++++++ migration/yank_functions.h | 17 +++++++++++++++++ stubs/yank.c | 6 ------ util/yank.c | 8 -------- 11 files changed, 61 insertions(+), 35 deletions(-) create mode 100644 migration/yank_functions.c create mode 100644 migration/yank_functions.h diff --git a/MAINTAINERS b/MAINTAINERS index 9147e9a429..455775c4a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2821,6 +2821,7 @@ M: Lukas Straub <lukasstraub2@web.de> S: Odd fixes F: util/yank.c F: stubs/yank.c +F: migration/yank_functions* F: include/qemu/yank.h F: qapi/yank.json diff --git a/chardev/char-socket.c b/chardev/char-socket.c index f618bdec28..1d455ecca4 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -402,6 +402,13 @@ static void remove_hup_source(SocketChardev *s) } } +static void char_socket_yank_iochannel(void *opaque) +{ + QIOChannel *ioc = QIO_CHANNEL(opaque); + + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); +} + static void tcp_chr_free_connection(Chardev *chr) { SocketChardev *s = SOCKET_CHARDEV(chr); @@ -424,7 +431,7 @@ static void tcp_chr_free_connection(Chardev *chr) (s->state == TCP_CHARDEV_STATE_CONNECTING || s->state == TCP_CHARDEV_STATE_CONNECTED)) { yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(s->sioc)); } object_unref(OBJECT(s->sioc)); @@ -946,7 +953,7 @@ static int tcp_chr_add_client(Chardev *chr, int fd) tcp_chr_set_client_ioc_name(chr, sioc); if (s->registered_yank) { yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(sioc)); } ret = tcp_chr_new_client(chr, sioc); @@ -965,7 +972,7 @@ static void tcp_chr_accept(QIONetListener *listener, tcp_chr_set_client_ioc_name(chr, cioc); if (s->registered_yank) { yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(cioc)); } tcp_chr_new_client(chr, cioc); @@ -985,7 +992,7 @@ static int tcp_chr_connect_client_sync(Chardev *chr, Error **errp) } if (s->registered_yank) { yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(sioc)); } tcp_chr_new_client(chr, sioc); @@ -1005,7 +1012,7 @@ static void tcp_chr_accept_server_sync(Chardev *chr) tcp_chr_set_client_ioc_name(chr, sioc); if (s->registered_yank) { yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(sioc)); } tcp_chr_new_client(chr, sioc); @@ -1138,7 +1145,7 @@ static void qemu_chr_socket_connected(QIOTask *task, void *opaque) tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED); if (s->registered_yank) { yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(sioc)); } check_report_connect_error(chr, err); @@ -1176,7 +1183,7 @@ static void tcp_chr_connect_client_async(Chardev *chr) tcp_chr_set_client_ioc_name(chr, sioc); if (s->registered_yank) { yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), - yank_generic_iochannel, + char_socket_yank_iochannel, QIO_CHANNEL(sioc)); } /* diff --git a/include/qemu/yank.h b/include/qemu/yank.h index 5b93c70cbf..5375a1f195 100644 --- a/include/qemu/yank.h +++ b/include/qemu/yank.h @@ -73,16 +73,6 @@ void yank_unregister_function(const YankInstance *instance, YankFn *func, void *opaque); -/** - * yank_generic_iochannel: Generic yank function for iochannel - * - * This is a generic yank function which will call qio_channel_shutdown on the - * provided QIOChannel. - * - * @opaque: QIOChannel to shutdown - */ -void yank_generic_iochannel(void *opaque); - #define BLOCKDEV_YANK_INSTANCE(the_node_name) (&(YankInstance) { \ .type = YANK_INSTANCE_TYPE_BLOCK_NODE, \ .u.block_node.node_name = (the_node_name) }) diff --git a/migration/channel.c b/migration/channel.c index 35fe234e9c..c9ee902021 100644 --- a/migration/channel.c +++ b/migration/channel.c @@ -20,6 +20,7 @@ #include "io/channel-tls.h" #include "io/channel-socket.h" #include "qemu/yank.h" +#include "yank_functions.h" /** * @migration_channel_process_incoming - Create new incoming migration channel @@ -38,7 +39,8 @@ void migration_channel_process_incoming(QIOChannel *ioc) ioc, object_get_typename(OBJECT(ioc))); if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { - yank_register_function(MIGRATION_YANK_INSTANCE, yank_generic_iochannel, + yank_register_function(MIGRATION_YANK_INSTANCE, + migration_yank_iochannel, QIO_CHANNEL(ioc)); } @@ -76,7 +78,7 @@ void migration_channel_connect(MigrationState *s, if (!error) { if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { yank_register_function(MIGRATION_YANK_INSTANCE, - yank_generic_iochannel, + migration_yank_iochannel, QIO_CHANNEL(ioc)); } diff --git a/migration/meson.build b/migration/meson.build index 9645f44005..2cfa8eed72 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -6,6 +6,7 @@ migration_files = files( 'vmstate.c', 'qemu-file-channel.c', 'qemu-file.c', + 'yank_functions.c', ) softmmu_ss.add(migration_files) diff --git a/migration/multifd.c b/migration/multifd.c index 03527c564c..a6677c45c8 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -27,6 +27,7 @@ #include "qemu/yank.h" #include "io/channel-socket.h" +#include "yank_functions.h" /* Multiple fd's */ @@ -989,7 +990,7 @@ int multifd_load_cleanup(Error **errp) if (object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_SOCKET) && OBJECT(p->c)->ref == 1) { yank_unregister_function(MIGRATION_YANK_INSTANCE, - yank_generic_iochannel, + migration_yank_iochannel, QIO_CHANNEL(p->c)); } diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c index afc3a7f642..876d05a540 100644 --- a/migration/qemu-file-channel.c +++ b/migration/qemu-file-channel.c @@ -28,6 +28,7 @@ #include "io/channel-socket.h" #include "qemu/iov.h" #include "qemu/yank.h" +#include "yank_functions.h" static ssize_t channel_writev_buffer(void *opaque, @@ -108,7 +109,7 @@ static int channel_close(void *opaque, Error **errp) if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) && OBJECT(ioc)->ref == 1) { yank_unregister_function(MIGRATION_YANK_INSTANCE, - yank_generic_iochannel, + migration_yank_iochannel, QIO_CHANNEL(ioc)); } object_unref(OBJECT(ioc)); diff --git a/migration/yank_functions.c b/migration/yank_functions.c new file mode 100644 index 0000000000..96c90e17dc --- /dev/null +++ b/migration/yank_functions.c @@ -0,0 +1,20 @@ +/* + * migration yank functions + * + * Copyright (c) Lukas Straub <lukasstraub2@web.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "io/channel.h" +#include "yank_functions.h" + +void migration_yank_iochannel(void *opaque) +{ + QIOChannel *ioc = QIO_CHANNEL(opaque); + + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); +} diff --git a/migration/yank_functions.h b/migration/yank_functions.h new file mode 100644 index 0000000000..055ea22523 --- /dev/null +++ b/migration/yank_functions.h @@ -0,0 +1,17 @@ +/* + * migration yank functions + * + * Copyright (c) Lukas Straub <lukasstraub2@web.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +/** + * migration_yank_iochannel: yank function for iochannel + * + * This yank function will call qio_channel_shutdown on the provided QIOChannel. + * + * @opaque: QIOChannel to shutdown + */ +void migration_yank_iochannel(void *opaque); diff --git a/stubs/yank.c b/stubs/yank.c index 6090416065..11b24fc057 100644 --- a/stubs/yank.c +++ b/stubs/yank.c @@ -21,9 +21,3 @@ void yank_unregister_function(const YankInstance *instance, void *opaque) { } - -void yank_generic_iochannel(void *opaque) -{ -} - - diff --git a/util/yank.c b/util/yank.c index fc08f65209..abf47c346d 100644 --- a/util/yank.c +++ b/util/yank.c @@ -15,7 +15,6 @@ #include "qapi/qapi-commands-yank.h" #include "qapi/qapi-visit-yank.h" #include "qapi/clone-visitor.h" -#include "io/channel.h" #include "qemu/yank.h" struct YankFuncAndParam { @@ -151,13 +150,6 @@ void yank_unregister_function(const YankInstance *instance, abort(); } -void yank_generic_iochannel(void *opaque) -{ - QIOChannel *ioc = QIO_CHANNEL(opaque); - - qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); -} - void qmp_yank(YankInstanceList *instances, Error **errp) { -- 2.30.2 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] yank: Remove dependency on qiochannel 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub @ 2021-03-23 18:03 ` Thomas Huth 2021-03-25 20:29 ` Marc-André Lureau 1 sibling, 0 replies; 11+ messages in thread From: Thomas Huth @ 2021-03-23 18:03 UTC (permalink / raw) To: Lukas Straub, qemu-devel; +Cc: Paolo Bonzini, Alex Bennee, Markus Armbruster On 23/03/2021 18.52, Lukas Straub wrote: > Remove dependency on qiochannel by removing yank_generic_iochannel and > letting migration and chardev use their own yank function for > iochannel. > > Signed-off-by: Lukas Straub <lukasstraub2@web.de> > --- > MAINTAINERS | 1 + > chardev/char-socket.c | 21 ++++++++++++++------- > include/qemu/yank.h | 10 ---------- > migration/channel.c | 6 ++++-- > migration/meson.build | 1 + > migration/multifd.c | 3 ++- > migration/qemu-file-channel.c | 3 ++- > migration/yank_functions.c | 20 ++++++++++++++++++++ > migration/yank_functions.h | 17 +++++++++++++++++ > stubs/yank.c | 6 ------ > util/yank.c | 8 -------- > 11 files changed, 61 insertions(+), 35 deletions(-) > create mode 100644 migration/yank_functions.c > create mode 100644 migration/yank_functions.h Reviewed-by: Thomas Huth <thuth@redhat.com> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] yank: Remove dependency on qiochannel 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub 2021-03-23 18:03 ` Thomas Huth @ 2021-03-25 20:29 ` Marc-André Lureau 1 sibling, 0 replies; 11+ messages in thread From: Marc-André Lureau @ 2021-03-25 20:29 UTC (permalink / raw) To: Lukas Straub Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 11937 bytes --] On Tue, Mar 23, 2021 at 9:54 PM Lukas Straub <lukasstraub2@web.de> wrote: > Remove dependency on qiochannel by removing yank_generic_iochannel and > letting migration and chardev use their own yank function for > iochannel. > > Signed-off-by: Lukas Straub <lukasstraub2@web.de> > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- > MAINTAINERS | 1 + > chardev/char-socket.c | 21 ++++++++++++++------- > include/qemu/yank.h | 10 ---------- > migration/channel.c | 6 ++++-- > migration/meson.build | 1 + > migration/multifd.c | 3 ++- > migration/qemu-file-channel.c | 3 ++- > migration/yank_functions.c | 20 ++++++++++++++++++++ > migration/yank_functions.h | 17 +++++++++++++++++ > stubs/yank.c | 6 ------ > util/yank.c | 8 -------- > 11 files changed, 61 insertions(+), 35 deletions(-) > create mode 100644 migration/yank_functions.c > create mode 100644 migration/yank_functions.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 9147e9a429..455775c4a3 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -2821,6 +2821,7 @@ M: Lukas Straub <lukasstraub2@web.de> > S: Odd fixes > F: util/yank.c > F: stubs/yank.c > +F: migration/yank_functions* > F: include/qemu/yank.h > F: qapi/yank.json > > diff --git a/chardev/char-socket.c b/chardev/char-socket.c > index f618bdec28..1d455ecca4 100644 > --- a/chardev/char-socket.c > +++ b/chardev/char-socket.c > @@ -402,6 +402,13 @@ static void remove_hup_source(SocketChardev *s) > } > } > > +static void char_socket_yank_iochannel(void *opaque) > +{ > + QIOChannel *ioc = QIO_CHANNEL(opaque); > + > + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); > +} > + > static void tcp_chr_free_connection(Chardev *chr) > { > SocketChardev *s = SOCKET_CHARDEV(chr); > @@ -424,7 +431,7 @@ static void tcp_chr_free_connection(Chardev *chr) > (s->state == TCP_CHARDEV_STATE_CONNECTING > || s->state == TCP_CHARDEV_STATE_CONNECTED)) { > yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(s->sioc)); > } > object_unref(OBJECT(s->sioc)); > @@ -946,7 +953,7 @@ static int tcp_chr_add_client(Chardev *chr, int fd) > tcp_chr_set_client_ioc_name(chr, sioc); > if (s->registered_yank) { > yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(sioc)); > } > ret = tcp_chr_new_client(chr, sioc); > @@ -965,7 +972,7 @@ static void tcp_chr_accept(QIONetListener *listener, > tcp_chr_set_client_ioc_name(chr, cioc); > if (s->registered_yank) { > yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(cioc)); > } > tcp_chr_new_client(chr, cioc); > @@ -985,7 +992,7 @@ static int tcp_chr_connect_client_sync(Chardev *chr, > Error **errp) > } > if (s->registered_yank) { > yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(sioc)); > } > tcp_chr_new_client(chr, sioc); > @@ -1005,7 +1012,7 @@ static void tcp_chr_accept_server_sync(Chardev *chr) > tcp_chr_set_client_ioc_name(chr, sioc); > if (s->registered_yank) { > yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(sioc)); > } > tcp_chr_new_client(chr, sioc); > @@ -1138,7 +1145,7 @@ static void qemu_chr_socket_connected(QIOTask *task, > void *opaque) > tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED); > if (s->registered_yank) { > yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(sioc)); > } > check_report_connect_error(chr, err); > @@ -1176,7 +1183,7 @@ static void tcp_chr_connect_client_async(Chardev > *chr) > tcp_chr_set_client_ioc_name(chr, sioc); > if (s->registered_yank) { > yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), > - yank_generic_iochannel, > + char_socket_yank_iochannel, > QIO_CHANNEL(sioc)); > } > /* > diff --git a/include/qemu/yank.h b/include/qemu/yank.h > index 5b93c70cbf..5375a1f195 100644 > --- a/include/qemu/yank.h > +++ b/include/qemu/yank.h > @@ -73,16 +73,6 @@ void yank_unregister_function(const YankInstance > *instance, > YankFn *func, > void *opaque); > > -/** > - * yank_generic_iochannel: Generic yank function for iochannel > - * > - * This is a generic yank function which will call qio_channel_shutdown > on the > - * provided QIOChannel. > - * > - * @opaque: QIOChannel to shutdown > - */ > -void yank_generic_iochannel(void *opaque); > - > #define BLOCKDEV_YANK_INSTANCE(the_node_name) (&(YankInstance) { \ > .type = YANK_INSTANCE_TYPE_BLOCK_NODE, \ > .u.block_node.node_name = (the_node_name) }) > diff --git a/migration/channel.c b/migration/channel.c > index 35fe234e9c..c9ee902021 100644 > --- a/migration/channel.c > +++ b/migration/channel.c > @@ -20,6 +20,7 @@ > #include "io/channel-tls.h" > #include "io/channel-socket.h" > #include "qemu/yank.h" > +#include "yank_functions.h" > > /** > * @migration_channel_process_incoming - Create new incoming migration > channel > @@ -38,7 +39,8 @@ void migration_channel_process_incoming(QIOChannel *ioc) > ioc, object_get_typename(OBJECT(ioc))); > > if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { > - yank_register_function(MIGRATION_YANK_INSTANCE, > yank_generic_iochannel, > + yank_register_function(MIGRATION_YANK_INSTANCE, > + migration_yank_iochannel, > QIO_CHANNEL(ioc)); > } > > @@ -76,7 +78,7 @@ void migration_channel_connect(MigrationState *s, > if (!error) { > if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { > yank_register_function(MIGRATION_YANK_INSTANCE, > - yank_generic_iochannel, > + migration_yank_iochannel, > QIO_CHANNEL(ioc)); > } > > diff --git a/migration/meson.build b/migration/meson.build > index 9645f44005..2cfa8eed72 100644 > --- a/migration/meson.build > +++ b/migration/meson.build > @@ -6,6 +6,7 @@ migration_files = files( > 'vmstate.c', > 'qemu-file-channel.c', > 'qemu-file.c', > + 'yank_functions.c', > ) > softmmu_ss.add(migration_files) > > diff --git a/migration/multifd.c b/migration/multifd.c > index 03527c564c..a6677c45c8 100644 > --- a/migration/multifd.c > +++ b/migration/multifd.c > @@ -27,6 +27,7 @@ > > #include "qemu/yank.h" > #include "io/channel-socket.h" > +#include "yank_functions.h" > > /* Multiple fd's */ > > @@ -989,7 +990,7 @@ int multifd_load_cleanup(Error **errp) > if (object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_SOCKET) > && OBJECT(p->c)->ref == 1) { > yank_unregister_function(MIGRATION_YANK_INSTANCE, > - yank_generic_iochannel, > + migration_yank_iochannel, > QIO_CHANNEL(p->c)); > } > > diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c > index afc3a7f642..876d05a540 100644 > --- a/migration/qemu-file-channel.c > +++ b/migration/qemu-file-channel.c > @@ -28,6 +28,7 @@ > #include "io/channel-socket.h" > #include "qemu/iov.h" > #include "qemu/yank.h" > +#include "yank_functions.h" > > > static ssize_t channel_writev_buffer(void *opaque, > @@ -108,7 +109,7 @@ static int channel_close(void *opaque, Error **errp) > if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) > && OBJECT(ioc)->ref == 1) { > yank_unregister_function(MIGRATION_YANK_INSTANCE, > - yank_generic_iochannel, > + migration_yank_iochannel, > QIO_CHANNEL(ioc)); > } > object_unref(OBJECT(ioc)); > diff --git a/migration/yank_functions.c b/migration/yank_functions.c > new file mode 100644 > index 0000000000..96c90e17dc > --- /dev/null > +++ b/migration/yank_functions.c > @@ -0,0 +1,20 @@ > +/* > + * migration yank functions > + * > + * Copyright (c) Lukas Straub <lukasstraub2@web.de> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or > later. > + * See the COPYING file in the top-level directory. > + */ > + > +#include "qemu/osdep.h" > +#include "qapi/error.h" > +#include "io/channel.h" > +#include "yank_functions.h" > + > +void migration_yank_iochannel(void *opaque) > +{ > + QIOChannel *ioc = QIO_CHANNEL(opaque); > + > + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); > +} > diff --git a/migration/yank_functions.h b/migration/yank_functions.h > new file mode 100644 > index 0000000000..055ea22523 > --- /dev/null > +++ b/migration/yank_functions.h > @@ -0,0 +1,17 @@ > +/* > + * migration yank functions > + * > + * Copyright (c) Lukas Straub <lukasstraub2@web.de> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or > later. > + * See the COPYING file in the top-level directory. > + */ > + > +/** > + * migration_yank_iochannel: yank function for iochannel > + * > + * This yank function will call qio_channel_shutdown on the provided > QIOChannel. > + * > + * @opaque: QIOChannel to shutdown > + */ > +void migration_yank_iochannel(void *opaque); > diff --git a/stubs/yank.c b/stubs/yank.c > index 6090416065..11b24fc057 100644 > --- a/stubs/yank.c > +++ b/stubs/yank.c > @@ -21,9 +21,3 @@ void yank_unregister_function(const YankInstance > *instance, > void *opaque) > { > } > - > -void yank_generic_iochannel(void *opaque) > -{ > -} > - > - > diff --git a/util/yank.c b/util/yank.c > index fc08f65209..abf47c346d 100644 > --- a/util/yank.c > +++ b/util/yank.c > @@ -15,7 +15,6 @@ > #include "qapi/qapi-commands-yank.h" > #include "qapi/qapi-visit-yank.h" > #include "qapi/clone-visitor.h" > -#include "io/channel.h" > #include "qemu/yank.h" > > struct YankFuncAndParam { > @@ -151,13 +150,6 @@ void yank_unregister_function(const YankInstance > *instance, > abort(); > } > > -void yank_generic_iochannel(void *opaque) > -{ > - QIOChannel *ioc = QIO_CHANNEL(opaque); > - > - qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); > -} > - > void qmp_yank(YankInstanceList *instances, > Error **errp) > { > -- > 2.30.2 > > -- Marc-André Lureau [-- Attachment #2: Type: text/html, Size: 14682 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/2] yank: Always link full yank code 2021-03-23 17:52 [PATCH 0/2] yank: Always link full yank code Lukas Straub 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub @ 2021-03-23 17:52 ` Lukas Straub 2021-03-23 18:04 ` Thomas Huth 2021-03-25 20:30 ` Marc-André Lureau 2021-03-23 19:09 ` [PATCH 0/2] " Daniel P. Berrangé 2 siblings, 2 replies; 11+ messages in thread From: Lukas Straub @ 2021-03-23 17:52 UTC (permalink / raw) To: qemu-devel; +Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 2484 bytes --] Yank now only depends on util and can be always linked in. Also remove the stubs as they are not needed anymore. Signed-off-by: Lukas Straub <lukasstraub2@web.de> --- MAINTAINERS | 1 - stubs/meson.build | 1 - stubs/yank.c | 23 ----------------------- util/meson.build | 2 +- 4 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 stubs/yank.c diff --git a/MAINTAINERS b/MAINTAINERS index 455775c4a3..77259c031d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2820,7 +2820,6 @@ Yank feature M: Lukas Straub <lukasstraub2@web.de> S: Odd fixes F: util/yank.c -F: stubs/yank.c F: migration/yank_functions* F: include/qemu/yank.h F: qapi/yank.json diff --git a/stubs/meson.build b/stubs/meson.build index 8a3e804cf0..be6f6d609e 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -46,7 +46,6 @@ stub_ss.add(files('vm-stop.c')) stub_ss.add(files('win32-kbd-hook.c')) stub_ss.add(files('cpu-synchronize-state.c')) if have_block - stub_ss.add(files('yank.c')) stub_ss.add(files('replay-tools.c')) endif if have_system diff --git a/stubs/yank.c b/stubs/yank.c deleted file mode 100644 index 11b24fc057..0000000000 --- a/stubs/yank.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "qemu/osdep.h" -#include "qemu/yank.h" - -bool yank_register_instance(const YankInstance *instance, Error **errp) -{ - return true; -} - -void yank_unregister_instance(const YankInstance *instance) -{ -} - -void yank_register_function(const YankInstance *instance, - YankFn *func, - void *opaque) -{ -} - -void yank_unregister_function(const YankInstance *instance, - YankFn *func, - void *opaque) -{ -} diff --git a/util/meson.build b/util/meson.build index 984fba965f..510765cde4 100644 --- a/util/meson.build +++ b/util/meson.build @@ -43,6 +43,7 @@ util_ss.add(files('stats64.c')) util_ss.add(files('systemd.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('drm.c')) util_ss.add(files('guest-random.c')) +util_ss.add(files('yank.c')) if have_user util_ss.add(files('selfmap.c')) @@ -51,7 +52,6 @@ endif if have_system util_ss.add(files('crc-ccitt.c')) util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) - util_ss.add(files('yank.c')) util_ss.add(when: 'CONFIG_LINUX', if_true: files('userfaultfd.c')) endif -- 2.30.2 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] yank: Always link full yank code 2021-03-23 17:52 ` [PATCH 2/2] yank: Always link full yank code Lukas Straub @ 2021-03-23 18:04 ` Thomas Huth 2021-03-25 20:30 ` Marc-André Lureau 1 sibling, 0 replies; 11+ messages in thread From: Thomas Huth @ 2021-03-23 18:04 UTC (permalink / raw) To: Lukas Straub, qemu-devel; +Cc: Paolo Bonzini, Alex Bennee, Markus Armbruster On 23/03/2021 18.52, Lukas Straub wrote: > Yank now only depends on util and can be always linked in. Also remove > the stubs as they are not needed anymore. > > Signed-off-by: Lukas Straub <lukasstraub2@web.de> > --- > MAINTAINERS | 1 - > stubs/meson.build | 1 - > stubs/yank.c | 23 ----------------------- > util/meson.build | 2 +- > 4 files changed, 1 insertion(+), 26 deletions(-) > delete mode 100644 stubs/yank.c This indeed looks like the best solution to me. Thanks! Reviewed-by: Thomas Huth <thuth@redhat.com> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] yank: Always link full yank code 2021-03-23 17:52 ` [PATCH 2/2] yank: Always link full yank code Lukas Straub 2021-03-23 18:04 ` Thomas Huth @ 2021-03-25 20:30 ` Marc-André Lureau 1 sibling, 0 replies; 11+ messages in thread From: Marc-André Lureau @ 2021-03-25 20:30 UTC (permalink / raw) To: Lukas Straub Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 2831 bytes --] On Tue, Mar 23, 2021 at 9:57 PM Lukas Straub <lukasstraub2@web.de> wrote: > Yank now only depends on util and can be always linked in. Also remove > the stubs as they are not needed anymore. > > Signed-off-by: Lukas Straub <lukasstraub2@web.de> > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- > MAINTAINERS | 1 - > stubs/meson.build | 1 - > stubs/yank.c | 23 ----------------------- > util/meson.build | 2 +- > 4 files changed, 1 insertion(+), 26 deletions(-) > delete mode 100644 stubs/yank.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 455775c4a3..77259c031d 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -2820,7 +2820,6 @@ Yank feature > M: Lukas Straub <lukasstraub2@web.de> > S: Odd fixes > F: util/yank.c > -F: stubs/yank.c > F: migration/yank_functions* > F: include/qemu/yank.h > F: qapi/yank.json > diff --git a/stubs/meson.build b/stubs/meson.build > index 8a3e804cf0..be6f6d609e 100644 > --- a/stubs/meson.build > +++ b/stubs/meson.build > @@ -46,7 +46,6 @@ stub_ss.add(files('vm-stop.c')) > stub_ss.add(files('win32-kbd-hook.c')) > stub_ss.add(files('cpu-synchronize-state.c')) > if have_block > - stub_ss.add(files('yank.c')) > stub_ss.add(files('replay-tools.c')) > endif > if have_system > diff --git a/stubs/yank.c b/stubs/yank.c > deleted file mode 100644 > index 11b24fc057..0000000000 > --- a/stubs/yank.c > +++ /dev/null > @@ -1,23 +0,0 @@ > -#include "qemu/osdep.h" > -#include "qemu/yank.h" > - > -bool yank_register_instance(const YankInstance *instance, Error **errp) > -{ > - return true; > -} > - > -void yank_unregister_instance(const YankInstance *instance) > -{ > -} > - > -void yank_register_function(const YankInstance *instance, > - YankFn *func, > - void *opaque) > -{ > -} > - > -void yank_unregister_function(const YankInstance *instance, > - YankFn *func, > - void *opaque) > -{ > -} > diff --git a/util/meson.build b/util/meson.build > index 984fba965f..510765cde4 100644 > --- a/util/meson.build > +++ b/util/meson.build > @@ -43,6 +43,7 @@ util_ss.add(files('stats64.c')) > util_ss.add(files('systemd.c')) > util_ss.add(when: 'CONFIG_POSIX', if_true: files('drm.c')) > util_ss.add(files('guest-random.c')) > +util_ss.add(files('yank.c')) > > if have_user > util_ss.add(files('selfmap.c')) > @@ -51,7 +52,6 @@ endif > if have_system > util_ss.add(files('crc-ccitt.c')) > util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) > - util_ss.add(files('yank.c')) > util_ss.add(when: 'CONFIG_LINUX', if_true: files('userfaultfd.c')) > endif > > -- > 2.30.2 > -- Marc-André Lureau [-- Attachment #2: Type: text/html, Size: 4001 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] yank: Always link full yank code 2021-03-23 17:52 [PATCH 0/2] yank: Always link full yank code Lukas Straub 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub 2021-03-23 17:52 ` [PATCH 2/2] yank: Always link full yank code Lukas Straub @ 2021-03-23 19:09 ` Daniel P. Berrangé 2021-03-24 11:22 ` Lukas Straub 2 siblings, 1 reply; 11+ messages in thread From: Daniel P. Berrangé @ 2021-03-23 19:09 UTC (permalink / raw) To: Lukas Straub Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster On Tue, Mar 23, 2021 at 06:52:19PM +0100, Lukas Straub wrote: > Hello Everyone, > These patches remove yank's dependency on qiochannel and always link it in. > Please Review. It would be useful if the cover letter or commit messages explained to potential reviewers why this is being changed... The first patch feels like a regression to me, without seeing an explanation why it is desirable. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] yank: Always link full yank code 2021-03-23 19:09 ` [PATCH 0/2] " Daniel P. Berrangé @ 2021-03-24 11:22 ` Lukas Straub 2021-03-24 11:36 ` Daniel P. Berrangé 0 siblings, 1 reply; 11+ messages in thread From: Lukas Straub @ 2021-03-24 11:22 UTC (permalink / raw) To: Daniel P. Berrangé Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 1108 bytes --] On Tue, 23 Mar 2021 19:09:15 +0000 Daniel P. Berrangé <berrange@redhat.com> wrote: > On Tue, Mar 23, 2021 at 06:52:19PM +0100, Lukas Straub wrote: > > Hello Everyone, > > These patches remove yank's dependency on qiochannel and always link it in. > > Please Review. > > It would be useful if the cover letter or commit messages explained > to potential reviewers why this is being changed... The first patch > feels like a regression to me, without seeing an explanation why > it is desirable. Yes, sorry. There are two reasons for this patchset: -To exercise the full yank code (with checks for registering and unregistering of yank functions and instances) in existing tests and in the new yank test (https://lore.kernel.org/qemu-devel/cover.1616521487.git.lukasstraub2@web.de/) -To replace "[PATCH] yank: Avoid linking into executables that don't want it" (https://lore.kernel.org/qemu-devel/20210316135907.3646901-1-armbru@redhat.com/) Now we always link in yank, but without pulling in other dependencies. Regards, Lukas Straub > > Regards, > Daniel -- [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] yank: Always link full yank code 2021-03-24 11:22 ` Lukas Straub @ 2021-03-24 11:36 ` Daniel P. Berrangé 2021-03-24 12:09 ` Lukas Straub 0 siblings, 1 reply; 11+ messages in thread From: Daniel P. Berrangé @ 2021-03-24 11:36 UTC (permalink / raw) To: Lukas Straub Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster On Wed, Mar 24, 2021 at 12:22:42PM +0100, Lukas Straub wrote: > On Tue, 23 Mar 2021 19:09:15 +0000 > Daniel P. Berrangé <berrange@redhat.com> wrote: > > > On Tue, Mar 23, 2021 at 06:52:19PM +0100, Lukas Straub wrote: > > > Hello Everyone, > > > These patches remove yank's dependency on qiochannel and always link it in. > > > Please Review. > > > > It would be useful if the cover letter or commit messages explained > > to potential reviewers why this is being changed... The first patch > > feels like a regression to me, without seeing an explanation why > > it is desirable. > > Yes, sorry. There are two reasons for this patchset: > -To exercise the full yank code (with checks for registering and unregistering > of yank functions and instances) in existing tests and in the new yank test > (https://lore.kernel.org/qemu-devel/cover.1616521487.git.lukasstraub2@web.de/) > -To replace "[PATCH] yank: Avoid linking into executables that don't want it" > (https://lore.kernel.org/qemu-devel/20210316135907.3646901-1-armbru@redhat.com/) > Now we always link in yank, but without pulling in other dependencies. Conceptually, the real world usage of yank is in combination with parts of QEMU doing I/O, and so they will always have the "io" subsystem available. Thus it feels wrong to be refactoring this to avoid an "io" dependancy. I think this probably suggests that the yank code shouldn't be in libqemuutil.la, but instead part of the "io" subsystem to make the association/dependency explicit Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] yank: Always link full yank code 2021-03-24 11:36 ` Daniel P. Berrangé @ 2021-03-24 12:09 ` Lukas Straub 0 siblings, 0 replies; 11+ messages in thread From: Lukas Straub @ 2021-03-24 12:09 UTC (permalink / raw) To: Daniel P. Berrangé Cc: Paolo Bonzini, Thomas Huth, Alex Bennee, qemu-devel, Markus Armbruster [-- Attachment #1: Type: text/plain, Size: 1879 bytes --] On Wed, 24 Mar 2021 11:36:13 +0000 Daniel P. Berrangé <berrange@redhat.com> wrote: > On Wed, Mar 24, 2021 at 12:22:42PM +0100, Lukas Straub wrote: > > On Tue, 23 Mar 2021 19:09:15 +0000 > > Daniel P. Berrangé <berrange@redhat.com> wrote: > > > > > On Tue, Mar 23, 2021 at 06:52:19PM +0100, Lukas Straub wrote: > > > > Hello Everyone, > > > > These patches remove yank's dependency on qiochannel and always link it in. > > > > Please Review. > > > > > > It would be useful if the cover letter or commit messages explained > > > to potential reviewers why this is being changed... The first patch > > > feels like a regression to me, without seeing an explanation why > > > it is desirable. > > > > Yes, sorry. There are two reasons for this patchset: > > -To exercise the full yank code (with checks for registering and unregistering > > of yank functions and instances) in existing tests and in the new yank test > > (https://lore.kernel.org/qemu-devel/cover.1616521487.git.lukasstraub2@web.de/) > > -To replace "[PATCH] yank: Avoid linking into executables that don't want it" > > (https://lore.kernel.org/qemu-devel/20210316135907.3646901-1-armbru@redhat.com/) > > Now we always link in yank, but without pulling in other dependencies. > > Conceptually, the real world usage of yank is in combination with parts > of QEMU doing I/O, and so they will always have the "io" subsystem > available. Thus it feels wrong to be refactoring this to avoid an > "io" dependancy. I think this probably suggests that the yank code > shouldn't be in libqemuutil.la, but instead part of the "io" subsystem > to make the association/dependency explicit Yes, makes sense. On the other hand I think that the yank functions should be separate from the yank core anyway. Regards, Lukas Straub > > Regards, > Daniel -- [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-03-25 20:33 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-03-23 17:52 [PATCH 0/2] yank: Always link full yank code Lukas Straub 2021-03-23 17:52 ` [PATCH 1/2] yank: Remove dependency on qiochannel Lukas Straub 2021-03-23 18:03 ` Thomas Huth 2021-03-25 20:29 ` Marc-André Lureau 2021-03-23 17:52 ` [PATCH 2/2] yank: Always link full yank code Lukas Straub 2021-03-23 18:04 ` Thomas Huth 2021-03-25 20:30 ` Marc-André Lureau 2021-03-23 19:09 ` [PATCH 0/2] " Daniel P. Berrangé 2021-03-24 11:22 ` Lukas Straub 2021-03-24 11:36 ` Daniel P. Berrangé 2021-03-24 12:09 ` Lukas Straub
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.