diff mbox series

[01/26] hw/ppc: Avoid using Monitor in pnv_phb3_msi_pic_print_info()

Message ID 20240610062105.49848-2-philmd@linaro.org
State Superseded
Headers show
Series hw/ppc: Prefer HumanReadableText over Monitor | expand

Commit Message

Philippe Mathieu-Daudé June 10, 2024, 6:20 a.m. UTC
Replace Monitor API by HumanReadableText one.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/hw/pci-host/pnv_phb3.h |  2 +-
 hw/pci-host/pnv_phb3_msi.c     | 21 ++++++++++-----------
 hw/ppc/pnv.c                   |  8 +++++++-
 3 files changed, 18 insertions(+), 13 deletions(-)

Comments

Harsh Prateek Bora June 17, 2024, 10:11 a.m. UTC | #1
On 6/10/24 11:50, Philippe Mathieu-Daudé wrote:
> Replace Monitor API by HumanReadableText one.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>

> ---
>   include/hw/pci-host/pnv_phb3.h |  2 +-
>   hw/pci-host/pnv_phb3_msi.c     | 21 ++++++++++-----------
>   hw/ppc/pnv.c                   |  8 +++++++-
>   3 files changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h
> index d62b3091ac..24ca3dddaa 100644
> --- a/include/hw/pci-host/pnv_phb3.h
> +++ b/include/hw/pci-host/pnv_phb3.h
> @@ -40,7 +40,7 @@ void pnv_phb3_msi_update_config(Phb3MsiState *msis, uint32_t base,
>   void pnv_phb3_msi_send(Phb3MsiState *msis, uint64_t addr, uint16_t data,
>                          int32_t dev_pe);
>   void pnv_phb3_msi_ffi(Phb3MsiState *msis, uint64_t val);
> -void pnv_phb3_msi_pic_print_info(Phb3MsiState *msis, Monitor *mon);
> +void pnv_phb3_msi_pic_print_info(Phb3MsiState *msis, GString *buf);
>   
>   
>   /*
> diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c
> index a6d827f903..77d673da54 100644
> --- a/hw/pci-host/pnv_phb3_msi.c
> +++ b/hw/pci-host/pnv_phb3_msi.c
> @@ -13,7 +13,6 @@
>   #include "hw/pci-host/pnv_phb3.h"
>   #include "hw/ppc/pnv.h"
>   #include "hw/pci/msi.h"
> -#include "monitor/monitor.h"
>   #include "hw/irq.h"
>   #include "hw/qdev-properties.h"
>   #include "sysemu/reset.h"
> @@ -316,13 +315,13 @@ static void pnv_phb3_msi_register_types(void)
>   
>   type_init(pnv_phb3_msi_register_types);
>   
> -void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, Monitor *mon)
> +void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, GString *buf)
>   {
>       ICSState *ics = ICS(msi);
>       int i;
>   
> -    monitor_printf(mon, "ICS %4x..%4x %p\n",
> -                   ics->offset, ics->offset + ics->nr_irqs - 1, ics);
> +    g_string_append_printf(buf, "ICS %4x..%4x %p\n",
> +                           ics->offset, ics->offset + ics->nr_irqs - 1, ics);
>   
>       for (i = 0; i < ics->nr_irqs; i++) {
>           uint64_t ive;
> @@ -335,12 +334,12 @@ void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, Monitor *mon)
>               continue;
>           }
>   
> -        monitor_printf(mon, "  %4x %c%c server=%04x prio=%02x gen=%d\n",
> -                       ics->offset + i,
> -                       GETFIELD(IODA2_IVT_P, ive) ? 'P' : '-',
> -                       GETFIELD(IODA2_IVT_Q, ive) ? 'Q' : '-',
> -                       (uint32_t) GETFIELD(IODA2_IVT_SERVER, ive) >> 2,
> -                       (uint32_t) GETFIELD(IODA2_IVT_PRIORITY, ive),
> -                       (uint32_t) GETFIELD(IODA2_IVT_GEN, ive));
> +        g_string_append_printf(buf, "  %4x %c%c server=%04x prio=%02x gen=%d\n",
> +                               ics->offset + i,
> +                               GETFIELD(IODA2_IVT_P, ive) ? 'P' : '-',
> +                               GETFIELD(IODA2_IVT_Q, ive) ? 'Q' : '-',
> +                               (uint32_t) GETFIELD(IODA2_IVT_SERVER, ive) >> 2,
> +                               (uint32_t) GETFIELD(IODA2_IVT_PRIORITY, ive),
> +                               (uint32_t) GETFIELD(IODA2_IVT_GEN, ive));
>       }
>   }
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index 6e3a5ccdec..5356a4e295 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -38,6 +38,7 @@
>   #include "hw/loader.h"
>   #include "hw/nmi.h"
>   #include "qapi/visitor.h"
> +#include "qapi/type-helpers.h"
>   #include "monitor/monitor.h"
>   #include "hw/intc/intc.h"
>   #include "hw/ipmi/ipmi.h"
> @@ -774,8 +775,13 @@ static void pnv_chip_power8_pic_print_info(PnvChip *chip, Monitor *mon)
>       for (i = 0; i < chip8->num_phbs; i++) {
>           PnvPHB *phb = chip8->phbs[i];
>           PnvPHB3 *phb3 = PNV_PHB3(phb->backend);
> +        g_autoptr(GString) buf = g_string_new("");
> +        g_autoptr(HumanReadableText) info = NULL;
> +
> +        pnv_phb3_msi_pic_print_info(&phb3->msis, buf);
> +        info = human_readable_text_from_str(buf);
> +        monitor_puts(mon, info->human_readable_text);
>   
> -        pnv_phb3_msi_pic_print_info(&phb3->msis, mon);
>           ics_pic_print_info(&phb3->lsis, mon);
>       }
>   }
Harsh Prateek Bora June 17, 2024, 10:19 a.m. UTC | #2
Hi Phillipe,

One query below:

On 6/17/24 15:41, Harsh Prateek Bora wrote:
> 
> 
> On 6/10/24 11:50, Philippe Mathieu-Daudé wrote:
>> Replace Monitor API by HumanReadableText one.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> 
> Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
> 
>> ---
>>   include/hw/pci-host/pnv_phb3.h |  2 +-
>>   hw/pci-host/pnv_phb3_msi.c     | 21 ++++++++++-----------
>>   hw/ppc/pnv.c                   |  8 +++++++-
>>   3 files changed, 18 insertions(+), 13 deletions(-)
>>

<snip>

>> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
>> index 6e3a5ccdec..5356a4e295 100644
>> --- a/hw/ppc/pnv.c
>> +++ b/hw/ppc/pnv.c
>> @@ -38,6 +38,7 @@
>>   #include "hw/loader.h"
>>   #include "hw/nmi.h"
>>   #include "qapi/visitor.h"
>> +#include "qapi/type-helpers.h"
>>   #include "monitor/monitor.h"
>>   #include "hw/intc/intc.h"
>>   #include "hw/ipmi/ipmi.h"
>> @@ -774,8 +775,13 @@ static void 
>> pnv_chip_power8_pic_print_info(PnvChip *chip, Monitor *mon)
>>       for (i = 0; i < chip8->num_phbs; i++) {
>>           PnvPHB *phb = chip8->phbs[i];
>>           PnvPHB3 *phb3 = PNV_PHB3(phb->backend);
>> +        g_autoptr(GString) buf = g_string_new("");
>> +        g_autoptr(HumanReadableText) info = NULL;
>> +
>> +        pnv_phb3_msi_pic_print_info(&phb3->msis, buf);
>> +        info = human_readable_text_from_str(buf);
>> +        monitor_puts(mon, info->human_readable_text);
>> -        pnv_phb3_msi_pic_print_info(&phb3->msis, mon);
>>           ics_pic_print_info(&phb3->lsis, mon);

How is the memory allocated to info in human_readable_text_from_str 
being reclaimed here? Isnt it a mem leak ?

Thanks
Harsh

>>       }
>>   }
>
Harsh Prateek Bora June 17, 2024, 10:29 a.m. UTC | #3
On 6/17/24 15:49, Harsh Prateek Bora wrote:
> Hi Phillipe,
> 
> One query below:
> 
> On 6/17/24 15:41, Harsh Prateek Bora wrote:
>>
>>
>> On 6/10/24 11:50, Philippe Mathieu-Daudé wrote:
>>> Replace Monitor API by HumanReadableText one.
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>
>> Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
>>
>>> ---
>>>   include/hw/pci-host/pnv_phb3.h |  2 +-
>>>   hw/pci-host/pnv_phb3_msi.c     | 21 ++++++++++-----------
>>>   hw/ppc/pnv.c                   |  8 +++++++-
>>>   3 files changed, 18 insertions(+), 13 deletions(-)
>>>
> 
> <snip>
> 
>>> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
>>> index 6e3a5ccdec..5356a4e295 100644
>>> --- a/hw/ppc/pnv.c
>>> +++ b/hw/ppc/pnv.c
>>> @@ -38,6 +38,7 @@
>>>   #include "hw/loader.h"
>>>   #include "hw/nmi.h"
>>>   #include "qapi/visitor.h"
>>> +#include "qapi/type-helpers.h"
>>>   #include "monitor/monitor.h"
>>>   #include "hw/intc/intc.h"
>>>   #include "hw/ipmi/ipmi.h"
>>> @@ -774,8 +775,13 @@ static void 
>>> pnv_chip_power8_pic_print_info(PnvChip *chip, Monitor *mon)
>>>       for (i = 0; i < chip8->num_phbs; i++) {
>>>           PnvPHB *phb = chip8->phbs[i];
>>>           PnvPHB3 *phb3 = PNV_PHB3(phb->backend);
>>> +        g_autoptr(GString) buf = g_string_new("");
>>> +        g_autoptr(HumanReadableText) info = NULL;
>>> +
>>> +        pnv_phb3_msi_pic_print_info(&phb3->msis, buf);
>>> +        info = human_readable_text_from_str(buf);
>>> +        monitor_puts(mon, info->human_readable_text);
>>> -        pnv_phb3_msi_pic_print_info(&phb3->msis, mon);
>>>           ics_pic_print_info(&phb3->lsis, mon);
> 
> How is the memory allocated to info in human_readable_text_from_str 
> being reclaimed here? Isnt it a mem leak ?
> 
Ok, I see, g_autoptr takes care of auto cleanup. Please ignore.

> Thanks
> Harsh
> 
>>>       }
>>>   }
>>
diff mbox series

Patch

diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h
index d62b3091ac..24ca3dddaa 100644
--- a/include/hw/pci-host/pnv_phb3.h
+++ b/include/hw/pci-host/pnv_phb3.h
@@ -40,7 +40,7 @@  void pnv_phb3_msi_update_config(Phb3MsiState *msis, uint32_t base,
 void pnv_phb3_msi_send(Phb3MsiState *msis, uint64_t addr, uint16_t data,
                        int32_t dev_pe);
 void pnv_phb3_msi_ffi(Phb3MsiState *msis, uint64_t val);
-void pnv_phb3_msi_pic_print_info(Phb3MsiState *msis, Monitor *mon);
+void pnv_phb3_msi_pic_print_info(Phb3MsiState *msis, GString *buf);
 
 
 /*
diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c
index a6d827f903..77d673da54 100644
--- a/hw/pci-host/pnv_phb3_msi.c
+++ b/hw/pci-host/pnv_phb3_msi.c
@@ -13,7 +13,6 @@ 
 #include "hw/pci-host/pnv_phb3.h"
 #include "hw/ppc/pnv.h"
 #include "hw/pci/msi.h"
-#include "monitor/monitor.h"
 #include "hw/irq.h"
 #include "hw/qdev-properties.h"
 #include "sysemu/reset.h"
@@ -316,13 +315,13 @@  static void pnv_phb3_msi_register_types(void)
 
 type_init(pnv_phb3_msi_register_types);
 
-void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, Monitor *mon)
+void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, GString *buf)
 {
     ICSState *ics = ICS(msi);
     int i;
 
-    monitor_printf(mon, "ICS %4x..%4x %p\n",
-                   ics->offset, ics->offset + ics->nr_irqs - 1, ics);
+    g_string_append_printf(buf, "ICS %4x..%4x %p\n",
+                           ics->offset, ics->offset + ics->nr_irqs - 1, ics);
 
     for (i = 0; i < ics->nr_irqs; i++) {
         uint64_t ive;
@@ -335,12 +334,12 @@  void pnv_phb3_msi_pic_print_info(Phb3MsiState *msi, Monitor *mon)
             continue;
         }
 
-        monitor_printf(mon, "  %4x %c%c server=%04x prio=%02x gen=%d\n",
-                       ics->offset + i,
-                       GETFIELD(IODA2_IVT_P, ive) ? 'P' : '-',
-                       GETFIELD(IODA2_IVT_Q, ive) ? 'Q' : '-',
-                       (uint32_t) GETFIELD(IODA2_IVT_SERVER, ive) >> 2,
-                       (uint32_t) GETFIELD(IODA2_IVT_PRIORITY, ive),
-                       (uint32_t) GETFIELD(IODA2_IVT_GEN, ive));
+        g_string_append_printf(buf, "  %4x %c%c server=%04x prio=%02x gen=%d\n",
+                               ics->offset + i,
+                               GETFIELD(IODA2_IVT_P, ive) ? 'P' : '-',
+                               GETFIELD(IODA2_IVT_Q, ive) ? 'Q' : '-',
+                               (uint32_t) GETFIELD(IODA2_IVT_SERVER, ive) >> 2,
+                               (uint32_t) GETFIELD(IODA2_IVT_PRIORITY, ive),
+                               (uint32_t) GETFIELD(IODA2_IVT_GEN, ive));
     }
 }
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 6e3a5ccdec..5356a4e295 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -38,6 +38,7 @@ 
 #include "hw/loader.h"
 #include "hw/nmi.h"
 #include "qapi/visitor.h"
+#include "qapi/type-helpers.h"
 #include "monitor/monitor.h"
 #include "hw/intc/intc.h"
 #include "hw/ipmi/ipmi.h"
@@ -774,8 +775,13 @@  static void pnv_chip_power8_pic_print_info(PnvChip *chip, Monitor *mon)
     for (i = 0; i < chip8->num_phbs; i++) {
         PnvPHB *phb = chip8->phbs[i];
         PnvPHB3 *phb3 = PNV_PHB3(phb->backend);
+        g_autoptr(GString) buf = g_string_new("");
+        g_autoptr(HumanReadableText) info = NULL;
+
+        pnv_phb3_msi_pic_print_info(&phb3->msis, buf);
+        info = human_readable_text_from_str(buf);
+        monitor_puts(mon, info->human_readable_text);
 
-        pnv_phb3_msi_pic_print_info(&phb3->msis, mon);
         ics_pic_print_info(&phb3->lsis, mon);
     }
 }