From patchwork Wed May 22 16:22:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shameerali Kolothum Thodi X-Patchwork-Id: 164849 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp1065404ili; Wed, 22 May 2019 09:25:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqyul/kHWvjAF+Tv446EDccWSOuTnNImogwMkD46Uo7TBDomfMUbE2WgfZdJxWRoAVMuIEup X-Received: by 2002:a17:906:b250:: with SMTP id ce16mr58578238ejb.99.1558542338768; Wed, 22 May 2019 09:25:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558542338; cv=none; d=google.com; s=arc-20160816; b=VKcznKvYqAeapIRkGkqgIZkC3sFS/tYpzcmPmcz4D3WAuqlIazjjYxzG666w4bBxQm oK033uHhOgwmHNk+gSTSdMAKykItiUCUeUUYX64lJV0u6YzgzZOD8mBJ1wmbnJhjAoGp Aum0yn6Mk1Zc76CiBWm3prhUV9xwQbTpMoHRP1UUWqYckDyTRCkQPbQjqzyjxBLPWDv7 SZYidFJ7ngz+5bXUTlKrvg5x1yXOcof04AZTELsW0Da56gFjm2BbZHYNKp8Eecd/vMB5 D7ZCFPxOlGpIeaX2EHxHvYLlXc2gnLLfrW1Q3GYes8eLSntvRUUGjK/TZzdv3JUTsGrs pzzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:mime-version:references :in-reply-to:message-id:date:to:from; bh=06gr7u84c/u5ao3PvbiO1JfDLihIWMzSANyB2KasOco=; b=pohGXfBRi6Lz8QqZLynYGsrmzDCTHuTTJ5ht4FUagMBpgK7RdVxjHZQ3V+8RDrGguw xa2LidSIOY5WeVIbc+s4ztSTod2OMGO3ON8utdwYx69hJgieasf/z+zaNzfeV75pDe6J d53s5unl4IsXjHv8Jm6z30di0K337mEy94tDCejWO8XqRoE6nVY+nL4BLyd2Q8K+tw8m 3ElY0Ae+fy3My+SbeTDVz0en052RHuP7WbhJLJZYwo9Qhz7pK01gdpAyNu7aE9TetBHW VLGbQpExZmfr1cPG6KgjaBe/ipbXmnbW30NfGPT8kz1KwsjdHvacFlNn1Z6aQ6/74g1G 3EGQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id b29si1763666edb.31.2019.05.22.09.25.38 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 22 May 2019 09:25:38 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([127.0.0.1]:47529 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTU3d-0006hu-JQ for patch@linaro.org; Wed, 22 May 2019 12:25:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTU3B-0006fb-Mq for qemu-devel@nongnu.org; Wed, 22 May 2019 12:25:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTU3A-0002CU-IK for qemu-devel@nongnu.org; Wed, 22 May 2019 12:25:09 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:2217 helo=huawei.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hTU37-00020r-C1; Wed, 22 May 2019 12:25:05 -0400 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id E75E063B0C1F6DEEE152; Thu, 23 May 2019 00:25:02 +0800 (CST) Received: from S00345302A-PC.china.huawei.com (10.202.227.237) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.439.0; Thu, 23 May 2019 00:24:10 +0800 From: Shameer Kolothum To: , , , Date: Wed, 22 May 2019 17:22:48 +0100 Message-ID: <20190522162252.28568-5-shameerali.kolothum.thodi@huawei.com> X-Mailer: git-send-email 2.12.0.windows.1 In-Reply-To: <20190522162252.28568-1-shameerali.kolothum.thodi@huawei.com> References: <20190522162252.28568-1-shameerali.kolothum.thodi@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.202.227.237] X-CFilter-Loop: Reflected X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 45.249.212.190 Subject: [Qemu-devel] [PATCH v5 4/8] hw/arm/virt: Add memory hotplug framework X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, sameo@linux.intel.com, ard.biesheuvel@linaro.org, linuxarm@huawei.com, xuwei5@hisilicon.com, shannon.zhaosl@gmail.com, sebastien.boeuf@intel.com, lersek@redhat.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger This patch adds the memory hot-plug/hot-unplug infrastructure in machvirt. The device memory is not yet exposed to the Guest either through DT or ACPI and hence both cold/hot plug of memory is explicitly disabled for now. Signed-off-by: Eric Auger Signed-off-by: Kwangwoo Lee Signed-off-by: Shameer Kolothum --- hw/arm/Kconfig | 2 ++ hw/arm/virt.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) -- 2.17.1 diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index af8cffde9c..6ef22439b5 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -19,6 +19,8 @@ config ARM_VIRT select PLATFORM_BUS select SMBIOS select VIRTIO_MMIO + select MEM_DEVICE + select DIMM config CHEETAH bool diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 5331ab71e2..3df8c389ff 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -62,6 +62,8 @@ #include "hw/arm/smmuv3.h" #include "hw/acpi/acpi.h" #include "target/arm/internals.h" +#include "hw/mem/pc-dimm.h" +#include "hw/mem/nvdimm.h" #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ @@ -1862,6 +1864,40 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms) return ms->possible_cpus; } +static void virt_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, + Error **errp) +{ + + /* + * The device memory is not yet exposed to the Guest either through + * DT or ACPI and hence both cold/hot plug of memory is explicitly + * disabled for now. + */ + if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { + error_setg(errp, "memory cold/hot plug is not yet supported"); + return; + } + + pc_dimm_pre_plug(PC_DIMM(dev), MACHINE(hotplug_dev), NULL, errp); +} + +static void virt_memory_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev); + + pc_dimm_plug(PC_DIMM(dev), MACHINE(vms), NULL); + +} + +static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { + virt_memory_pre_plug(hotplug_dev, dev, errp); + } +} + static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1873,12 +1909,23 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev, SYS_BUS_DEVICE(dev)); } } + if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { + virt_memory_plug(hotplug_dev, dev, errp); + } +} + +static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "device unplug request for unsupported device" + " type: %s", object_get_typename(OBJECT(dev))); } static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine, DeviceState *dev) { - if (object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE)) { + if (object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE) || + (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM))) { return HOTPLUG_HANDLER(machine); } @@ -1942,7 +1989,9 @@ static void virt_machine_class_init(ObjectClass *oc, void *data) mc->kvm_type = virt_kvm_type; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler = virt_machine_get_hotplug_handler; + hc->pre_plug = virt_machine_device_pre_plug_cb; hc->plug = virt_machine_device_plug_cb; + hc->unplug_request = virt_machine_device_unplug_request_cb; } static void virt_instance_init(Object *obj)