qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>
Cc: "Michael S . Tsirkin" <mst@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Thomas Huth" <thuth@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Eric Blake" <eblake@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Eduardo Habkost" <eduardo@habkost.net>
Subject: Re: [PATCH][RESEND v5 3/3] Add a Hyper-V Dynamic Memory Protocol driver (hv-balloon)
Date: Thu, 22 Jun 2023 14:06:27 +0200	[thread overview]
Message-ID: <10a3981c-4716-e358-4d06-a672d8d7a874@redhat.com> (raw)
In-Reply-To: <9da309c5-d39e-8d42-d444-b021d6379c14@maciej.szmigiero.name>

On 22.06.23 13:17, Maciej S. Szmigiero wrote:
> On 22.06.2023 13:15, David Hildenbrand wrote:
>> On 22.06.23 13:12, Maciej S. Szmigiero wrote:
>>> On 22.06.2023 13:01, David Hildenbrand wrote:
>>>> [...]
>>>>
>>>>>>>> We'd use a memory region container as device memory region (like [1]) and would have to handle the !memdev case (I can help with that). > Into that, you can map the RAM memory region on demand (and eventually even using multiple slots like [1]).
>>>>>>>>
>>>>>>>> (2) Use a single virtual DIMM and (un)plug that on demand. Let the machine code handle (un)plugging of the device.
>>>>>>>>
>>>>>>>>
>>>>>>>> (1) feels cleanest to me, although it will require a bit more work.
>>>>>>>>
>>>>>>>
>>>>>>> I also think approach (1) makes more sense as it avoids memslot metadata
>>>>>>> overhead for not-yet-hot-added parts of the memory backing device.
>>>>>>>
>>>>>>> Not sure what you mean that the !memdev case would be problematic in this
>>>>>>> case - it is working in the current driver shape so why would adding
>>>>>>> potential memory subregions (used in the memdev case) change that?
>>>>>>
>>>>>> I'm thinking about the case where you have a hv-balloon device without a memdev.
>>>>>>
>>>>>> Without -m X,maxmem=y we don't currently expect to have memory devices around
>>>>>> (and especially them getting (un)plugged. But why should we "force" to set the
>>>>>> "maxmem" option
>>>>>
>>>>> I guess it's only a small change to QEMU to allow having hv-balloon
>>>>> device (without a memdev) even in the case where there's no "maxmem"
>>>>> option given on the QEMU command line.
>>>>>
>>>>>>
>>>>>> I hope I'll find some time soonish to prototype what I have in mind, to see
>>>>>> if it could be made working.
>>>>>>
>>>>>
>>>>> Okay, so I'll wait for your prototype before commencing further work on
>>>>> the next version of this driver.
>>>>
>>>> About to have something simplistic running -- I think. Want to test with a Linux VM, but I don't seem to get it working (also without my changes).
>>>>
>>>>
>>>> #!/bin/bash
>>>>
>>>> build/qemu-system-x86_64 \
>>>>        --enable-kvm \
>>>>        -m 4G,maxmem=36G \
>>>>        -cpu host,hv-syndbg=on,hv-synic,hv-relaxed,hv-vpindex \
>>>>        -smp 16 \
>>>>        -nographic \
>>>>        -nodefaults \
>>>>        -net nic -net user \
>>>>        -chardev stdio,nosignal,id=serial \
>>>>        -hda Fedora-Cloud-Base-37-1.7.x86_64.qcow2 \
>>>>        -cdrom /home/dhildenb/git/cloud-init/cloud-init.iso \
>>>>        -device isa-serial,chardev=serial \
>>>>        -chardev socket,id=monitor,path=/var/tmp/mon_src,server,nowait \
>>>>        -mon chardev=monitor,mode=readline \
>>>>        -device vmbus-bridge \
>>>>        -object memory-backend-ram,size=2G,id=mem0 \
>>>>        -device hv-balloon,id=hv1,memdev=mem0
>>>>
>>>>
>>>>
>>>> [root@vm-0 ~]# uname -r
>>>> 6.3.5-100.fc37.x86_64
>>>> [root@vm-0 ~]# modprobe hv_balloon
>>>> modprobe: ERROR: could not insert 'hv_balloon': No such device
>>>>
>>>>
>>>> Any magic flag I am missing? Or is there something preventing this to work with Linux VMs?
>>>>
>>>
>>> Haven't tested the driver with Linux guests in a long time (as it is
>>> targeting Windows), but I think you need to disable KVM PV interface for
>>> the Hyper-V one to be detected by Linux.
>>>
>>> Something like adding "kvm=off" to "-cpu" and seeing in the dmesg whether
>>> the detected hypervisor is now Hyper-V.
>>>
>>> Also, you need to disable S4 in the guest for hot-add capability to work
>>> (I'm adding "-global ICH9-LPC.disable_s4=1" with q35 machine for this).
>>>
>>> Would also suggest adding "--trace 'hv_balloon_*' --trace 'memory_device_*'"
>>> to QEMU command line to see what's happening.
>>
>> VM is not happy:
>>
>> [    1.908595] BUG: kernel NULL pointer dereference, address: 0000000000000007
>> [    1.908837] #PF: supervisor read access in kernel mode
>> [    1.908837] #PF: error_code(0x0000) - not-present page
>> [    1.908837] PGD 0 P4D 0
>> [    1.908837] Oops: 0000 [#1] PREEMPT SMP NOPTI
>> [    1.908837] CPU: 13 PID: 492 Comm: (udev-worker) Not tainted 6.3.5-100.fc37.x86_64 #1
>> [    1.908837] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-p4
>> [    1.908837] RIP: 0010:acpi_ns_lookup+0x8f/0x4c0
>> [    1.908837] Code: 8b 3d f5 eb 1c 03 83 05 52 ec 1c 03 01 48 85 ff 0f 84 51 03 00 00 44 89 c3 4c 89 cb
>> [    1.908837] RSP: 0018:ffff95b680ad7950 EFLAGS: 00010286
>> [    1.908837] RAX: ffff95b680ad79e0 RBX: 0000000000000002 RCX: 0000000000000003
>> [    1.908837] RDX: 0000000000000000 RSI: ffff8a0283a3c558 RDI: ffffffffa4b376e0
>> [    1.908837] RBP: 0000000000000000 R08: 0000000000000002 R09: 0000000000000000
>> [    1.908837] R10: ffff8a02811034ec R11: 0000000000000000 R12: ffffffffffffffff
>> [    1.908837] R13: ffff8a02811034e8 R14: ffff8a02811034e8 R15: 0000000000000000
>> [    1.908837] FS:  00007f3bb2e7d0c0(0000) GS:ffff8a02bbd40000(0000) knlGS:0000000000000000
>> [    1.908837] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [    1.908837] CR2: 0000000000000007 CR3: 0000000100a58002 CR4: 0000000000770ee0
>> [    1.908837] PKRU: 55555554
>> [    1.908837] Call Trace:
>> [    1.908837]  <TASK>
>> [    1.908837]  ? __die+0x23/0x70
>> [    1.908837]  ? page_fault_oops+0x171/0x4e0
>> [    1.908837]  ? prepare_alloc_pages.constprop.0+0xf6/0x1a0
>> [    1.908837]  ? exc_page_fault+0x74/0x170
>> [    1.908837]  ? asm_exc_page_fault+0x26/0x30
>> [    1.908837]  ? acpi_ns_lookup+0x8f/0x4c0
>> [    1.908837]  acpi_ns_get_node_unlocked+0xdd/0x110
>> [    1.908837]  ? down_timeout+0x3e/0x60
>> [    1.908837]  ? acpi_ns_get_node+0x3e/0x60
>> [    1.908837]  acpi_ns_get_node+0x3e/0x60
>> [    1.908837]  acpi_ns_evaluate+0x1cb/0x2d0
>> [    1.908837]  acpi_ut_evaluate_object+0x68/0x1c0
>> [    1.908837]  acpi_rs_get_method_data+0x37/0x80
>> [    1.908837]  ? __pfx_vmbus_walk_resources+0x10/0x10 [hv_vmbus]
>> [    1.908837]  acpi_walk_resources+0x91/0xe0
>> [    1.908837]  vmbus_acpi_add+0x87/0x170 [hv_vmbus]
>> [    1.908837]  acpi_device_probe+0x47/0x160
>> [    1.908837]  really_probe+0x19f/0x400
>> [    1.908837]  ? __pfx___driver_attach+0x10/0x10
>> [    1.908837]  __driver_probe_device+0x78/0x160
>> [    1.908837]  driver_probe_device+0x1f/0x90
>> [    1.908837]  __driver_attach+0xd2/0x1c0
>> [    1.908837]  bus_for_each_dev+0x85/0xd0
>> [    1.908837]  bus_add_driver+0x116/0x220
>> [    1.908837]  driver_register+0x59/0x100
>> [    1.908837]  ? __pfx_init_module+0x10/0x10 [hv_vmbus]
>> [    1.908837]  hv_acpi_init+0x39/0xff0 [hv_vmbus]
>> [    1.908837]  ? __pfx_init_module+0x10/0x10 [hv_vmbus]
>> [    1.908837]  do_one_initcall+0x5a/0x240
>> [    1.908837]  do_init_module+0x4a/0x210
>> [    1.908837]  __do_sys_init_module+0x17f/0x1b0
>> [    1.908837]  do_syscall_64+0x5c/0x90
>> [    1.908837]  ? handle_mm_fault+0x11e/0x310
>> [    1.908837]  ? do_user_addr_fault+0x1e0/0x720
>> [    1.908837]  ? exc_page_fault+0x74/0x170
>> [    1.908837]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
>>
> 
> I guess *few* people run Linux with QEMU Hyper-V interfaces
> implementation..
>    
>> Maybe I'll have to install a Windows guest :/
>>
> I think that makes more sense, since we're targeting Windows anyway.
> 

Having installed fairly recent Win10 and running with master+your 
patches, I still can't get it to work.

Windows is stuck booting (before the little circle starts turning).

Removing the hv-balloon device makes it work again (well, at least the 
circle spins again my windows installation now seems to be broken and I 
have to reinstall ... windows).

Do you have a working cmdline for Windows I can try?

-- 
Cheers,

David / dhildenb



  reply	other threads:[~2023-06-22 12:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-12 14:00 [PATCH][RESEND v5 0/3] Hyper-V Dynamic Memory Protocol driver (hv-balloon 🎈️) Maciej S. Szmigiero
2023-06-12 14:00 ` [PATCH][RESEND v5 1/3] error: define g_autoptr() cleanup function for the Error type Maciej S. Szmigiero
2023-06-12 14:00 ` [PATCH][RESEND v5 2/3] Add Hyper-V Dynamic Memory Protocol definitions Maciej S. Szmigiero
2023-06-12 14:00 ` [PATCH][RESEND v5 3/3] Add a Hyper-V Dynamic Memory Protocol driver (hv-balloon) Maciej S. Szmigiero
2023-06-12 17:42   ` David Hildenbrand
2023-06-13 17:57     ` Maciej S. Szmigiero
2023-06-19 15:58       ` David Hildenbrand
2023-06-20 20:13         ` Maciej S. Szmigiero
2023-06-21 10:32           ` David Hildenbrand
2023-06-21 18:17             ` Maciej S. Szmigiero
2023-06-22 11:01               ` David Hildenbrand
2023-06-22 11:12                 ` Maciej S. Szmigiero
2023-06-22 11:15                   ` David Hildenbrand
2023-06-22 11:17                     ` Maciej S. Szmigiero
2023-06-22 12:06                       ` David Hildenbrand [this message]
2023-06-22 12:14                         ` Maciej S. Szmigiero
2023-06-22 12:27                           ` Maciej S. Szmigiero
2023-06-22 12:52                           ` David Hildenbrand
2023-06-22 18:45                             ` Maciej S. Szmigiero
2023-06-23 12:23                               ` David Hildenbrand
2023-06-23 18:04                               ` Maciej S. Szmigiero

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=10a3981c-4716-e358-4d06-a672d8d7a874@redhat.com \
    --to=david@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=mail@maciej.szmigiero.name \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).