Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1666462pxj; Wed, 19 May 2021 11:01:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzGCIGDN8P+Lt6yyDqfKGKKN4qiWLTDXhr77stI1KMYt/wCxahf3DQTJQIVAR1wroiG2XAx X-Received: by 2002:a05:6e02:1ba2:: with SMTP id n2mr310456ili.60.1621447261479; Wed, 19 May 2021 11:01:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621447261; cv=none; d=google.com; s=arc-20160816; b=d4nFfVQvh2jbS79Q1z5GFM8GALy+z2KeF6X98FB4EMaYDQYfgmIHsaFPx2WXUg7EWj nMZQOxHmKHx55bpeVpGHvOvtU37g2g1zQd9oslz1yVrN1EqTBMCcdPeWDU15igbuU5OY YHSIu7nKV1JYfMYICng5OtZ+pOWnXbcY19M0G7F1saMbG89AO2vRVP75Kb5GpPsVP9RZ bw/JMJadn8syqxPLQb+Mo0n87zUy4PqUZtSR0laSoj+wEBQfHDU3fLw4TFg8vAzekbBf XTmSJmpDksdukUiZ79VwfgtKfptkd2vWfwxCkuhpCYzMicmfO5zIHEVadQNDzqwzop6Q ph2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=17Fza4IpA+jzaXhcvMBhJE/6a0kpoie5bLBgzHZYpaE=; b=rmYGfMYBzNrf6Nvo5hkLPhZU6FQ1ZWmOgwnabJdAoNJJwWNnzhFYoafxWi4mtpO/72 aMOxG9ElbVqVqfcZC/fLb0xzWYMHu2pnrm6HBwxLXbEAgCBsCN+lr6V6YDE6tAmrTOae mSKVB7b4KLoNlw6Sap1AQDdPooVX35qq+aKqQw5nvcOO4rPfwMYAyOGkFKbbeWzw5T8M wvuOZF/jBdZ62Ec9lVu3IgLQrA/lfdTQOZC0jp/pyRd6ALy1tcLiJV/vGH+mPt86neSN 5sCLjAeMGC3PnCOt6eoxEhdZxksunV8XrcbWT9rbFDmwXIjKoc8CoXlzlq5T41OsIjSO TDNg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t10si299033ilj.54.2021.05.19.11.00.48; Wed, 19 May 2021 11:01:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348938AbhERL7n (ORCPT + 99 others); Tue, 18 May 2021 07:59:43 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:3584 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348936AbhERL7n (ORCPT ); Tue, 18 May 2021 07:59:43 -0400 Received: from dggems701-chm.china.huawei.com (unknown [172.30.72.59]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4FkvZx4X4vzsRnJ; Tue, 18 May 2021 19:55:37 +0800 (CST) Received: from dggpemm500023.china.huawei.com (7.185.36.83) by dggems701-chm.china.huawei.com (10.3.19.178) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Tue, 18 May 2021 19:58:22 +0800 Received: from [10.174.187.128] (10.174.187.128) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Tue, 18 May 2021 19:58:21 +0800 Subject: Re: [RFC PATCH v3 6/9] hw/arm/virt-acpi-build: Use possible cpus in generation of MADT To: Salil Mehta CC: Peter Maydell , Andrew Jones , "Michael S . Tsirkin" , Igor Mammedov , Shannon Zhao , "Alistair Francis" , David Gibson , "qemu-devel@nongnu.org" , "qemu-arm@nongnu.org" , "Paolo Bonzini" , =?UTF-8?Q?Philippe_Mathieu-Daud=c3=a9?= , yangyicong , "Zengtao (B)" , "Song Bao Hua (Barry Song)" , "Wanghaibin (D)" , zhukeqian , yuzenghui , "linux-kernel@vger.kernel.org" , "linuxarm@openeuler.org" References: <20210516102900.28036-1-wangyanan55@huawei.com> <20210516102900.28036-7-wangyanan55@huawei.com> <6d3c643dc9174f8199ea9422f9e995e5@huawei.com> <14284387-dcf4-cfb2-127c-5d1e1d0ecb79@huawei.com> <82d006dab8b64e658f205246abc850c2@huawei.com> From: "wangyanan (Y)" Message-ID: Date: Tue, 18 May 2021 19:58:21 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <82d006dab8b64e658f205246abc850c2@huawei.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [10.174.187.128] X-ClientProxiedBy: dggeme701-chm.china.huawei.com (10.1.199.97) To dggpemm500023.china.huawei.com (7.185.36.83) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/5/18 14:47, Salil Mehta wrote: >> From: wangyanan (Y) >> Sent: Tuesday, May 18, 2021 6:03 AM >> >> Hi Salil, >> >> On 2021/5/18 1:07, Salil Mehta wrote: >>>> From: Qemu-arm >> [mailto:qemu-arm-bounces+salil.mehta=huawei.com@nongnu.org] >>>> On Behalf Of Yanan Wang >>>> Sent: Sunday, May 16, 2021 11:29 AM >>>> To: Peter Maydell ; Andrew Jones >>>> ; Michael S . Tsirkin ; Igor Mammedov >>>> ; Shannon Zhao ; Alistair >>>> Francis ; David Gibson >>>> ; qemu-devel@nongnu.org; qemu-arm@nongnu.org >>>> Cc: Song Bao Hua (Barry Song) ; zhukeqian >>>> ; yangyicong ; Zengtao (B) >>>> ; Wanghaibin (D) ; >>>> yuzenghui ; Paolo Bonzini ; >>>> Philippe Mathieu-Daudé >>>> Subject: [RFC PATCH v3 6/9] hw/arm/virt-acpi-build: Use possible cpus in >>>> generation of MADT >>>> >>>> When building ACPI tables regarding CPUs we should always build >>>> them for the number of possible CPUs, not the number of present >>>> CPUs. So we create gicc nodes in MADT for possible cpus and then >>>> ensure only the present CPUs are marked ENABLED. Furthermore, it >>>> also needed if we are going to support CPU hotplug in the future. >>> Hi Yanan, >>> Yes, these changes are part of the QEMU patch-set I floated last year. >>> >>> Link: https://www.mail-archive.com/qemu-devel@nongnu.org/msg712018.html >> Yes, I noticed this. Thanks! >>> Perhaps I am missing something, but how this patch is related to the vcpu >>> topology support? >> No related actually. But this patch together with patch 5 aim to provide >> complete information (all cpus including enabled and the others) to guest, >> which will be more consistent with requirement in ACPI spec. > > Well, if it is not related to the cpu topology support then this and other > similar patches included with the same line of thought should not be > part of this patch-set. > > I am already working with ARM folks in this regard. Hi Salil, I'm planning to pack this part into a separate patchset and may repost it another time, given that there are still some issues to solve. Thanks, Yanan > Thanks > >> We don't consider cpu hotplug at all in this patch, but it indeed pave way >> for cpu hotplug in the future. >> >> Thanks, >> Yanan >>> Thanks >>> >>>> Co-developed-by: Andrew Jones >>>> Signed-off-by: Andrew Jones >>>> Co-developed-by: Ying Fang >>>> Signed-off-by: Ying Fang >>>> Co-developed-by: Yanan Wang >>>> Signed-off-by: Yanan Wang >>>> --- >>>> hw/arm/virt-acpi-build.c | 29 +++++++++++++++++++++++++---- >>>> 1 file changed, 25 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c >>>> index a2d8e87616..4d64aeb865 100644 >>>> --- a/hw/arm/virt-acpi-build.c >>>> +++ b/hw/arm/virt-acpi-build.c >>>> @@ -481,6 +481,9 @@ build_madt(GArray *table_data, BIOSLinker *linker, >>>> VirtMachineState *vms) >>>> const int *irqmap = vms->irqmap; >>>> AcpiMadtGenericDistributor *gicd; >>>> AcpiMadtGenericMsiFrame *gic_msi; >>>> + MachineClass *mc = MACHINE_GET_CLASS(vms); >>>> + const CPUArchIdList *possible_cpus = >>>> mc->possible_cpu_arch_ids(MACHINE(vms)); >>>> + bool pmu; >>>> int i; >>>> >>>> acpi_data_push(table_data, sizeof(AcpiMultipleApicTable)); >>>> @@ -491,11 +494,21 @@ build_madt(GArray *table_data, BIOSLinker *linker, >>>> VirtMachineState *vms) >>>> gicd->base_address = cpu_to_le64(memmap[VIRT_GIC_DIST].base); >>>> gicd->version = vms->gic_version; >>>> >>>> - for (i = 0; i < MACHINE(vms)->smp.cpus; i++) { >>>> + for (i = 0; i < possible_cpus->len; i++) { >>>> AcpiMadtGenericCpuInterface *gicc = acpi_data_push(table_data, >>>> sizeof(*gicc)); >>>> ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(i)); >>>> >>>> + /* >>>> + * PMU should have been either implemented for all CPUs or not, >>>> + * so we only get information from the first CPU, which could >>>> + * represent the others. >>>> + */ >>>> + if (i == 0) { >>>> + pmu = arm_feature(&armcpu->env, ARM_FEATURE_PMU); >>>> + } >>>> + assert(!armcpu || arm_feature(&armcpu->env, ARM_FEATURE_PMU) == >> pmu); >>>> + >>>> gicc->type = ACPI_APIC_GENERIC_CPU_INTERFACE; >>>> gicc->length = sizeof(*gicc); >>>> if (vms->gic_version == 2) { >>>> @@ -504,11 +517,19 @@ build_madt(GArray *table_data, BIOSLinker *linker, >>>> VirtMachineState *vms) >>>> gicc->gicv_base_address = >>>> cpu_to_le64(memmap[VIRT_GIC_VCPU].base); >>>> } >>>> gicc->cpu_interface_number = cpu_to_le32(i); >>>> - gicc->arm_mpidr = cpu_to_le64(armcpu->mp_affinity); >>>> + gicc->arm_mpidr = cpu_to_le64(possible_cpus->cpus[i].arch_id); >>>> gicc->uid = cpu_to_le32(i); >>>> - gicc->flags = cpu_to_le32(ACPI_MADT_GICC_ENABLED); >>>> >>>> - if (arm_feature(&armcpu->env, ARM_FEATURE_PMU)) { >>>> + /* >>>> + * ACPI spec says that LAPIC entry for non present CPU may be >>>> + * omitted from MADT or it must be marked as disabled. Here we >>>> + * choose to also keep the disabled ones in MADT. >>>> + */ >>>> + if (possible_cpus->cpus[i].cpu != NULL) { >>>> + gicc->flags = cpu_to_le32(ACPI_MADT_GICC_ENABLED); >>>> + } >>>> + >>>> + if (pmu) { >>>> gicc->performance_interrupt = >> cpu_to_le32(PPI(VIRTUAL_PMU_IRQ)); >>>> } >>>> if (vms->virt) { >>>> -- >>>> 2.19.1 >>>> >>> .