qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci'
@ 2023-01-03 16:48 Philippe Mathieu-Daudé
  2023-01-03 17:39 ` BALATON Zoltan
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-03 16:48 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Marcel Apfelbaum, Philippe Mathieu-Daudé

When a BAR is not mapped, the displayed size is shifted by 1 byte:

  (qemu) info pci
    ...
    Bus  0, device  11, function 0:
      Ethernet controller: PCI device 1022:2000
        PCI subsystem 0000:0000
        IRQ 10, pin A
        BAR0: I/O at 0xffffffffffffffff [0x001e].
        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001e].   <===
        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].   <===
        id ""
    Bus  0, device  18, function 0:
      VGA controller: PCI device 1013:00b8
        PCI subsystem 1af4:1100
        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].   <===
        id ""

Only substract this byte when the BAR is mapped to display
the correct size:

  (qemu) info pci
    ...
    Bus  0, device  11, function 0:
      Ethernet controller: PCI device 1022:2000
        PCI subsystem 0000:0000
        IRQ 10, pin A
        BAR0: I/O at 0xffffffffffffffff [0x001f].
        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001f].   <===
        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003ffff].   <===
        id ""
    Bus  0, device  18, function 0:
      VGA controller: PCI device 1013:00b8
        PCI subsystem 1af4:1100
        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000ffff].   <===
        id ""

Fixes: 0ac32c8375 ("PCI interrupt support - 'info pci' monitor command")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/pci/pci-hmp-cmds.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/pci/pci-hmp-cmds.c b/hw/pci/pci-hmp-cmds.c
index fb7591d6ab..8cfa5f9cd1 100644
--- a/hw/pci/pci-hmp-cmds.c
+++ b/hw/pci/pci-hmp-cmds.c
@@ -75,22 +75,24 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
 
     for (region = dev->regions; region; region = region->next) {
         uint64_t addr, size;
+        bool mapped;
 
         addr = region->value->address;
         size = region->value->size;
+        mapped = addr != -1;
 
         monitor_printf(mon, "      BAR%" PRId64 ": ", region->value->bar);
 
         if (!strcmp(region->value->type, "io")) {
             monitor_printf(mon, "I/O at 0x%04" PRIx64
                                 " [0x%04" PRIx64 "].\n",
-                           addr, addr + size - 1);
+                           addr, addr + size + (mapped ? -1 : 0));
         } else {
             monitor_printf(mon, "%d bit%s memory at 0x%08" PRIx64
                                " [0x%08" PRIx64 "].\n",
                            region->value->mem_type_64 ? 64 : 32,
                            region->value->prefetch ? " prefetchable" : "",
-                           addr, addr + size - 1);
+                           addr, addr + size + (mapped ? -1 : 0));
         }
     }
 
-- 
2.38.1



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

* Re: [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci'
  2023-01-03 16:48 [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci' Philippe Mathieu-Daudé
@ 2023-01-03 17:39 ` BALATON Zoltan
  2023-01-03 19:39   ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: BALATON Zoltan @ 2023-01-03 17:39 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Michael S. Tsirkin, Marcel Apfelbaum

[-- Attachment #1: Type: text/plain, Size: 3422 bytes --]

On Tue, 3 Jan 2023, Philippe Mathieu-Daudé wrote:
> When a BAR is not mapped, the displayed size is shifted by 1 byte:
>
>  (qemu) info pci
>    ...
>    Bus  0, device  11, function 0:
>      Ethernet controller: PCI device 1022:2000
>        PCI subsystem 0000:0000
>        IRQ 10, pin A
>        BAR0: I/O at 0xffffffffffffffff [0x001e].
>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001e].   <===
>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].   <===
>        id ""
>    Bus  0, device  18, function 0:
>      VGA controller: PCI device 1013:00b8
>        PCI subsystem 1af4:1100
>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].   <===
>        id ""
>
> Only substract this byte when the BAR is mapped to display
> the correct size:
>
>  (qemu) info pci
>    ...
>    Bus  0, device  11, function 0:
>      Ethernet controller: PCI device 1022:2000
>        PCI subsystem 0000:0000
>        IRQ 10, pin A
>        BAR0: I/O at 0xffffffffffffffff [0x001f].
>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001f].   <===
>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003ffff].   <===
>        id ""
>    Bus  0, device  18, function 0:
>      VGA controller: PCI device 1013:00b8
>        PCI subsystem 1af4:1100
>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000ffff].   <===
>        id ""
>
> Fixes: 0ac32c8375 ("PCI interrupt support - 'info pci' monitor command")
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/pci/pci-hmp-cmds.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/hw/pci/pci-hmp-cmds.c b/hw/pci/pci-hmp-cmds.c
> index fb7591d6ab..8cfa5f9cd1 100644
> --- a/hw/pci/pci-hmp-cmds.c
> +++ b/hw/pci/pci-hmp-cmds.c
> @@ -75,22 +75,24 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
>
>     for (region = dev->regions; region; region = region->next) {
>         uint64_t addr, size;
> +        bool mapped;
>
>         addr = region->value->address;
>         size = region->value->size;

As size is not used for anything else, you could adjust the value here 
once either as

size = region->value->size - (addr != -1 ? 1 : 0);

or in an if then you don't need the bool and tweak the value when 
printing. This looks simpler to me.

Regards,
BALATON Zoltan

> +        mapped = addr != -1;
>
>         monitor_printf(mon, "      BAR%" PRId64 ": ", region->value->bar);
>
>         if (!strcmp(region->value->type, "io")) {
>             monitor_printf(mon, "I/O at 0x%04" PRIx64
>                                 " [0x%04" PRIx64 "].\n",
> -                           addr, addr + size - 1);
> +                           addr, addr + size + (mapped ? -1 : 0));
>         } else {
>             monitor_printf(mon, "%d bit%s memory at 0x%08" PRIx64
>                                " [0x%08" PRIx64 "].\n",
>                            region->value->mem_type_64 ? 64 : 32,
>                            region->value->prefetch ? " prefetchable" : "",
> -                           addr, addr + size - 1);
> +                           addr, addr + size + (mapped ? -1 : 0));
>         }
>     }
>
>

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

* Re: [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci'
  2023-01-03 17:39 ` BALATON Zoltan
@ 2023-01-03 19:39   ` Philippe Mathieu-Daudé
  2023-01-03 19:45     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-03 19:39 UTC (permalink / raw)
  To: BALATON Zoltan; +Cc: qemu-devel, Michael S. Tsirkin, Marcel Apfelbaum

On 3/1/23 18:39, BALATON Zoltan wrote:
> On Tue, 3 Jan 2023, Philippe Mathieu-Daudé wrote:
>> When a BAR is not mapped, the displayed size is shifted by 1 byte:
>>
>>  (qemu) info pci
>>    ...
>>    Bus  0, device  11, function 0:
>>      Ethernet controller: PCI device 1022:2000
>>        PCI subsystem 0000:0000
>>        IRQ 10, pin A
>>        BAR0: I/O at 0xffffffffffffffff [0x001e].
>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001e].   <===
>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].   <===
>>        id ""
>>    Bus  0, device  18, function 0:
>>      VGA controller: PCI device 1013:00b8
>>        PCI subsystem 1af4:1100
>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].   <===
>>        id ""
>>
>> Only substract this byte when the BAR is mapped to display
>> the correct size:
>>
>>  (qemu) info pci
>>    ...
>>    Bus  0, device  11, function 0:
>>      Ethernet controller: PCI device 1022:2000
>>        PCI subsystem 0000:0000
>>        IRQ 10, pin A
>>        BAR0: I/O at 0xffffffffffffffff [0x001f].
>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001f].   <===
>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003ffff].   <===
>>        id ""
>>    Bus  0, device  18, function 0:
>>      VGA controller: PCI device 1013:00b8
>>        PCI subsystem 1af4:1100
>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000ffff].   <===
>>        id ""
>>
>> Fixes: 0ac32c8375 ("PCI interrupt support - 'info pci' monitor command")
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> hw/pci/pci-hmp-cmds.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/pci/pci-hmp-cmds.c b/hw/pci/pci-hmp-cmds.c
>> index fb7591d6ab..8cfa5f9cd1 100644
>> --- a/hw/pci/pci-hmp-cmds.c
>> +++ b/hw/pci/pci-hmp-cmds.c
>> @@ -75,22 +75,24 @@ static void hmp_info_pci_device(Monitor *mon, 
>> const PciDeviceInfo *dev)
>>
>>     for (region = dev->regions; region; region = region->next) {
>>         uint64_t addr, size;
>> +        bool mapped;
>>
>>         addr = region->value->address;
>>         size = region->value->size;
> 
> As size is not used for anything else, you could adjust the value here 
> once either as
> 
> size = region->value->size - (addr != -1 ? 1 : 0);
> 
> or in an if then you don't need the bool and tweak the value when 
> printing. This looks simpler to me.

Good idea, thanks!


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

* Re: [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci'
  2023-01-03 19:39   ` Philippe Mathieu-Daudé
@ 2023-01-03 19:45     ` Philippe Mathieu-Daudé
  2023-01-04  7:29       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-03 19:45 UTC (permalink / raw)
  To: BALATON Zoltan; +Cc: qemu-devel, Michael S. Tsirkin, Marcel Apfelbaum

On 3/1/23 20:39, Philippe Mathieu-Daudé wrote:
> On 3/1/23 18:39, BALATON Zoltan wrote:
>> On Tue, 3 Jan 2023, Philippe Mathieu-Daudé wrote:
>>> When a BAR is not mapped, the displayed size is shifted by 1 byte:
>>>
>>>  (qemu) info pci
>>>    ...
>>>    Bus  0, device  11, function 0:
>>>      Ethernet controller: PCI device 1022:2000
>>>        PCI subsystem 0000:0000
>>>        IRQ 10, pin A
>>>        BAR0: I/O at 0xffffffffffffffff [0x001e].
>>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001e].   <===
>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].   <===
>>>        id ""
>>>    Bus  0, device  18, function 0:
>>>      VGA controller: PCI device 1013:00b8
>>>        PCI subsystem 1af4:1100
>>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].   <===
>>>        id ""
>>>
>>> Only substract this byte when the BAR is mapped to display
>>> the correct size:
>>>
>>>  (qemu) info pci
>>>    ...
>>>    Bus  0, device  11, function 0:
>>>      Ethernet controller: PCI device 1022:2000
>>>        PCI subsystem 0000:0000
>>>        IRQ 10, pin A
>>>        BAR0: I/O at 0xffffffffffffffff [0x001f].
>>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001f].   <===
>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003ffff].   <===
>>>        id ""
>>>    Bus  0, device  18, function 0:
>>>      VGA controller: PCI device 1013:00b8
>>>        PCI subsystem 1af4:1100
>>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].

Hmm actually here 0x11ffffff isn't the size but the higher address,

>>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000ffff].   <===

while here this is the size. Confusing. Wouldn't it be simpler to only
display the size?

>>>        id ""
>>>
>>> Fixes: 0ac32c8375 ("PCI interrupt support - 'info pci' monitor command")
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>> hw/pci/pci-hmp-cmds.c | 6 ++++--
>>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/hw/pci/pci-hmp-cmds.c b/hw/pci/pci-hmp-cmds.c
>>> index fb7591d6ab..8cfa5f9cd1 100644
>>> --- a/hw/pci/pci-hmp-cmds.c
>>> +++ b/hw/pci/pci-hmp-cmds.c
>>> @@ -75,22 +75,24 @@ static void hmp_info_pci_device(Monitor *mon, 
>>> const PciDeviceInfo *dev)
>>>
>>>     for (region = dev->regions; region; region = region->next) {
>>>         uint64_t addr, size;
>>> +        bool mapped;
>>>
>>>         addr = region->value->address;
>>>         size = region->value->size;
>>
>> As size is not used for anything else, you could adjust the value here 
>> once either as
>>
>> size = region->value->size - (addr != -1 ? 1 : 0);
>>
>> or in an if then you don't need the bool and tweak the value when 
>> printing. This looks simpler to me.
> 
> Good idea, thanks!



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

* Re: [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci'
  2023-01-03 19:45     ` Philippe Mathieu-Daudé
@ 2023-01-04  7:29       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-04  7:29 UTC (permalink / raw)
  To: BALATON Zoltan; +Cc: qemu-devel, Michael S. Tsirkin, Marcel Apfelbaum

On 3/1/23 20:45, Philippe Mathieu-Daudé wrote:
> On 3/1/23 20:39, Philippe Mathieu-Daudé wrote:
>> On 3/1/23 18:39, BALATON Zoltan wrote:
>>> On Tue, 3 Jan 2023, Philippe Mathieu-Daudé wrote:
>>>> When a BAR is not mapped, the displayed size is shifted by 1 byte:
>>>>
>>>>  (qemu) info pci
>>>>    ...
>>>>    Bus  0, device  11, function 0:
>>>>      Ethernet controller: PCI device 1022:2000
>>>>        PCI subsystem 0000:0000
>>>>        IRQ 10, pin A
>>>>        BAR0: I/O at 0xffffffffffffffff [0x001e].
>>>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001e].   <===
>>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].   <===
>>>>        id ""
>>>>    Bus  0, device  18, function 0:
>>>>      VGA controller: PCI device 1013:00b8
>>>>        PCI subsystem 1af4:1100
>>>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
>>>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].   <===
>>>>        id ""
>>>>
>>>> Only substract this byte when the BAR is mapped to display
>>>> the correct size:
>>>>
>>>>  (qemu) info pci
>>>>    ...
>>>>    Bus  0, device  11, function 0:
>>>>      Ethernet controller: PCI device 1022:2000
>>>>        PCI subsystem 0000:0000
>>>>        IRQ 10, pin A
>>>>        BAR0: I/O at 0xffffffffffffffff [0x001f].
>>>>        BAR1: 32 bit memory at 0xffffffffffffffff [0x0000001f].   <===
>>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0003ffff].   <===
>>>>        id ""
>>>>    Bus  0, device  18, function 0:
>>>>      VGA controller: PCI device 1013:00b8
>>>>        PCI subsystem 1af4:1100
>>>>        BAR0: 32 bit prefetchable memory at 0x10000000 [0x11ffffff].
> 
> Hmm actually here 0x11ffffff isn't the size but the higher address,
> 
>>>>        BAR1: 32 bit memory at 0x12050000 [0x12050fff].
>>>>        BAR6: 32 bit memory at 0xffffffffffffffff [0x0000ffff].   <===
> 
> while here this is the size. Confusing. Wouldn't it be simpler to only
> display the size?
Or range and size:

   Bus  0, device  18, function 0:
     VGA controller: PCI device 1013:00b8
       PCI subsystem 1af4:1100
       BAR0: 32 bit prefetchable memory at 0x10000000-0x12000000 
[0x02000000]
       BAR1: 32 bit memory at 0x12050000-0x12051000 [0x00001000]
       BAR6: 32 bit memory at 0xffffffffffffffff-0xffffffffffffffff 
[0x00010000]




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

end of thread, other threads:[~2023-01-04  7:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-03 16:48 [PATCH] hw/pci: Display correct size for unmapped BARs in HMP 'info pci' Philippe Mathieu-Daudé
2023-01-03 17:39 ` BALATON Zoltan
2023-01-03 19:39   ` Philippe Mathieu-Daudé
2023-01-03 19:45     ` Philippe Mathieu-Daudé
2023-01-04  7:29       ` Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).