Message ID | 20190726120542.9894-4-armbru@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Tame a few "touch this, recompile the world" headers | expand |
On 7/26/19 7:05 AM, Markus Armbruster wrote: > In my "build everything" tree, changing a type in qapi/common.json > triggers a recompile of some 3600 out of 6600 objects (not counting > tests and objects that don't depend on qemu/osdep.h). > > One common dependency is QapiErrorClass: it's used only in in > qapi/error.h, which uses nothing else, and is widely included. > > Move QapiErrorClass from common.json to new error.json. Touching > common.json now recompiles only some 2900 objects. > > Cc: Eric Blake <eblake@redhat.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > MAINTAINERS | 2 ++ > include/qapi/error.h | 2 +- > qapi/Makefile.objs | 2 +- > qapi/common.json | 24 ------------------------ > qapi/error.json | 29 +++++++++++++++++++++++++++++ > qapi/qapi-schema.json | 1 + > 6 files changed, 34 insertions(+), 26 deletions(-) > create mode 100644 qapi/error.json > +++ b/qapi/qapi-schema.json > @@ -80,6 +80,7 @@ > # stable order, it's best to include each sub-schema just once, or > # include it first right here. > > +{ 'include': 'error.json' } > { 'include': 'common.json' } > { 'include': 'sockets.json' } > { 'include': 'run-state.json' } Any reason why error.json is needed before common.json? But I don't see it as being a problem, so Reviewed-by: Eric Blake <eblake@redhat.com>
Eric Blake <eblake@redhat.com> writes: > On 7/26/19 7:05 AM, Markus Armbruster wrote: >> In my "build everything" tree, changing a type in qapi/common.json >> triggers a recompile of some 3600 out of 6600 objects (not counting >> tests and objects that don't depend on qemu/osdep.h). >> >> One common dependency is QapiErrorClass: it's used only in in >> qapi/error.h, which uses nothing else, and is widely included. >> >> Move QapiErrorClass from common.json to new error.json. Touching >> common.json now recompiles only some 2900 objects. >> >> Cc: Eric Blake <eblake@redhat.com> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> --- >> MAINTAINERS | 2 ++ >> include/qapi/error.h | 2 +- >> qapi/Makefile.objs | 2 +- >> qapi/common.json | 24 ------------------------ >> qapi/error.json | 29 +++++++++++++++++++++++++++++ >> qapi/qapi-schema.json | 1 + >> 6 files changed, 34 insertions(+), 26 deletions(-) >> create mode 100644 qapi/error.json > > >> +++ b/qapi/qapi-schema.json >> @@ -80,6 +80,7 @@ >> # stable order, it's best to include each sub-schema just once, or >> # include it first right here. >> >> +{ 'include': 'error.json' } >> { 'include': 'common.json' } >> { 'include': 'sockets.json' } >> { 'include': 'run-state.json' } > > Any reason why error.json is needed before common.json? But I don't see > it as being a problem, so The QAPI language doesn't require definition before use. We commonly do it anyway, because we find it easier to read. error.json uses nothing and defines only enum QapiErrorClass, which is implicitly used by commands that can fail. I like to put the enum before the first command. Putting it before any other module is easiest. > Reviewed-by: Eric Blake <eblake@redhat.com> Thanks!
diff --git a/MAINTAINERS b/MAINTAINERS index cc9636b43a..a43c200eaf 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1875,6 +1875,7 @@ M: Markus Armbruster <armbru@redhat.com> S: Supported F: include/qapi/error.h F: include/qemu/error-report.h +F: qapi/error.json F: util/error.c F: util/qemu-error.c @@ -2063,6 +2064,7 @@ F: monitor/monitor-internal.h F: monitor/qmp* F: monitor/misc.c F: monitor/monitor.c +F: qapi/error.json F: docs/devel/*qmp-* F: docs/interop/*qmp-* F: scripts/qmp/ diff --git a/include/qapi/error.h b/include/qapi/error.h index 51b63dd4b5..3f95141a01 100644 --- a/include/qapi/error.h +++ b/include/qapi/error.h @@ -119,7 +119,7 @@ #ifndef ERROR_H #define ERROR_H -#include "qapi/qapi-types-common.h" +#include "qapi/qapi-types-error.h" /* * Overall category of an error. diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs index c5a29e86e2..dd3f5e6f94 100644 --- a/qapi/Makefile.objs +++ b/qapi/Makefile.objs @@ -6,7 +6,7 @@ util-obj-y += qmp-event.o util-obj-y += qapi-util.o QAPI_COMMON_MODULES = audio authz block-core block char common crypto -QAPI_COMMON_MODULES += dump introspect job machine migration misc net +QAPI_COMMON_MODULES += dump error introspect job machine migration misc net QAPI_COMMON_MODULES += qdev qom rdma rocker run-state sockets tpm QAPI_COMMON_MODULES += trace transaction ui QAPI_TARGET_MODULES = machine-target misc-target diff --git a/qapi/common.json b/qapi/common.json index 99d313ef3b..3d4e8de1e0 100644 --- a/qapi/common.json +++ b/qapi/common.json @@ -4,30 +4,6 @@ # = Common data types ## -## -# @QapiErrorClass: -# -# QEMU error classes -# -# @GenericError: this is used for errors that don't require a specific error -# class. This should be the default case for most errors -# -# @CommandNotFound: the requested command has not been found -# -# @DeviceNotActive: a device has failed to be become active -# -# @DeviceNotFound: the requested device has not been found -# -# @KVMMissingCap: the requested operation can't be fulfilled because a -# required KVM capability is missing -# -# Since: 1.2 -## -{ 'enum': 'QapiErrorClass', - # Keep this in sync with ErrorClass in error.h - 'data': [ 'GenericError', 'CommandNotFound', - 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } - ## # @IoOperationType: # diff --git a/qapi/error.json b/qapi/error.json new file mode 100644 index 0000000000..3fad08f506 --- /dev/null +++ b/qapi/error.json @@ -0,0 +1,29 @@ +# -*- Mode: Python -*- + +## +# = QMP errors +## + +## +# @QapiErrorClass: +# +# QEMU error classes +# +# @GenericError: this is used for errors that don't require a specific error +# class. This should be the default case for most errors +# +# @CommandNotFound: the requested command has not been found +# +# @DeviceNotActive: a device has failed to be become active +# +# @DeviceNotFound: the requested device has not been found +# +# @KVMMissingCap: the requested operation can't be fulfilled because a +# required KVM capability is missing +# +# Since: 1.2 +## +{ 'enum': 'QapiErrorClass', + # Keep this in sync with ErrorClass in error.h + 'data': [ 'GenericError', 'CommandNotFound', + 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json index 38af54d6b3..920b03b0aa 100644 --- a/qapi/qapi-schema.json +++ b/qapi/qapi-schema.json @@ -80,6 +80,7 @@ # stable order, it's best to include each sub-schema just once, or # include it first right here. +{ 'include': 'error.json' } { 'include': 'common.json' } { 'include': 'sockets.json' } { 'include': 'run-state.json' }
In my "build everything" tree, changing a type in qapi/common.json triggers a recompile of some 3600 out of 6600 objects (not counting tests and objects that don't depend on qemu/osdep.h). One common dependency is QapiErrorClass: it's used only in in qapi/error.h, which uses nothing else, and is widely included. Move QapiErrorClass from common.json to new error.json. Touching common.json now recompiles only some 2900 objects. Cc: Eric Blake <eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> --- MAINTAINERS | 2 ++ include/qapi/error.h | 2 +- qapi/Makefile.objs | 2 +- qapi/common.json | 24 ------------------------ qapi/error.json | 29 +++++++++++++++++++++++++++++ qapi/qapi-schema.json | 1 + 6 files changed, 34 insertions(+), 26 deletions(-) create mode 100644 qapi/error.json