[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH qemu v2] hmp: Print if memory section is registe
From: |
Alexey Kardashevskiy |
Subject: |
Re: [Qemu-devel] [PATCH qemu v2] hmp: Print if memory section is registered with an accelerator |
Date: |
Mon, 11 Feb 2019 15:56:19 +1100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 |
On 09/02/2019 04:26, Paolo Bonzini wrote:
> On 07/02/19 12:49, Dr. David Alan Gilbert wrote:
>> //#define DEBUG_UNASSIGNED
>> @@ -2924,6 +2926,8 @@ struct FlatViewInfo {
>> int counter;
>> bool dispatch_tree;
>> bool owner;
>> + AccelClass *ac;
>> + const char *ac_name;
>> };
>>
>> static void mtree_print_flatview(gpointer key, gpointer value,
>> @@ -2939,6 +2943,7 @@ static void mtree_print_flatview(gpointer key,
>> gpointer value,
>> int n = view->nr;
>> int i;
>> AddressSpace *as;
>> + bool system_as = false;
>>
>> p(f, "FlatView #%d\n", fvi->counter);
>> ++fvi->counter;
>> @@ -2950,6 +2955,9 @@ static void mtree_print_flatview(gpointer key,
>> gpointer value,
>> p(f, ", alias %s", memory_region_name(as->root->alias));
>> }
>> p(f, "\n");
>> + if (as == &address_space_memory) {
>> + system_as = true;
>> + }
>> }
>>
>> p(f, " Root memory region: %s\n",
>> @@ -2985,6 +2993,13 @@ static void mtree_print_flatview(gpointer key,
>> gpointer value,
>> if (fvi->owner) {
>> mtree_print_mr_owner(p, f, mr);
>> }
>> +
>> + if (system_as && fvi->ac &&
>> + fvi->ac->has_memory(current_machine,
>> + int128_get64(range->addr.start),
>> + MR_SIZE(range->addr.size) + 1)) {
>> + p(f, " %s", fvi->ac_name);
>
> I don't understand this. This doesn't check that the memory range
> actually matches the memory registered with the accelerator, only that
> there is something in that range.
It is checking that a flat range (i.e. what actually works) has a
corresponding KVM slot:
https://git.qemu.org/?p=qemu.git;a=blob;f=accel/kvm/kvm-all.c;h=4e1de942ce554c734ac2673030031c228a752ac9;hb=HEAD#l201
> Why isn't it enough to use "info
> mtree" and look at the KVM address space?
There is no such thing in my QEMU, did you mean "KVM-SMRAM" (which is
missing on spapr)? I am not sure I understand its purpose for the task -
it prints all same ranges on my x86 laptop, not just ones which we told
KVM about.
My task is that if let's say "0000:00:1a.0 BAR 0 mmaps[0]" is split into
several sections because MSIX happens to be in a middle of that BAR and
it is not system page size aligned, then it is going to be several
ranges with no clear indication whether or not these were registered as
KVM slots. A memory chunk can be "ram" and not a KVM slot if it is 4K on
PPC with 64K system pages, for example.
FlatView #0
AS "memory", root: system
AS "cpu-memory-0", root: system
AS "cpu-memory-1", root: system
AS "cpu-memory-2", root: system
AS "cpu-memory-3", root: system
AS "piix3-ide", root: bus master container
AS "virtio-net-pci", root: bus master container
AS "vfio-pci", root: bus master container
Root memory region: system
0000000000000000-00000000000bffff (prio 0, ram): pc.ram kvm
00000000000c0000-00000000000c0fff (prio 0, rom): pc.ram
@00000000000c0000 kvm
00000000000c1000-00000000000c3fff (prio 0, ram): pc.ram
@00000000000c1000 kvm
00000000000c4000-00000000000e7fff (prio 0, rom): pc.ram
@00000000000c4000 kvm
00000000000e8000-00000000000effff (prio 0, ram): pc.ram
@00000000000e8000 kvm
00000000000f0000-00000000000fffff (prio 0, rom): pc.ram
@00000000000f0000 kvm
0000000000100000-00000000bfffffff (prio 0, ram): pc.ram
@0000000000100000 kvm
00000000febc0000-00000000febc0fff (prio 0, ramd): 0000:00:1a.0 BAR 0
mmaps[0] kvm
00000000febc1000-00000000febc102f (prio 0, i/o): msix-table
00000000febc1800-00000000febc1807 (prio 0, i/o): msix-pba
00000000febfc000-00000000febfcfff (prio 0, i/o): virtio-pci-common
00000000febfd000-00000000febfdfff (prio 0, i/o): virtio-pci-isr
00000000febfe000-00000000febfefff (prio 0, i/o): virtio-pci-device
00000000febff000-00000000febfffff (prio 0, i/o): virtio-pci-notify
00000000fec00000-00000000fec00fff (prio 0, i/o): kvm-ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): kvm-apic-msi
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios kvm
0000000100000000-000000013fffffff (prio 0, ram): pc.ram
@00000000c0000000 kvm
FlatView #3
AS "KVM-SMRAM", root: mem-container-smram
Root memory region: mem-container-smram
0000000000000000-00000000000bffff (prio 0, ram): pc.ram
00000000000c0000-00000000000c0fff (prio 0, rom): pc.ram @00000000000c0000
00000000000c1000-00000000000c3fff (prio 0, ram): pc.ram @00000000000c1000
00000000000c4000-00000000000e7fff (prio 0, rom): pc.ram @00000000000c4000
00000000000e8000-00000000000effff (prio 0, ram): pc.ram @00000000000e8000
00000000000f0000-00000000000fffff (prio 0, rom): pc.ram @00000000000f0000
0000000000100000-00000000bfffffff (prio 0, ram): pc.ram @0000000000100000
00000000febc0000-00000000febc0fff (prio 0, ramd): 0000:00:1a.0 BAR 0
mmaps[0]
00000000febc1000-00000000febc102f (prio 0, i/o): msix-table
00000000febc1800-00000000febc1807 (prio 0, i/o): msix-pba
00000000febfc000-00000000febfcfff (prio 0, i/o): virtio-pci-common
00000000febfd000-00000000febfdfff (prio 0, i/o): virtio-pci-isr
00000000febfe000-00000000febfefff (prio 0, i/o): virtio-pci-device
00000000febff000-00000000febfffff (prio 0, i/o): virtio-pci-notify
00000000fec00000-00000000fec00fff (prio 0, i/o): kvm-ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): kvm-apic-msi
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios
0000000100000000-000000013fffffff (prio 0, ram): pc.ram @00000000c0000000
> Perhaps you could add instead an argument to "info mtree" that prints
> only the AddressSpace with a given name?
Nah, this is not what it is about.
--
Alexey