From patchwork Wed May 6 09:49:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 11530893 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 23447139F for ; Wed, 6 May 2020 09:50:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0CF8120714 for ; Wed, 6 May 2020 09:50:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="CA5ccXrV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729081AbgEFJuL (ORCPT ); Wed, 6 May 2020 05:50:11 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:40793 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728640AbgEFJuK (ORCPT ); Wed, 6 May 2020 05:50:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1588758609; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=uwx25ggXFYcraw8wlJgMYjAcAt7rECdGCBo2VgZbClU=; b=CA5ccXrVNkYoY0Bp4iVBcpvXyLejplaps907+56/3EkzKjl0aINm19SJVdF4iOTgx2vveh IEmwcUZR9f5fk1rK5Yc7HCb/ogu22W2D7GAm8AV/xcjsziTvS/vq7hTt1LbZ57hbEbnv9C 7vlTI70+jozI8IzeI+LdCf1oiZS8WHQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-256-GBwgf7kXNXKT49c3ZENCcw-1; Wed, 06 May 2020 05:50:04 -0400 X-MC-Unique: GBwgf7kXNXKT49c3ZENCcw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 89710835B44; Wed, 6 May 2020 09:50:01 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-17.ams2.redhat.com [10.36.113.17]) by smtp.corp.redhat.com (Postfix) with ESMTP id 27BF65C1BD; Wed, 6 May 2020 09:49:48 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, qemu-s390x@nongnu.org, Richard Henderson , Paolo Bonzini , "Dr . David Alan Gilbert" , Eduardo Habkost , "Michael S . Tsirkin" , David Hildenbrand , Alex Williamson , Christian Borntraeger , Cornelia Huck , Eric Blake , Eric Farman , Hailiang Zhang , Halil Pasic , Igor Mammedov , Janosch Frank , Juan Quintela , Keith Busch , Marcel Apfelbaum , Markus Armbruster , Peter Maydell , Pierre Morel , Tony Krowiak Subject: [PATCH v1 00/17] virtio-mem: Paravirtualized memory hot(un)plug Date: Wed, 6 May 2020 11:49:31 +0200 Message-Id: <20200506094948.76388-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This is the very basic, initial version of virtio-mem. More info on virtio-mem in general can be found in the Linux kernel driver posting [1] and in patch #10. "The basic idea of virtio-mem is to provide a flexible, cross-architecture memory hot(un)plug solution that avoids many limitations imposed by existing technologies, architectures, and interfaces." There are a lot of addons in the works (esp. protection of unplugged memory, better hugepage support (esp. when reading unplugged memory), resizeable memory backends, migration optimizations, support for more architectures, ...), this is the very basic version to get the ball rolling. The first 8 patches make sure we don't have any sudden surprises e.g., if somebody tries to pin all memory in RAM blocks, resulting in a higher memory consumption than desired. The remaining patches add basic virtio-mem along with support for x86-64. [1] https://lkml.kernel.org/r/20200311171422.10484-1-david@redhat.com David Hildenbrand (17): exec: Introduce ram_block_discard_set_(unreliable|required)() vfio: Convert to ram_block_discard_set_broken() accel/kvm: Convert to ram_block_discard_set_broken() s390x/pv: Convert to ram_block_discard_set_broken() virtio-balloon: Rip out qemu_balloon_inhibit() target/i386: sev: Use ram_block_discard_set_broken() migration/rdma: Use ram_block_discard_set_broken() migration/colo: Use ram_block_discard_set_broken() linux-headers: update to contain virtio-mem virtio-mem: Paravirtualized memory hot(un)plug virtio-pci: Proxy for virtio-mem MAINTAINERS: Add myself as virtio-mem maintainer hmp: Handle virtio-mem when printing memory device info numa: Handle virtio-mem in NUMA stats pc: Support for virtio-mem-pci virtio-mem: Allow notifiers for size changes virtio-pci: Send qapi events when the virtio-mem size changes MAINTAINERS | 8 + accel/kvm/kvm-all.c | 3 +- balloon.c | 17 - exec.c | 48 ++ hw/core/numa.c | 6 + hw/i386/Kconfig | 1 + hw/i386/pc.c | 49 +- hw/s390x/s390-virtio-ccw.c | 22 +- hw/vfio/ap.c | 10 +- hw/vfio/ccw.c | 11 +- hw/vfio/common.c | 53 +- hw/vfio/pci.c | 6 +- hw/virtio/Kconfig | 11 + hw/virtio/Makefile.objs | 2 + hw/virtio/virtio-balloon.c | 12 +- hw/virtio/virtio-mem-pci.c | 159 ++++ hw/virtio/virtio-mem-pci.h | 34 + hw/virtio/virtio-mem.c | 781 ++++++++++++++++++++ include/exec/memory.h | 41 + include/hw/pci/pci.h | 1 + include/hw/vfio/vfio-common.h | 4 +- include/hw/virtio/virtio-mem.h | 85 +++ include/migration/colo.h | 2 +- include/standard-headers/linux/virtio_ids.h | 1 + include/standard-headers/linux/virtio_mem.h | 208 ++++++ include/sysemu/balloon.h | 2 - migration/migration.c | 8 +- migration/postcopy-ram.c | 23 - migration/rdma.c | 18 +- migration/savevm.c | 11 +- monitor/hmp-cmds.c | 16 + monitor/monitor.c | 1 + qapi/misc.json | 64 +- target/i386/sev.c | 1 + 34 files changed, 1598 insertions(+), 121 deletions(-) create mode 100644 hw/virtio/virtio-mem-pci.c create mode 100644 hw/virtio/virtio-mem-pci.h create mode 100644 hw/virtio/virtio-mem.c create mode 100644 include/hw/virtio/virtio-mem.h create mode 100644 include/standard-headers/linux/virtio_mem.h