[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [XEN v1] xen/Arm: Remove the extra assignment


  • To: Julien Grall <julien@xxxxxxx>, Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Ayan Kumar Halder <ayankuma@xxxxxxx>
  • Date: Sat, 3 Dec 2022 19:08:47 +0000
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wsFcESaDUmet4EZbcaO1d1NPpq9U4nqcXZ/AP0joGhY=; b=COf7AQeQCLMLmY5MWVzv4pIeQvdGq3xH2XbLjHswxjyeCCRfD4mlJ/1/7IbIh8mKoHXrxNYmOAAg3v8+nqz5ONe3tfVeD+PZC1Y57bD7LaRPRucO+Txw0QYCvv2eQfNXocl1Q8BvhHbzucrn8+NG8alS07NU0Oemit5bh7cfqZ6lrB0H8KDCm9yxWJWrgqrSu2rAw2bKlBkxESstHpP24ED6W0435oMpYymWYZK1K/usQXeWwGHB1RlYLEfhfq6OlTjVeI1A8SvnZ+l0x6J3XLCJGSDmQjiwKFvjI2TZGqrAJ7vmPIAyNhe0E3Q/34eFGynCNsb6+8dFWaItw8phpw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iZgiasLxyeyKlHQlnu90AlAc+RQ5as1mHMHM/F9Vb1hczxo5d8QDBPrVOmwZ4mRxb3XwvVc+fwRbwRhEjS5HEPeC4Nk/+h/Gq24CZ60WrPeLq5g3Qhxx6aQaGss9tMX98WEe3ipFXxCCxJ5Qaby2hzLuH1S7J1K8OBpJx8xXaSfgOJBWne6g2HNKLULsrVJaqbcgE5JCfpAwnkUxQGnItx1Go4kcFT2hK5/DFmLkV9yYVfqgGfkw4XoO5Om54JQ5f61dCpMExWBRSjnvRD6D92sJau3l09knm86DhBev+0MmalsZtyGh4P/VKJ+dv5aw1sr9EPrV28E2YYulZV3t/w==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com;
  • Cc: sstabellini@xxxxxxxxxx, stefanos@xxxxxxxxxx, andrew.cooper3@xxxxxxxxxx, george.dunlap@xxxxxxxxxx, jbeulich@xxxxxxxx, wl@xxxxxxx
  • Delivery-date: Sat, 03 Dec 2022 19:09:20 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 03/12/2022 18:05, Julien Grall wrote:
Hi Ayan,

Hi Julien,


Title: It suggests that this is modifying arch/arm whereas you are updating the Arm part of the ns16550 driver.

In addition to that, from a reader PoV, it is more important to emphase on the fact the truncation check is removed rather than the extra assignment.

So I would suggest the following title:

xen/ns16550: Remove unneeded truncation check in the DT init code
Ack

On 01/12/2022 17:31, Ayan Kumar Halder wrote:
As "io_size" and "uart->io_size" are both u64, so there will be no truncation.
Thus, one can remove the ASSERT() and extra assignment.

In an earlier commit (7c1de0038895cbc75ebd0caffc5b0f3f03c5ad51),

Please use 12-digit hash and provide the commit title.
Ack

"ns16550.io_size" was u32 and "io_size" was u64. Thus, the ASSERT() was needed
to check if the values are the same.
However, in a later commit (c9f8e0aee507bec25104ca5535fde38efae6c6bc),

Ditto.
Ack

"ns16550.io_size" was changed to u64. Thus, the ASSERT() became redundant.

Those two paragraphs explaining your reasoning why the truncation check is removed. So I think they should be moved first. Then you can add the initial paragraph to explain the resolution.

However... I wonder whether it would not be better to switch 'io_size' to paddr_t because, as you said earlier one, on 32-bit ARMv8-R the address is 32-bit. Therefore:
There are some more drivers where this kind of change (ie using paddr_t instead of u64) is required. Thus, I wish to send it in a serie where I will introduce CONFIG_ARM_PA_32  (to add support for 32 bit physical addresses). Also ...
 1. it sounds pointless to store the size using 64-bit
 2. the truncation check still make sense (maybe hardened) in the 32-bit ARMv8-R to catch buggy DT.

Yes, but we need a common check for all the drivers/code as the DT gives us 64 bit address (ie u64) and this needs to be translated to paddr_t (which can be u64 or u32).

Again, as part of serie to introduce CONFIG_ARM_PA_32, I will provide the following function to do address translation :-

--- a/xen/arch/arm/include/asm/platform.h
+++ b/xen/arch/arm/include/asm/platform.h
@@ -42,6 +42,32 @@ struct platform_desc {
     unsigned int dma_bitsize;
 };

+int translate_dt_address_size(u64 *dt_addr, u64 *dt_size, paddr_t *addr,
+                               paddr_t *size)
+{
+#ifdef CONFIG_ARM_PA_32
+    if ( dt_addr && (*dt_addr >> PADDR_SHIFT) )
+    {
+        dprintk(XENLOG_ERR, "Error in DT. Invalid address\n");
+        return -ENXIO;
+    }
+
+    if ( dt_size && (*dt_size >> PADDR_SHIFT) )
+    {
+        dprintk(XENLOG_ERR, "Error in DT. Invalid size\n");
+        return -ENXIO;
+    }
+#endif
+
+    if ( dt_addr && addr )
+        *addr = (paddr_t) (*dt_addr);
+
+    if ( dt_size && size )
+        *size = (paddr_t) (*dt_size);
+
+    return 0;
+}

And the drivers would invoke it as follows. For eg exynos5.c

diff --git a/xen/arch/arm/platforms/exynos5.c b/xen/arch/arm/platforms/exynos5.c
index 6560507092..15d1df9104 100644
--- a/xen/arch/arm/platforms/exynos5.c
+++ b/xen/arch/arm/platforms/exynos5.c
@@ -42,8 +42,9 @@ static int exynos5_init_time(void)
     void __iomem *mct;
     int rc;
     struct dt_device_node *node;
-    u64 mct_base_addr;
-    u64 size;
+    paddr_t mct_base_addr;
+    paddr_t size;
+    uint64_t dt_mct_base_addr, dt_size;

     node = dt_find_compatible_node(NULL, NULL, "samsung,exynos4210-mct");
     if ( !node )
@@ -52,14 +53,19 @@ static int exynos5_init_time(void)
         return -ENXIO;
     }

-    rc = dt_device_get_address(node, 0, &mct_base_addr, &size);
+    rc = dt_device_get_address(node, 0, &dt_mct_base_addr, &dt_size);
     if ( rc )
     {
         dprintk(XENLOG_ERR, "Error in \"samsung,exynos4210-mct\"\n");
         return -ENXIO;
     }

-    dprintk(XENLOG_INFO, "mct_base_addr: %016llx size: %016llx\n",
+    rc = translate_dt_address_size(&dt_mct_base_addr, &dt_size, &mct_base_addr,
+                                   &size);
+    if ( rc )
+        rteturn rc;
+
+    dprintk(XENLOG_INFO, "mct_base_addr: 0x%"PRIpaddr" size: 0x%"PRIpaddr"\n",
             mct_base_addr, size);

So if this sounds reasonable, we can still remove the truncation as part of the current patch.

If you agree, I can send v2 with an updated commit message.

- Ayan


Cheers,




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.