From nobody Tue Feb 10 12:43:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org ARC-Seal: i=1; a=rsa-sha256; t=1601153799; cv=none; d=zohomail.com; s=zohoarc; b=RMQ9ODzX21vnM7Gyy3y4xw62lL7bKSEMSd2Jb0UniEOViwEP84Kb/BDRUVmBIyf8huCLshIW6ctrx2yKfiE9LeCdqKE6Q1cRGMA48zohvTjmcoLxeoptNUp7ecJwwIiGTCJFc+J10DhXlV6gxOuI2wVUGluw3nA+KV5XVnFYQ84= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601153799; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=S0f3H7Kr0VFazdDtn3XQopoMT6Wxzv8cwTZpkhLH01s=; b=WrJIUBOGUQmhdEuyUq8RZO/woxUDxNn3C6izUxu755c36qzVYm5pmOmImrCwT0NorUXCh6ngNLJlzcLXyb+DS7N41gVIoaZpXVRDbtXTaYb33DKhK8Je/9fgzDF/pY2fE7dDtz1/bZgW/NCLqwUqroYuugDub/SX0UyRSfgpDQU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1601153799778429.7077873706894; Sat, 26 Sep 2020 13:56:39 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1kMHEo-0003jR-EJ; Sat, 26 Sep 2020 20:56:10 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1kMHEn-0003jG-5e for xen-devel@lists.xenproject.org; Sat, 26 Sep 2020 20:56:09 +0000 Received: from mail.xenproject.org (unknown [104.130.215.37]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id a572bbae-642c-42be-939e-db8ad5fc746d; Sat, 26 Sep 2020 20:56:06 +0000 (UTC) Received: from xenbits.xenproject.org ([104.239.192.120]) by mail.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1kMHEh-0000CM-UN; Sat, 26 Sep 2020 20:56:03 +0000 Received: from 54-240-197-235.amazon.com ([54.240.197.235] helo=ufe34d9ed68d054.ant.amazon.com) by xenbits.xenproject.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kMHEh-0004I0-KG; Sat, 26 Sep 2020 20:56:03 +0000 X-Inumbo-ID: a572bbae-642c-42be-939e-db8ad5fc746d DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org; s=20200302mail; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=S0f3H7Kr0VFazdDtn3XQopoMT6Wxzv8cwTZpkhLH01s=; b=XTTLL9o0O0cvFJ73FdrDf4e1M ZFZztPr/r8XcTorUAANyFE/SWHQ1H3p6QPQ87JiBzRTksYOTgDa7XDhwWS3HSXMYnKNPYy0EDtcHZ m8DKN6gzTcGDYWuzi5IXgnoF6YnABQDpRppTWDCgEKqmweINpebF2A0ezRegiKewr7/EQ=; From: Julien Grall To: xen-devel@lists.xenproject.org Cc: alex.bennee@linaro.org, masami.hiramatsu@linaro.org, ehem+xen@m5p.com, bertrand.marquis@arm.com, andre.przywara@arm.com, Julien Grall , Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Andrew Cooper , George Dunlap , Ian Jackson , Jan Beulich , Wei Liu , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 1/4] xen/acpi: Rework acpi_os_map_memory() and acpi_os_unmap_memory() Date: Sat, 26 Sep 2020 21:55:39 +0100 Message-Id: <20200926205542.9261-2-julien@xen.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200926205542.9261-1-julien@xen.org> References: <20200926205542.9261-1-julien@xen.org> X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: pass (identity @xen.org) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Julien Grall The functions acpi_os_{un,}map_memory() are meant to be arch-agnostic while the __acpi_os_{un,}map_memory() are meant to be arch-specific. Currently, the former are still containing x86 specific code. To avoid this rather strange split, the generic helpers are reworked so they are arch-agnostic. This requires the introduction of a new helper __acpi_os_unmap_memory() that will undo any mapping done by __acpi_os_map_memory(). Currently, the arch-helper for unmap is basically a no-op so it only returns whether the mapping was arch specific. But this will change in the future. Note that the x86 version of acpi_os_map_memory() was already able to able the 1MB region. Hence why there is no addition of new code. Signed-off-by: Julien Grall Reviewed-by: Rahul Singh Tested-by: Rahul Singh --- xen/arch/arm/acpi/lib.c | 10 ++++++++++ xen/arch/x86/acpi/lib.c | 18 ++++++++++++++++++ xen/drivers/acpi/osl.c | 34 ++++++++++++++++++---------------- xen/include/xen/acpi.h | 1 + 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/xen/arch/arm/acpi/lib.c b/xen/arch/arm/acpi/lib.c index 4fc6e17322c1..2192a5519171 100644 --- a/xen/arch/arm/acpi/lib.c +++ b/xen/arch/arm/acpi/lib.c @@ -30,6 +30,10 @@ char *__acpi_map_table(paddr_t phys, unsigned long size) unsigned long base, offset, mapped_size; int idx; =20 + /* No arch specific implementation after early boot */ + if ( system_state >=3D SYS_STATE_boot ) + return NULL; + offset =3D phys & (PAGE_SIZE - 1); mapped_size =3D PAGE_SIZE - offset; set_fixmap(FIXMAP_ACPI_BEGIN, maddr_to_mfn(phys), PAGE_HYPERVISOR); @@ -49,6 +53,12 @@ char *__acpi_map_table(paddr_t phys, unsigned long size) return ((char *) base + offset); } =20 +bool __acpi_unmap_table(void *ptr, unsigned long size) +{ + return ( vaddr >=3D FIXMAP_ADDR(FIXMAP_ACPI_BEGIN) && + vaddr < (FIXMAP_ADDR(FIXMAP_ACPI_END) + PAGE_SIZE) ); +} + /* True to indicate PSCI 0.2+ is implemented */ bool __init acpi_psci_present(void) { diff --git a/xen/arch/x86/acpi/lib.c b/xen/arch/x86/acpi/lib.c index 265b9ad81905..77803f4d4c63 100644 --- a/xen/arch/x86/acpi/lib.c +++ b/xen/arch/x86/acpi/lib.c @@ -46,6 +46,10 @@ char *__acpi_map_table(paddr_t phys, unsigned long size) if ((phys + size) <=3D (1 * 1024 * 1024)) return __va(phys); =20 + /* No arch specific implementation after early boot */ + if (system_state >=3D SYS_STATE_boot) + return NULL; + offset =3D phys & (PAGE_SIZE - 1); mapped_size =3D PAGE_SIZE - offset; set_fixmap(FIX_ACPI_END, phys); @@ -66,6 +70,20 @@ char *__acpi_map_table(paddr_t phys, unsigned long size) return ((char *) base + offset); } =20 +bool __acpi_unmap_table(void *ptr, unsigned long size) +{ + unsigned long vaddr =3D (unsigned long)ptr; + + if (vaddr >=3D DIRECTMAP_VIRT_START && + vaddr < DIRECTMAP_VIRT_END) { + ASSERT(!((__pa(ptr) + size - 1) >> 20)); + return true; + } + + return (vaddr >=3D __fix_to_virt(FIX_ACPI_END)) && + (vaddr < (__fix_to_virt(FIX_ACPI_BEGIN) + PAGE_SIZE)); +} + unsigned int acpi_get_processor_id(unsigned int cpu) { unsigned int acpiid, apicid; diff --git a/xen/drivers/acpi/osl.c b/xen/drivers/acpi/osl.c index 4c8bb7839eda..100eee72def2 100644 --- a/xen/drivers/acpi/osl.c +++ b/xen/drivers/acpi/osl.c @@ -92,27 +92,29 @@ acpi_physical_address __init acpi_os_get_root_pointer(v= oid) void __iomem * acpi_os_map_memory(acpi_physical_address phys, acpi_size size) { - if (system_state >=3D SYS_STATE_boot) { - mfn_t mfn =3D _mfn(PFN_DOWN(phys)); - unsigned int offs =3D phys & (PAGE_SIZE - 1); - - /* The low first Mb is always mapped on x86. */ - if (IS_ENABLED(CONFIG_X86) && !((phys + size - 1) >> 20)) - return __va(phys); - return __vmap(&mfn, PFN_UP(offs + size), 1, 1, - ACPI_MAP_MEM_ATTR, VMAP_DEFAULT) + offs; - } - return __acpi_map_table(phys, size); + void *ptr; + mfn_t mfn =3D _mfn(PFN_DOWN(phys)); + unsigned int offs =3D phys & (PAGE_SIZE - 1); + + /* Try the arch specific implementation first */ + ptr =3D __acpi_map_table(phys, size); + if (ptr) + return ptr; + + /* No common implementation for early boot map */ + if (unlikely(system_state < SYS_STATE_boot)) + return NULL; + + ptr =3D __vmap(&mfn, PFN_UP(offs + size), 1, 1, + ACPI_MAP_MEM_ATTR, VMAP_DEFAULT); + + return !ptr ? NULL : (ptr + offs); } =20 void acpi_os_unmap_memory(void __iomem * virt, acpi_size size) { - if (IS_ENABLED(CONFIG_X86) && - (unsigned long)virt >=3D DIRECTMAP_VIRT_START && - (unsigned long)virt < DIRECTMAP_VIRT_END) { - ASSERT(!((__pa(virt) + size - 1) >> 20)); + if (__acpi_unmap_table(virt, size)) return; - } =20 if (system_state >=3D SYS_STATE_boot) vunmap((void *)((unsigned long)virt & PAGE_MASK)); diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h index c945ab05c864..5a84a4bf54e0 100644 --- a/xen/include/xen/acpi.h +++ b/xen/include/xen/acpi.h @@ -68,6 +68,7 @@ typedef int (*acpi_table_entry_handler) (struct acpi_subt= able_header *header, co =20 unsigned int acpi_get_processor_id (unsigned int cpu); char * __acpi_map_table (paddr_t phys_addr, unsigned long size); +bool __acpi_unmap_table(void *ptr, unsigned long size); int acpi_boot_init (void); int acpi_boot_table_init (void); int acpi_numa_init (void); --=20 2.17.1