All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c
@ 2019-02-25 16:14 Thomas Huth
  2019-02-25 18:31 ` Laszlo Ersek
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Huth @ 2019-02-25 16:14 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Laszlo Ersek, Gerd Hoffmann, Paolo Bonzini, qemu-trivial

The global boot_splash_filedata and boot_splash_filedata_size variables
are only used in fw_cfg.c. So there is really no need that these need
to be global and reside in vl.c. Move them to fw_cfg.c instead.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 hw/nvram/fw_cfg.c         |  9 +++++++++
 include/hw/nvram/fw_cfg.h |  1 +
 include/sysemu/sysemu.h   |  2 --
 vl.c                      | 10 +---------
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
index 7fdf04a..15f0023 100644
--- a/hw/nvram/fw_cfg.c
+++ b/hw/nvram/fw_cfg.c
@@ -63,6 +63,9 @@ struct FWCfgEntry {
 #define JPG_FILE 0
 #define BMP_FILE 1
 
+static uint8_t *boot_splash_filedata;
+static size_t boot_splash_filedata_size;
+
 static char *read_splashfile(char *filename, gsize *file_sizep,
                              int *file_typep)
 {
@@ -175,6 +178,12 @@ static void fw_cfg_bootsplash(FWCfgState *s)
     }
 }
 
+void fw_cfg_res_free(void)
+{
+    g_free(boot_splash_filedata);
+    boot_splash_filedata = NULL;
+}
+
 static void fw_cfg_reboot(FWCfgState *s)
 {
     const char *reboot_timeout = NULL;
diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
index f5a6895..16d237c 100644
--- a/include/hw/nvram/fw_cfg.h
+++ b/include/hw/nvram/fw_cfg.h
@@ -225,5 +225,6 @@ FWCfgState *fw_cfg_init_mem_wide(hwaddr ctl_addr,
 
 FWCfgState *fw_cfg_find(void);
 bool fw_cfg_dma_enabled(void *opaque);
+void fw_cfg_res_free(void);
 
 #endif
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 4b5a6b7..63a5eed 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -111,8 +111,6 @@ extern int no_shutdown;
 extern int old_param;
 extern int boot_menu;
 extern bool boot_strict;
-extern uint8_t *boot_splash_filedata;
-extern size_t boot_splash_filedata_size;
 extern bool enable_mlock;
 extern bool enable_cpu_pm;
 extern QEMUClockType rtc_clock;
diff --git a/vl.c b/vl.c
index 502857a..f769cce 100644
--- a/vl.c
+++ b/vl.c
@@ -187,8 +187,6 @@ unsigned int nb_prom_envs = 0;
 const char *prom_envs[MAX_PROM_ENVS];
 int boot_menu;
 bool boot_strict;
-uint8_t *boot_splash_filedata;
-size_t boot_splash_filedata_size;
 bool wakeup_suspend_enabled;
 
 int icount_align_option;
@@ -559,12 +557,6 @@ const char *qemu_get_vm_name(void)
     return qemu_name;
 }
 
-static void res_free(void)
-{
-    g_free(boot_splash_filedata);
-    boot_splash_filedata = NULL;
-}
-
 static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
 {
     const char *driver = qemu_opt_get(opts, "driver");
@@ -4585,7 +4577,7 @@ int main(int argc, char **argv, char **envp)
     job_cancel_sync_all();
     bdrv_close_all();
 
-    res_free();
+    fw_cfg_res_free();
 
     /* vhost-user must be cleaned up before chardevs.  */
     tpm_cleanup();
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c
  2019-02-25 16:14 [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c Thomas Huth
@ 2019-02-25 18:31 ` Laszlo Ersek
  2019-03-01 11:28   ` Thomas Huth
  0 siblings, 1 reply; 5+ messages in thread
From: Laszlo Ersek @ 2019-02-25 18:31 UTC (permalink / raw)
  To: Thomas Huth, Philippe Mathieu-Daudé, qemu-devel
  Cc: Gerd Hoffmann, Paolo Bonzini, qemu-trivial

Hi Thomas,

On 02/25/19 17:14, Thomas Huth wrote:
> The global boot_splash_filedata and boot_splash_filedata_size variables
> are only used in fw_cfg.c. So there is really no need that these need
> to be global and reside in vl.c. Move them to fw_cfg.c instead.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/nvram/fw_cfg.c         |  9 +++++++++
>  include/hw/nvram/fw_cfg.h |  1 +
>  include/sysemu/sysemu.h   |  2 --
>  vl.c                      | 10 +---------
>  4 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> index 7fdf04a..15f0023 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -63,6 +63,9 @@ struct FWCfgEntry {
>  #define JPG_FILE 0
>  #define BMP_FILE 1
>  
> +static uint8_t *boot_splash_filedata;
> +static size_t boot_splash_filedata_size;
> +
>  static char *read_splashfile(char *filename, gsize *file_sizep,
>                               int *file_typep)
>  {
> @@ -175,6 +178,12 @@ static void fw_cfg_bootsplash(FWCfgState *s)
>      }
>  }
>  
> +void fw_cfg_res_free(void)
> +{
> +    g_free(boot_splash_filedata);
> +    boot_splash_filedata = NULL;
> +}
> +
>  static void fw_cfg_reboot(FWCfgState *s)
>  {
>      const char *reboot_timeout = NULL;
> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
> index f5a6895..16d237c 100644
> --- a/include/hw/nvram/fw_cfg.h
> +++ b/include/hw/nvram/fw_cfg.h
> @@ -225,5 +225,6 @@ FWCfgState *fw_cfg_init_mem_wide(hwaddr ctl_addr,
>  
>  FWCfgState *fw_cfg_find(void);
>  bool fw_cfg_dma_enabled(void *opaque);
> +void fw_cfg_res_free(void);
>  
>  #endif
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 4b5a6b7..63a5eed 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -111,8 +111,6 @@ extern int no_shutdown;
>  extern int old_param;
>  extern int boot_menu;
>  extern bool boot_strict;
> -extern uint8_t *boot_splash_filedata;
> -extern size_t boot_splash_filedata_size;
>  extern bool enable_mlock;
>  extern bool enable_cpu_pm;
>  extern QEMUClockType rtc_clock;
> diff --git a/vl.c b/vl.c
> index 502857a..f769cce 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -187,8 +187,6 @@ unsigned int nb_prom_envs = 0;
>  const char *prom_envs[MAX_PROM_ENVS];
>  int boot_menu;
>  bool boot_strict;
> -uint8_t *boot_splash_filedata;
> -size_t boot_splash_filedata_size;
>  bool wakeup_suspend_enabled;
>  
>  int icount_align_option;
> @@ -559,12 +557,6 @@ const char *qemu_get_vm_name(void)
>      return qemu_name;
>  }
>  
> -static void res_free(void)
> -{
> -    g_free(boot_splash_filedata);
> -    boot_splash_filedata = NULL;
> -}
> -
>  static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
>  {
>      const char *driver = qemu_opt_get(opts, "driver");
> @@ -4585,7 +4577,7 @@ int main(int argc, char **argv, char **envp)
>      job_cancel_sync_all();
>      bdrv_close_all();
>  
> -    res_free();
> +    fw_cfg_res_free();
>  
>      /* vhost-user must be cleaned up before chardevs.  */
>      tpm_cleanup();
> 

The res_free() function call in main() goes back to commit 3d3b8303c6f8
("showing a splash picture when start", 2011-07-29). That seems to be
the original addition of the bootsplash feature. And, res_free() appears
to simply release dynamic memory before the QEMU process exits.

Do we release malloc'd memory, as a general rule, before we exit the
QEMU process (with exit status 0)? My impression has been that we don't
care; we just let the kernel forget about all memory that the QEMU
process used to own.

If that's the case, I suggest to respin this patch, deleting res_free()
completely. AFAICS there are no other call sites. That would be a nice
improvement IMO (we wouldn't have to extend "include/hw/nvram/fw_cfg.h").

Thanks!
Laszlo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c
  2019-02-25 18:31 ` Laszlo Ersek
@ 2019-03-01 11:28   ` Thomas Huth
  2019-03-01 12:32     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Huth @ 2019-03-01 11:28 UTC (permalink / raw)
  To: Laszlo Ersek, Philippe Mathieu-Daudé, qemu-devel
  Cc: Gerd Hoffmann, Paolo Bonzini, qemu-trivial

On 25/02/2019 19.31, Laszlo Ersek wrote:
> Hi Thomas,
> 
> On 02/25/19 17:14, Thomas Huth wrote:
>> The global boot_splash_filedata and boot_splash_filedata_size variables
>> are only used in fw_cfg.c. So there is really no need that these need
>> to be global and reside in vl.c. Move them to fw_cfg.c instead.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  hw/nvram/fw_cfg.c         |  9 +++++++++
>>  include/hw/nvram/fw_cfg.h |  1 +
>>  include/sysemu/sysemu.h   |  2 --
>>  vl.c                      | 10 +---------
>>  4 files changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
>> index 7fdf04a..15f0023 100644
>> --- a/hw/nvram/fw_cfg.c
>> +++ b/hw/nvram/fw_cfg.c
>> @@ -63,6 +63,9 @@ struct FWCfgEntry {
>>  #define JPG_FILE 0
>>  #define BMP_FILE 1
>>  
>> +static uint8_t *boot_splash_filedata;
>> +static size_t boot_splash_filedata_size;
>> +
>>  static char *read_splashfile(char *filename, gsize *file_sizep,
>>                               int *file_typep)
>>  {
>> @@ -175,6 +178,12 @@ static void fw_cfg_bootsplash(FWCfgState *s)
>>      }
>>  }
>>  
>> +void fw_cfg_res_free(void)
>> +{
>> +    g_free(boot_splash_filedata);
>> +    boot_splash_filedata = NULL;
>> +}
>> +
>>  static void fw_cfg_reboot(FWCfgState *s)
>>  {
>>      const char *reboot_timeout = NULL;
>> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
>> index f5a6895..16d237c 100644
>> --- a/include/hw/nvram/fw_cfg.h
>> +++ b/include/hw/nvram/fw_cfg.h
>> @@ -225,5 +225,6 @@ FWCfgState *fw_cfg_init_mem_wide(hwaddr ctl_addr,
>>  
>>  FWCfgState *fw_cfg_find(void);
>>  bool fw_cfg_dma_enabled(void *opaque);
>> +void fw_cfg_res_free(void);
>>  
>>  #endif
>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>> index 4b5a6b7..63a5eed 100644
>> --- a/include/sysemu/sysemu.h
>> +++ b/include/sysemu/sysemu.h
>> @@ -111,8 +111,6 @@ extern int no_shutdown;
>>  extern int old_param;
>>  extern int boot_menu;
>>  extern bool boot_strict;
>> -extern uint8_t *boot_splash_filedata;
>> -extern size_t boot_splash_filedata_size;
>>  extern bool enable_mlock;
>>  extern bool enable_cpu_pm;
>>  extern QEMUClockType rtc_clock;
>> diff --git a/vl.c b/vl.c
>> index 502857a..f769cce 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -187,8 +187,6 @@ unsigned int nb_prom_envs = 0;
>>  const char *prom_envs[MAX_PROM_ENVS];
>>  int boot_menu;
>>  bool boot_strict;
>> -uint8_t *boot_splash_filedata;
>> -size_t boot_splash_filedata_size;
>>  bool wakeup_suspend_enabled;
>>  
>>  int icount_align_option;
>> @@ -559,12 +557,6 @@ const char *qemu_get_vm_name(void)
>>      return qemu_name;
>>  }
>>  
>> -static void res_free(void)
>> -{
>> -    g_free(boot_splash_filedata);
>> -    boot_splash_filedata = NULL;
>> -}
>> -
>>  static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
>>  {
>>      const char *driver = qemu_opt_get(opts, "driver");
>> @@ -4585,7 +4577,7 @@ int main(int argc, char **argv, char **envp)
>>      job_cancel_sync_all();
>>      bdrv_close_all();
>>  
>> -    res_free();
>> +    fw_cfg_res_free();
>>  
>>      /* vhost-user must be cleaned up before chardevs.  */
>>      tpm_cleanup();
>>
> 
> The res_free() function call in main() goes back to commit 3d3b8303c6f8
> ("showing a splash picture when start", 2011-07-29). That seems to be
> the original addition of the bootsplash feature. And, res_free() appears
> to simply release dynamic memory before the QEMU process exits.
> 
> Do we release malloc'd memory, as a general rule, before we exit the
> QEMU process (with exit status 0)? My impression has been that we don't
> care; we just let the kernel forget about all memory that the QEMU
> process used to own.
> 
> If that's the case, I suggest to respin this patch, deleting res_free()
> completely. AFAICS there are no other call sites. That would be a nice
> improvement IMO (we wouldn't have to extend "include/hw/nvram/fw_cfg.h").

Hmm, thinking about this for a while, the fw_cfg is a qdev device, so I
think we should at least add an unrealize() function where we clean up
the allocated memory, even if the unrealize function is currently not
called yet, since the device never gets destroyed...

 Thomas

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c
  2019-03-01 11:28   ` Thomas Huth
@ 2019-03-01 12:32     ` Philippe Mathieu-Daudé
  2019-03-01 12:39       ` Thomas Huth
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-03-01 12:32 UTC (permalink / raw)
  To: Thomas Huth, Laszlo Ersek, qemu-devel
  Cc: Gerd Hoffmann, Paolo Bonzini, qemu-trivial

Hi Thomas,

On 3/1/19 12:28 PM, Thomas Huth wrote:
> On 25/02/2019 19.31, Laszlo Ersek wrote:
>> Hi Thomas,
>>
>> On 02/25/19 17:14, Thomas Huth wrote:
>>> The global boot_splash_filedata and boot_splash_filedata_size variables
>>> are only used in fw_cfg.c. So there is really no need that these need
>>> to be global and reside in vl.c. Move them to fw_cfg.c instead.
>>>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>>  hw/nvram/fw_cfg.c         |  9 +++++++++
>>>  include/hw/nvram/fw_cfg.h |  1 +
>>>  include/sysemu/sysemu.h   |  2 --
>>>  vl.c                      | 10 +---------
>>>  4 files changed, 11 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
>>> index 7fdf04a..15f0023 100644
>>> --- a/hw/nvram/fw_cfg.c
>>> +++ b/hw/nvram/fw_cfg.c
>>> @@ -63,6 +63,9 @@ struct FWCfgEntry {
>>>  #define JPG_FILE 0
>>>  #define BMP_FILE 1
>>>  
>>> +static uint8_t *boot_splash_filedata;
>>> +static size_t boot_splash_filedata_size;
>>> +
>>>  static char *read_splashfile(char *filename, gsize *file_sizep,
>>>                               int *file_typep)
>>>  {
>>> @@ -175,6 +178,12 @@ static void fw_cfg_bootsplash(FWCfgState *s)
>>>      }
>>>  }
>>>  
>>> +void fw_cfg_res_free(void)
>>> +{
>>> +    g_free(boot_splash_filedata);
>>> +    boot_splash_filedata = NULL;
>>> +}
>>> +
>>>  static void fw_cfg_reboot(FWCfgState *s)
>>>  {
>>>      const char *reboot_timeout = NULL;
>>> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
>>> index f5a6895..16d237c 100644
>>> --- a/include/hw/nvram/fw_cfg.h
>>> +++ b/include/hw/nvram/fw_cfg.h
>>> @@ -225,5 +225,6 @@ FWCfgState *fw_cfg_init_mem_wide(hwaddr ctl_addr,
>>>  
>>>  FWCfgState *fw_cfg_find(void);
>>>  bool fw_cfg_dma_enabled(void *opaque);
>>> +void fw_cfg_res_free(void);
>>>  
>>>  #endif
>>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>>> index 4b5a6b7..63a5eed 100644
>>> --- a/include/sysemu/sysemu.h
>>> +++ b/include/sysemu/sysemu.h
>>> @@ -111,8 +111,6 @@ extern int no_shutdown;
>>>  extern int old_param;
>>>  extern int boot_menu;
>>>  extern bool boot_strict;
>>> -extern uint8_t *boot_splash_filedata;
>>> -extern size_t boot_splash_filedata_size;
>>>  extern bool enable_mlock;
>>>  extern bool enable_cpu_pm;
>>>  extern QEMUClockType rtc_clock;
>>> diff --git a/vl.c b/vl.c
>>> index 502857a..f769cce 100644
>>> --- a/vl.c
>>> +++ b/vl.c
>>> @@ -187,8 +187,6 @@ unsigned int nb_prom_envs = 0;
>>>  const char *prom_envs[MAX_PROM_ENVS];
>>>  int boot_menu;
>>>  bool boot_strict;
>>> -uint8_t *boot_splash_filedata;
>>> -size_t boot_splash_filedata_size;
>>>  bool wakeup_suspend_enabled;
>>>  
>>>  int icount_align_option;
>>> @@ -559,12 +557,6 @@ const char *qemu_get_vm_name(void)
>>>      return qemu_name;
>>>  }
>>>  
>>> -static void res_free(void)
>>> -{
>>> -    g_free(boot_splash_filedata);
>>> -    boot_splash_filedata = NULL;
>>> -}
>>> -
>>>  static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
>>>  {
>>>      const char *driver = qemu_opt_get(opts, "driver");
>>> @@ -4585,7 +4577,7 @@ int main(int argc, char **argv, char **envp)
>>>      job_cancel_sync_all();
>>>      bdrv_close_all();
>>>  
>>> -    res_free();
>>> +    fw_cfg_res_free();
>>>  
>>>      /* vhost-user must be cleaned up before chardevs.  */
>>>      tpm_cleanup();
>>>
>>
>> The res_free() function call in main() goes back to commit 3d3b8303c6f8
>> ("showing a splash picture when start", 2011-07-29). That seems to be
>> the original addition of the bootsplash feature. And, res_free() appears
>> to simply release dynamic memory before the QEMU process exits.
>>
>> Do we release malloc'd memory, as a general rule, before we exit the
>> QEMU process (with exit status 0)? My impression has been that we don't
>> care; we just let the kernel forget about all memory that the QEMU
>> process used to own.
>>
>> If that's the case, I suggest to respin this patch, deleting res_free()
>> completely. AFAICS there are no other call sites. That would be a nice
>> improvement IMO (we wouldn't have to extend "include/hw/nvram/fw_cfg.h").
> 
> Hmm, thinking about this for a while, the fw_cfg is a qdev device, so I
> think we should at least add an unrealize() function where we clean up
> the allocated memory, even if the unrealize function is currently not
> called yet, since the device never gets destroyed...

I worked on a similar cleanup last month, I can submit it this
afternoon. Do you mind having a look at it before reworking this patch?
I'm not sure which one is the best, but since the work is already done I
don't want any of us waste his time :)

Thanks,

Phil.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c
  2019-03-01 12:32     ` Philippe Mathieu-Daudé
@ 2019-03-01 12:39       ` Thomas Huth
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Huth @ 2019-03-01 12:39 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Laszlo Ersek, qemu-devel
  Cc: Gerd Hoffmann, Paolo Bonzini, qemu-trivial

On 01/03/2019 13.32, Philippe Mathieu-Daudé wrote:
> Hi Thomas,
> 
> On 3/1/19 12:28 PM, Thomas Huth wrote:
>> On 25/02/2019 19.31, Laszlo Ersek wrote:
>>> Hi Thomas,
>>>
>>> On 02/25/19 17:14, Thomas Huth wrote:
>>>> The global boot_splash_filedata and boot_splash_filedata_size variables
>>>> are only used in fw_cfg.c. So there is really no need that these need
>>>> to be global and reside in vl.c. Move them to fw_cfg.c instead.
>>>>
>>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>>> ---
>>>>  hw/nvram/fw_cfg.c         |  9 +++++++++
>>>>  include/hw/nvram/fw_cfg.h |  1 +
>>>>  include/sysemu/sysemu.h   |  2 --
>>>>  vl.c                      | 10 +---------
>>>>  4 files changed, 11 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
>>>> index 7fdf04a..15f0023 100644
>>>> --- a/hw/nvram/fw_cfg.c
>>>> +++ b/hw/nvram/fw_cfg.c
>>>> @@ -63,6 +63,9 @@ struct FWCfgEntry {
>>>>  #define JPG_FILE 0
>>>>  #define BMP_FILE 1
>>>>  
>>>> +static uint8_t *boot_splash_filedata;
>>>> +static size_t boot_splash_filedata_size;
>>>> +
>>>>  static char *read_splashfile(char *filename, gsize *file_sizep,
>>>>                               int *file_typep)
>>>>  {
>>>> @@ -175,6 +178,12 @@ static void fw_cfg_bootsplash(FWCfgState *s)
>>>>      }
>>>>  }
>>>>  
>>>> +void fw_cfg_res_free(void)
>>>> +{
>>>> +    g_free(boot_splash_filedata);
>>>> +    boot_splash_filedata = NULL;
>>>> +}
>>>> +
>>>>  static void fw_cfg_reboot(FWCfgState *s)
>>>>  {
>>>>      const char *reboot_timeout = NULL;
>>>> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
>>>> index f5a6895..16d237c 100644
>>>> --- a/include/hw/nvram/fw_cfg.h
>>>> +++ b/include/hw/nvram/fw_cfg.h
>>>> @@ -225,5 +225,6 @@ FWCfgState *fw_cfg_init_mem_wide(hwaddr ctl_addr,
>>>>  
>>>>  FWCfgState *fw_cfg_find(void);
>>>>  bool fw_cfg_dma_enabled(void *opaque);
>>>> +void fw_cfg_res_free(void);
>>>>  
>>>>  #endif
>>>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>>>> index 4b5a6b7..63a5eed 100644
>>>> --- a/include/sysemu/sysemu.h
>>>> +++ b/include/sysemu/sysemu.h
>>>> @@ -111,8 +111,6 @@ extern int no_shutdown;
>>>>  extern int old_param;
>>>>  extern int boot_menu;
>>>>  extern bool boot_strict;
>>>> -extern uint8_t *boot_splash_filedata;
>>>> -extern size_t boot_splash_filedata_size;
>>>>  extern bool enable_mlock;
>>>>  extern bool enable_cpu_pm;
>>>>  extern QEMUClockType rtc_clock;
>>>> diff --git a/vl.c b/vl.c
>>>> index 502857a..f769cce 100644
>>>> --- a/vl.c
>>>> +++ b/vl.c
>>>> @@ -187,8 +187,6 @@ unsigned int nb_prom_envs = 0;
>>>>  const char *prom_envs[MAX_PROM_ENVS];
>>>>  int boot_menu;
>>>>  bool boot_strict;
>>>> -uint8_t *boot_splash_filedata;
>>>> -size_t boot_splash_filedata_size;
>>>>  bool wakeup_suspend_enabled;
>>>>  
>>>>  int icount_align_option;
>>>> @@ -559,12 +557,6 @@ const char *qemu_get_vm_name(void)
>>>>      return qemu_name;
>>>>  }
>>>>  
>>>> -static void res_free(void)
>>>> -{
>>>> -    g_free(boot_splash_filedata);
>>>> -    boot_splash_filedata = NULL;
>>>> -}
>>>> -
>>>>  static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
>>>>  {
>>>>      const char *driver = qemu_opt_get(opts, "driver");
>>>> @@ -4585,7 +4577,7 @@ int main(int argc, char **argv, char **envp)
>>>>      job_cancel_sync_all();
>>>>      bdrv_close_all();
>>>>  
>>>> -    res_free();
>>>> +    fw_cfg_res_free();
>>>>  
>>>>      /* vhost-user must be cleaned up before chardevs.  */
>>>>      tpm_cleanup();
>>>>
>>>
>>> The res_free() function call in main() goes back to commit 3d3b8303c6f8
>>> ("showing a splash picture when start", 2011-07-29). That seems to be
>>> the original addition of the bootsplash feature. And, res_free() appears
>>> to simply release dynamic memory before the QEMU process exits.
>>>
>>> Do we release malloc'd memory, as a general rule, before we exit the
>>> QEMU process (with exit status 0)? My impression has been that we don't
>>> care; we just let the kernel forget about all memory that the QEMU
>>> process used to own.
>>>
>>> If that's the case, I suggest to respin this patch, deleting res_free()
>>> completely. AFAICS there are no other call sites. That would be a nice
>>> improvement IMO (we wouldn't have to extend "include/hw/nvram/fw_cfg.h").
>>
>> Hmm, thinking about this for a while, the fw_cfg is a qdev device, so I
>> think we should at least add an unrealize() function where we clean up
>> the allocated memory, even if the unrealize function is currently not
>> called yet, since the device never gets destroyed...
> 
> I worked on a similar cleanup last month, I can submit it this
> afternoon. Do you mind having a look at it before reworking this patch?

Sure, just put me on CC: so that I don't miss it.

 Thomas

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-03-01 12:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-25 16:14 [Qemu-devel] [PATCH] hw/nvram/fw_cfg: Move boot_splash_filedata variables into fw_cfg.c Thomas Huth
2019-02-25 18:31 ` Laszlo Ersek
2019-03-01 11:28   ` Thomas Huth
2019-03-01 12:32     ` Philippe Mathieu-Daudé
2019-03-01 12:39       ` Thomas Huth

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.