Re: [PATCH 5/7] chardev: Extract system emulation specific code

2020-04-24 Thread Jag Raman



> On Apr 23, 2020, at 4:21 PM, Philippe Mathieu-Daudé  wrote:
> 
> Split out code only used during system emulation,
> to reduce code pulled in user emulation and tools.
> 
> Signed-off-by: Philippe Mathieu-Daudé 
> ---
> chardev/chardev-internal.h |  3 ++
> chardev/char.c | 35 +--
> chardev/chardev-sysemu.c   | 69 ++
> chardev/Makefile.objs  |  1 +
> 4 files changed, 74 insertions(+), 34 deletions(-)
> create mode 100644 chardev/chardev-sysemu.c
> 
> diff --git a/chardev/chardev-internal.h b/chardev/chardev-internal.h
> index e0264ac349..f4d0429763 100644
> --- a/chardev/chardev-internal.h
> +++ b/chardev/chardev-internal.h
> @@ -26,6 +26,7 @@
> 
> #include "chardev/char.h"
> #include "chardev/char-fe.h"
> +#include "qom/object.h"
> 
> #define MAX_MUX 4
> #define MUX_BUFFER_SIZE 32 /* Must be a power of 2.  */
> @@ -59,4 +60,6 @@ typedef struct MuxChardev {
> void mux_set_focus(Chardev *chr, int focus);
> void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent event);
> 
> +Object *get_chardevs_root(void);
> +
> #endif /* CHAR_MUX_H */
> diff --git a/chardev/char.c b/chardev/char.c
> index b672a41150..555bb0448e 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -44,7 +44,7 @@
> /***/
> /* character device */
> 
> -static Object *get_chardevs_root(void)
> +Object *get_chardevs_root(void)
> {
> return container_get(object_get_root(), "/chardevs");
> }
> @@ -300,33 +300,6 @@ static const TypeInfo char_type_info = {
> .class_init = char_class_init,
> };
> 
> -static int chardev_machine_done_notify_one(Object *child, void *opaque)
> -{
> -Chardev *chr = (Chardev *)child;
> -ChardevClass *class = CHARDEV_GET_CLASS(chr);
> -
> -if (class->chr_machine_done) {
> -return class->chr_machine_done(chr);
> -}
> -
> -return 0;
> -}
> -
> -static void chardev_machine_done_hook(Notifier *notifier, void *unused)
> -{
> -int ret = object_child_foreach(get_chardevs_root(),
> -   chardev_machine_done_notify_one, NULL);
> -
> -if (ret) {
> -error_report("Failed to call chardev machine_done hooks");
> -exit(1);
> -}
> -}
> -
> -static Notifier chardev_machine_done_notify = {
> -.notify = chardev_machine_done_hook,
> -};
> -
> static bool qemu_chr_is_busy(Chardev *s)
> {
> if (CHARDEV_IS_MUX(s)) {
> @@ -1187,12 +1160,6 @@ void qemu_chr_cleanup(void)
> static void register_types(void)
> {
> type_register_static(&char_type_info);
> -
> -/* this must be done after machine init, since we register FEs with muxes
> - * as part of realize functions like serial_isa_realizefn when -nographic
> - * is specified
> - */
> -qemu_add_machine_init_done_notifier(&chardev_machine_done_notify);
> }
> 
> type_init(register_types);
> diff --git a/chardev/chardev-sysemu.c b/chardev/chardev-sysemu.c
> new file mode 100644
> index 00..eecdc615ee
> --- /dev/null
> +++ b/chardev/chardev-sysemu.c
> @@ -0,0 +1,69 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a 
> copy
> + * of this software and associated documentation files (the "Software"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
> FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "sysemu/sysemu.h"
> +#include "chardev/char.h"
> +#include "qemu/error-report.h"
> +#include "chardev-internal.h"
> +
> +static int chardev_machine_done_notify_one(Object *child, void *opaque)
> +{
> +Chardev *chr = (Chardev *)child;
> +ChardevClass *class = CHARDEV_GET_CLASS(chr);
> +
> +if (class->chr_machine_done) {
> +return class->chr_machine_done(chr);
> +}
> +
> +return 0;
> +}
> +
> +static void chardev_machine_done_hook(Notifier *notifier, void *unused)
> +{
> +int ret = object_child_foreach(get_chardevs_root(),
> +   chardev_machine_done_notify_one, NULL)

Re: [PATCH 5/7] chardev: Extract system emulation specific code

2020-04-23 Thread Marc-André Lureau
On Thu, Apr 23, 2020 at 10:24 PM Philippe Mathieu-Daudé
 wrote:
>
> Split out code only used during system emulation,
> to reduce code pulled in user emulation and tools.
>
> Signed-off-by: Philippe Mathieu-Daudé 

Reviewed-by: Marc-André Lureau 


> ---
>  chardev/chardev-internal.h |  3 ++
>  chardev/char.c | 35 +--
>  chardev/chardev-sysemu.c   | 69 ++
>  chardev/Makefile.objs  |  1 +
>  4 files changed, 74 insertions(+), 34 deletions(-)
>  create mode 100644 chardev/chardev-sysemu.c
>
> diff --git a/chardev/chardev-internal.h b/chardev/chardev-internal.h
> index e0264ac349..f4d0429763 100644
> --- a/chardev/chardev-internal.h
> +++ b/chardev/chardev-internal.h
> @@ -26,6 +26,7 @@
>
>  #include "chardev/char.h"
>  #include "chardev/char-fe.h"
> +#include "qom/object.h"
>
>  #define MAX_MUX 4
>  #define MUX_BUFFER_SIZE 32 /* Must be a power of 2.  */
> @@ -59,4 +60,6 @@ typedef struct MuxChardev {
>  void mux_set_focus(Chardev *chr, int focus);
>  void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent event);
>
> +Object *get_chardevs_root(void);
> +
>  #endif /* CHAR_MUX_H */
> diff --git a/chardev/char.c b/chardev/char.c
> index b672a41150..555bb0448e 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -44,7 +44,7 @@
>  /***/
>  /* character device */
>
> -static Object *get_chardevs_root(void)
> +Object *get_chardevs_root(void)
>  {
>  return container_get(object_get_root(), "/chardevs");
>  }
> @@ -300,33 +300,6 @@ static const TypeInfo char_type_info = {
>  .class_init = char_class_init,
>  };
>
> -static int chardev_machine_done_notify_one(Object *child, void *opaque)
> -{
> -Chardev *chr = (Chardev *)child;
> -ChardevClass *class = CHARDEV_GET_CLASS(chr);
> -
> -if (class->chr_machine_done) {
> -return class->chr_machine_done(chr);
> -}
> -
> -return 0;
> -}
> -
> -static void chardev_machine_done_hook(Notifier *notifier, void *unused)
> -{
> -int ret = object_child_foreach(get_chardevs_root(),
> -   chardev_machine_done_notify_one, NULL);
> -
> -if (ret) {
> -error_report("Failed to call chardev machine_done hooks");
> -exit(1);
> -}
> -}
> -
> -static Notifier chardev_machine_done_notify = {
> -.notify = chardev_machine_done_hook,
> -};
> -
>  static bool qemu_chr_is_busy(Chardev *s)
>  {
>  if (CHARDEV_IS_MUX(s)) {
> @@ -1187,12 +1160,6 @@ void qemu_chr_cleanup(void)
>  static void register_types(void)
>  {
>  type_register_static(&char_type_info);
> -
> -/* this must be done after machine init, since we register FEs with muxes
> - * as part of realize functions like serial_isa_realizefn when -nographic
> - * is specified
> - */
> -qemu_add_machine_init_done_notifier(&chardev_machine_done_notify);
>  }
>
>  type_init(register_types);
> diff --git a/chardev/chardev-sysemu.c b/chardev/chardev-sysemu.c
> new file mode 100644
> index 00..eecdc615ee
> --- /dev/null
> +++ b/chardev/chardev-sysemu.c
> @@ -0,0 +1,69 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a 
> copy
> + * of this software and associated documentation files (the "Software"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
> FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "sysemu/sysemu.h"
> +#include "chardev/char.h"
> +#include "qemu/error-report.h"
> +#include "chardev-internal.h"
> +
> +static int chardev_machine_done_notify_one(Object *child, void *opaque)
> +{
> +Chardev *chr = (Chardev *)child;
> +ChardevClass *class = CHARDEV_GET_CLASS(chr);
> +
> +if (class->chr_machine_done) {
> +return class->chr_machine_done(chr);
> +}
> +
> +return 0;
> +}
> +
> +static void chardev_machine_done_hook(Notifier *notifier, void *unused)
> +{
> +int ret = object_child_foreach(get_chardevs_root(),
> +

[PATCH 5/7] chardev: Extract system emulation specific code

2020-04-23 Thread Philippe Mathieu-Daudé
Split out code only used during system emulation,
to reduce code pulled in user emulation and tools.

Signed-off-by: Philippe Mathieu-Daudé 
---
 chardev/chardev-internal.h |  3 ++
 chardev/char.c | 35 +--
 chardev/chardev-sysemu.c   | 69 ++
 chardev/Makefile.objs  |  1 +
 4 files changed, 74 insertions(+), 34 deletions(-)
 create mode 100644 chardev/chardev-sysemu.c

diff --git a/chardev/chardev-internal.h b/chardev/chardev-internal.h
index e0264ac349..f4d0429763 100644
--- a/chardev/chardev-internal.h
+++ b/chardev/chardev-internal.h
@@ -26,6 +26,7 @@
 
 #include "chardev/char.h"
 #include "chardev/char-fe.h"
+#include "qom/object.h"
 
 #define MAX_MUX 4
 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2.  */
@@ -59,4 +60,6 @@ typedef struct MuxChardev {
 void mux_set_focus(Chardev *chr, int focus);
 void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent event);
 
+Object *get_chardevs_root(void);
+
 #endif /* CHAR_MUX_H */
diff --git a/chardev/char.c b/chardev/char.c
index b672a41150..555bb0448e 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -44,7 +44,7 @@
 /***/
 /* character device */
 
-static Object *get_chardevs_root(void)
+Object *get_chardevs_root(void)
 {
 return container_get(object_get_root(), "/chardevs");
 }
@@ -300,33 +300,6 @@ static const TypeInfo char_type_info = {
 .class_init = char_class_init,
 };
 
-static int chardev_machine_done_notify_one(Object *child, void *opaque)
-{
-Chardev *chr = (Chardev *)child;
-ChardevClass *class = CHARDEV_GET_CLASS(chr);
-
-if (class->chr_machine_done) {
-return class->chr_machine_done(chr);
-}
-
-return 0;
-}
-
-static void chardev_machine_done_hook(Notifier *notifier, void *unused)
-{
-int ret = object_child_foreach(get_chardevs_root(),
-   chardev_machine_done_notify_one, NULL);
-
-if (ret) {
-error_report("Failed to call chardev machine_done hooks");
-exit(1);
-}
-}
-
-static Notifier chardev_machine_done_notify = {
-.notify = chardev_machine_done_hook,
-};
-
 static bool qemu_chr_is_busy(Chardev *s)
 {
 if (CHARDEV_IS_MUX(s)) {
@@ -1187,12 +1160,6 @@ void qemu_chr_cleanup(void)
 static void register_types(void)
 {
 type_register_static(&char_type_info);
-
-/* this must be done after machine init, since we register FEs with muxes
- * as part of realize functions like serial_isa_realizefn when -nographic
- * is specified
- */
-qemu_add_machine_init_done_notifier(&chardev_machine_done_notify);
 }
 
 type_init(register_types);
diff --git a/chardev/chardev-sysemu.c b/chardev/chardev-sysemu.c
new file mode 100644
index 00..eecdc615ee
--- /dev/null
+++ b/chardev/chardev-sysemu.c
@@ -0,0 +1,69 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to 
deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "qemu/osdep.h"
+#include "sysemu/sysemu.h"
+#include "chardev/char.h"
+#include "qemu/error-report.h"
+#include "chardev-internal.h"
+
+static int chardev_machine_done_notify_one(Object *child, void *opaque)
+{
+Chardev *chr = (Chardev *)child;
+ChardevClass *class = CHARDEV_GET_CLASS(chr);
+
+if (class->chr_machine_done) {
+return class->chr_machine_done(chr);
+}
+
+return 0;
+}
+
+static void chardev_machine_done_hook(Notifier *notifier, void *unused)
+{
+int ret = object_child_foreach(get_chardevs_root(),
+   chardev_machine_done_notify_one, NULL);
+
+if (ret) {
+error_report("Failed to call chardev machine_done hooks");
+exit(1);
+}
+}
+
+
+static Notifier chardev_machine_done_notify = {
+.notify = chardev_machine_done_hook,
+};
+
+static void register_types(void)
+{
+/*
+ * This must be done after machine init, since we register FEs